diff --git a/completion.go b/completion.go index 57e82eef..dc0c69b2 100644 --- a/completion.go +++ b/completion.go @@ -43,7 +43,7 @@ type CompletionManager struct { func (c *CompletionManager) GetSelectedSuggestion() (s Suggest, ok bool) { if c.selected == -1 { return Suggest{}, false - } else if c.selected < -1 { + } else if c.selected < -1 || c.selected >= len(c.tmp) { debug.Assert(false, "must not reach here") c.selected = -1 return Suggest{}, false diff --git a/input.go b/input.go index 307e7471..2ad87471 100644 --- a/input.go +++ b/input.go @@ -43,8 +43,8 @@ var ASCIISequences = []*ASCIICode{ {Key: ControlF, ASCIICode: []byte{0x6}}, {Key: ControlG, ASCIICode: []byte{0x7}}, {Key: ControlH, ASCIICode: []byte{0x8}}, - //{Key: ControlI, ASCIICode: []byte{0x9}}, - //{Key: ControlJ, ASCIICode: []byte{0xa}}, + // {Key: ControlI, ASCIICode: []byte{0x9}}, + // {Key: ControlJ, ASCIICode: []byte{0xa}}, {Key: ControlK, ASCIICode: []byte{0xb}}, {Key: ControlL, ASCIICode: []byte{0xc}}, {Key: ControlM, ASCIICode: []byte{0xd}}, @@ -113,8 +113,8 @@ var ASCIISequences = []*ASCIICode{ {Key: F8, ASCIICode: []byte{0x1b, 0x5b, 0x31, 0x39, 0x7e}}, {Key: F9, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x30, 0x7e}}, {Key: F10, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x31, 0x7e}}, - {Key: F11, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x32, 0x7e}}, - {Key: F12, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x34, 0x7e, 0x8}}, + {Key: F11, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x33, 0x7e}}, + {Key: F12, ASCIICode: []byte{0x1b, 0x5b, 0x32, 0x34, 0x7e}}, {Key: F13, ASCIICode: []byte{0x1b, 0x5b, 0x25, 0x7e}}, {Key: F14, ASCIICode: []byte{0x1b, 0x5b, 0x26, 0x7e}}, {Key: F15, ASCIICode: []byte{0x1b, 0x5b, 0x28, 0x7e}}, diff --git a/prompt.go b/prompt.go index 173cd517..be096bca 100644 --- a/prompt.go +++ b/prompt.go @@ -154,6 +154,9 @@ func (p *Prompt) feed(b []byte) (shouldExit bool, exec *Exec) { if p.handleASCIICodeBinding(b) { return } + if len(b) > 0 && (b[0] <= 0x1f || b[0] == 0x7f) { + break + } p.buf.InsertText(string(b), false, true) }