~delthas/senpai-dev

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch

[PATCH] Add support for standard readline bindings

Details
Message ID
<20220510013000.63808-1-greg@gpanders.com>
DKIM signature
pass
Download raw message
Patch: +55 -0
* Use Ctrl-F and Ctrl-B to move forward/backward one character
* Use Alt-F and Alt-B to move forward/backward one word
* Use Ctrl-A and Ctrl-E to move to the beginning/end of the input line
* Use Ctrl-K to delete all text from the cursor position to the end of
  the current line
---
 app.go           | 14 ++++++++++++++
 doc/senpai.1.scd | 22 ++++++++++++++++++++++
 ui/editor.go     | 15 +++++++++++++++
 ui/ui.go         |  4 ++++
 4 files changed, 55 insertions(+)

diff --git a/app.go b/app.go
index b044a06..768327f 100644
--- a/app.go
+++ b/app.go
@@ -505,6 +505,16 @@ func (app *App) handleKeyEvent(ev *tcell.EventKey) {
		} else {
			app.win.InputSet("/quit")
		}
	case tcell.KeyCtrlA:
		app.win.InputHome()
	case tcell.KeyCtrlB:
		app.win.InputLeft()
	case tcell.KeyCtrlE:
		app.win.InputEnd()
	case tcell.KeyCtrlF:
		app.win.InputRight()
	case tcell.KeyCtrlK:
		app.win.InputKillLine()
	case tcell.KeyCtrlL:
		app.win.Resize()
	case tcell.KeyCtrlU, tcell.KeyPgUp:
@@ -614,6 +624,10 @@ func (app *App) handleKeyEvent(ev *tcell.EventKey) {
				app.win.ScrollDownHighlight()
			case 'p':
				app.win.ScrollUpHighlight()
			case 'f':
				app.win.InputRightWord()
			case 'b':
				app.win.InputLeftWord()
			case '1', '2', '3', '4', '5', '6', '7', '8', '9':
				app.win.GoToBufferNo(int(ev.Rune()-'0') - 1)
			}
diff --git a/doc/senpai.1.scd b/doc/senpai.1.scd
index abb0af8..4e62405 100644
--- a/doc/senpai.1.scd
+++ b/doc/senpai.1.scd
@@ -65,9 +65,25 @@ of messages are in the timeline:

# KEYBOARD SHORTCUTS

*CTRL-A*
	Move the cursor to the beginning of the input field.

*CTRL-B*
	Move the cursor backward one character.

*CTRL-E*
	Move the cursor to the end of the input field.

*CTRL-F*
	Move the cursor forward one character.

*CTRL-C*
	Clear input line.

*CTRL-K*
	Remove all of the text from the cursor position to the end of the input
	line.

*CTRL-U*, *PgUp*
	Go up in the timeline.

@@ -86,6 +102,12 @@ of messages are in the timeline:
*ALT-END*
	Go to the last buffer.

*ALT-B*
	Move the cursor backward one word.

*ALT-F*
	Move the cursor forward one word.

*ALT-P*
	Go to the previous highlight

diff --git a/ui/editor.go b/ui/editor.go
index 606bf8d..ddd7039 100644
--- a/ui/editor.go
+++ b/ui/editor.go
@@ -143,6 +143,21 @@ func (e *Editor) RemRuneForward() (ok bool) {
	return
}

func (e *Editor) RemLineForward() (ok bool) {
	ok = e.cursorIdx < len(e.text[e.lineIdx])
	if !ok {
		return
	}

	for i := len(e.text[e.lineIdx]); i > e.cursorIdx; i-- {
		e.remRuneAt(i - 1)
	}

	e.autoCache = nil
	e.backsearchEnd()
	return
}

func (e *Editor) remRuneAt(idx int) {
	// TODO avoid looping twice
	rw := e.textWidth[idx+1] - e.textWidth[idx]
diff --git a/ui/ui.go b/ui/ui.go
index 77757cb..98e048e 100644
--- a/ui/ui.go
+++ b/ui/ui.go
@@ -377,6 +377,10 @@ func (ui *UI) InputDeleteWord() (ok bool) {
	return ui.e.RemWord()
}

func (ui *UI) InputKillLine() (ok bool) {
	return ui.e.RemLineForward()
}

func (ui *UI) InputAutoComplete(offset int) (ok bool) {
	return ui.e.AutoComplete(offset)
}
-- 
2.35.3
Reply to thread Export thread (mbox)