diff --git a/vendor/github.com/jesseduffield/gocui/edit.go b/vendor/github.com/jesseduffield/gocui/edit.go index ac1827aea9f..484294e5f5b 100644 --- a/vendor/github.com/jesseduffield/gocui/edit.go +++ b/vendor/github.com/jesseduffield/gocui/edit.go @@ -25,22 +25,27 @@ var DefaultEditor Editor = EditorFunc(SimpleEditor) // SimpleEditor is used as the default gocui editor. func SimpleEditor(v *View, key Key, ch rune, mod Modifier) bool { switch { - case (key == KeyBackspace || key == KeyBackspace2) && (mod&ModAlt) != 0, + case (key == KeyBackspace || key == KeyBackspace2) && (mod&(ModAlt|ModCtrl)) != 0, key == KeyCtrlW: v.TextArea.BackSpaceWord() case key == KeyBackspace || key == KeyBackspace2 || key == KeyCtrlH: v.TextArea.BackSpaceChar() + case key == KeyDelete && (mod&ModCtrl) != 0, + ch == 'd' && (mod&ModAlt) != 0: + v.TextArea.DeleteWord() case key == KeyCtrlD || key == KeyDelete: v.TextArea.DeleteChar() case key == KeyArrowDown: v.TextArea.MoveCursorDown() case key == KeyArrowUp: v.TextArea.MoveCursorUp() - case (key == KeyArrowLeft || ch == 'b') && (mod&ModAlt) != 0: + case key == KeyArrowLeft && (mod&(ModAlt|ModCtrl)) != 0, + ch == 'b' && (mod&ModAlt) != 0: v.TextArea.MoveLeftWord() case key == KeyArrowLeft || key == KeyCtrlB: v.TextArea.MoveCursorLeft() - case (key == KeyArrowRight || ch == 'f') && (mod&ModAlt) != 0: + case key == KeyArrowRight && (mod&(ModAlt|ModCtrl)) != 0, + ch == 'f' && (mod&ModAlt) != 0: v.TextArea.MoveRightWord() case key == KeyArrowRight || key == KeyCtrlF: v.TextArea.MoveCursorRight() diff --git a/vendor/github.com/jesseduffield/gocui/keybinding.go b/vendor/github.com/jesseduffield/gocui/keybinding.go index 0ad5dbe5c21..dd26dd107d4 100644 --- a/vendor/github.com/jesseduffield/gocui/keybinding.go +++ b/vendor/github.com/jesseduffield/gocui/keybinding.go @@ -301,6 +301,5 @@ const ( ModNone Modifier = Modifier(0) ModAlt = Modifier(tcell.ModAlt) ModMotion = Modifier(2) // just picking an arbitrary number here that doesn't clash with tcell.ModAlt - // ModCtrl doesn't work with keyboard keys. Use CtrlKey in Key and ModNone. This is was for mouse clicks only (tcell.v1) - // ModCtrl = Modifier(tcell.ModCtrl) + ModCtrl = Modifier(tcell.ModCtrl) ) diff --git a/vendor/github.com/jesseduffield/gocui/tcell_driver.go b/vendor/github.com/jesseduffield/gocui/tcell_driver.go index 6e9c12b4cc0..d28c3c1c047 100644 --- a/vendor/github.com/jesseduffield/gocui/tcell_driver.go +++ b/vendor/github.com/jesseduffield/gocui/tcell_driver.go @@ -311,6 +311,8 @@ func (g *Gui) pollEvent() GocuiEvent { mod = 0 ch = rune(0) k = tcell.KeyF63 + } else if mod == tcell.ModCtrl && (k == tcell.KeyRight || k == tcell.KeyLeft || k == tcell.KeyBackspace || k == tcell.KeyBackspace2 || k == tcell.KeyDelete) { + // Preserve Ctrl modifier for word navigation and deletion } else if mod == tcell.ModCtrl || mod == tcell.ModShift { // remove Ctrl or Shift if specified // - shift - will be translated to the final code of rune diff --git a/vendor/github.com/jesseduffield/gocui/text_area.go b/vendor/github.com/jesseduffield/gocui/text_area.go index 9c88e983b78..8f2d24082f8 100644 --- a/vendor/github.com/jesseduffield/gocui/text_area.go +++ b/vendor/github.com/jesseduffield/gocui/text_area.go @@ -340,13 +340,12 @@ func (self *TextArea) MoveLeftWord() { self.cursor = self.newCursorForMoveLeftWord() } -func (self *TextArea) MoveRightWord() { +func (self *TextArea) newCursorForMoveRightWord() int { if self.atEnd() { - return + return self.cursor } if self.atLineEnd() { - self.cursor++ - return + return self.cursor + 1 } cellCursor := self.contentCursorToCellCursor(self.cursor) @@ -364,7 +363,11 @@ func (self *TextArea) MoveRightWord() { } } - self.cursor = self.cellCursorToContentCursor(cellCursor) + return self.cellCursorToContentCursor(cellCursor) +} + +func (self *TextArea) MoveRightWord() { + self.cursor = self.newCursorForMoveRightWord() } func (self *TextArea) MoveCursorUp() { @@ -559,6 +562,20 @@ func (self *TextArea) BackSpaceWord() { self.updateCells() } +func (self *TextArea) DeleteWord() { + newCursor := self.newCursorForMoveRightWord() + if newCursor == self.cursor { + return + } + + clipboard := self.content[self.cursor:newCursor] + if clipboard != "\n" { + self.clipboard = clipboard + } + self.content = self.content[:self.cursor] + self.content[newCursor:] + self.updateCells() +} + func (self *TextArea) Yank() { self.TypeString(self.clipboard) }