// InsertNewline inserts a newline plus possible some whitespace if autoindent is on
func (h *BufHandler) InsertNewline() bool {
- if h.Buf.Type == buffer.BTInfo {
- InfoBar.DonePrompt(false)
- return false
- }
-
// Insert a newline
if h.Cursor.HasSelection() {
h.Cursor.DeleteSelection()
args = []string{sh}
}
- term := func(i int) {
- // If there is only one open file we make a new tab instead of overwriting it
- newtab := len(MainTab().Panes) == 1 && len(Tabs.List) == 1
+ term := func(i int, newtab bool) {
t := new(shell.Terminal)
t.Start(args, false, true)
MainTab().SetActive(i)
}
+ // If there is only one open file we make a new tab instead of overwriting it
+ newtab := len(MainTab().Panes) == 1 && len(Tabs.List) == 1
+
+ if newtab {
+ term(0, true)
+ return
+ }
+
for i, p := range ps {
if p.ID() == h.ID() {
if h.Buf.Modified() {
InfoBar.YNPrompt("Save changes to "+h.Buf.GetName()+" before closing? (y,n,esc)", func(yes, canceled bool) {
if !canceled && !yes {
- term(i)
+ term(i, false)
} else if !canceled && yes {
h.Save()
- term(i)
+ term(i, false)
}
})
} else {
- term(i)
+ term(i, false)
}
}
}
}
done := h.DoKeyEvent(ke)
- if !done && e.Key() == tcell.KeyRune {
+ if e.Key() == tcell.KeyRune && h.HasYN {
if e.Rune() == 'y' && h.HasYN {
h.YNResp = true
h.DonePrompt(false)
} else if e.Rune() == 'n' && h.HasYN {
h.YNResp = false
h.DonePrompt(false)
- } else if !h.HasYN {
- h.DoRuneInsert(e.Rune())
- done = true
}
}
+ if e.Key() == tcell.KeyRune && !done && !h.HasYN {
+ h.DoRuneInsert(e.Rune())
+ done = true
+ }
if done && h.HasPrompt && !h.HasYN {
resp := strings.TrimSpace(string(h.LineBytes(0)))
hist := h.History[h.PromptType]
th := new(TermHandler)
th.Terminal = t
th.id = id
+ th.mouseReleased = true
th.Window = display.NewTermWindow(x, y, w, h, t)
return th
}
x, y := e.Position()
v := t.GetView()
x -= v.X
- y += v.Y
+ y -= v.Y
if e.Buttons() == tcell.Button1 {
if !t.mouseReleased {
// SetCursors resets this buffer's cursors to a new list
func (b *Buffer) SetCursors(c []*Cursor) {
b.cursors = c
+ b.EventHandler.cursors = b.cursors
}
// AddCursor adds a new cursor to the list
func (b *Buffer) AddCursor(c *Cursor) {
b.cursors = append(b.cursors, c)
+ b.EventHandler.cursors = b.cursors
b.UpdateCursors()
}
if b.curCursor >= len(b.cursors) {
b.curCursor = len(b.cursors) - 1
}
+ b.EventHandler.cursors = b.cursors
}
// UpdateCursors updates all the cursors indicies
i.HasPrompt = false
i.HasYN = false
i.HasGutter = false
- if i.PromptCallback != nil && !hadYN {
- if canceled {
- i.PromptCallback("", true)
- h := i.History[i.PromptType]
- i.History[i.PromptType] = h[:len(h)-1]
- } else {
- resp := strings.TrimSpace(string(i.LineBytes(0)))
- i.PromptCallback(resp, false)
- h := i.History[i.PromptType]
- h[len(h)-1] = resp
+ if !hadYN {
+ if i.PromptCallback != nil {
+ if canceled {
+ i.PromptCallback("", true)
+ h := i.History[i.PromptType]
+ i.History[i.PromptType] = h[:len(h)-1]
+ } else {
+ resp := strings.TrimSpace(string(i.LineBytes(0)))
+ i.PromptCallback(resp, false)
+ h := i.History[i.PromptType]
+ h[len(h)-1] = resp
+ }
+ i.PromptCallback = nil
+ i.EventCallback = nil
}
+ if i.EventCallback != nil {
+ i.EventCallback = nil
+ }
+ i.Replace(i.Start(), i.End(), []byte{})
}
if i.YNCallback != nil && hadYN {
i.YNCallback(i.YNResp, canceled)
+ i.YNCallback = nil
}
- i.PromptCallback = nil
- i.EventCallback = nil
- i.YNCallback = nil
- i.Replace(i.Start(), i.End(), []byte{})
}
// Reset resets the infobuffer's msg and info