diff --git a/man/man1/fzf.1 b/man/man1/fzf.1 index 1e5ab773..8f79c468 100644 --- a/man/man1/fzf.1 +++ b/man/man1/fzf.1 @@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. .. -.TH fzf 1 "Feb 2018" "fzf 0.17.4-devel" "fzf - a command-line fuzzy finder" +.TH fzf 1 "Apr 2018" "fzf 0.17.4-devel" "fzf - a command-line fuzzy finder" .SH NAME fzf - a command-line fuzzy finder @@ -464,6 +464,10 @@ e.g. \fBfzf --bind=ctrl-j:accept,ctrl-k:kill-line\fR \fIenter\fR (\fIreturn\fR \fIctrl-m\fR) \fIspace\fR \fIbspace\fR (\fIbs\fR) + \fIalt-up\fR + \fIalt-down\fR + \fIalt-left\fR + \fIalt-right\fR \fIalt-enter\fR \fIalt-space\fR \fIalt-bspace\fR (\fIalt-bs\fR) diff --git a/src/options.go b/src/options.go index bec4d32e..45eca5ef 100644 --- a/src/options.go +++ b/src/options.go @@ -410,6 +410,14 @@ func parseKeyChords(str string, message string) map[int]string { chord = tui.AltSlash case "alt-bs", "alt-bspace": chord = tui.AltBS + case "alt-up": + chord = tui.AltUp + case "alt-down": + chord = tui.AltDown + case "alt-left": + chord = tui.AltLeft + case "alt-right": + chord = tui.AltRight case "tab": chord = tui.Tab case "btab", "shift-tab": diff --git a/src/tui/light.go b/src/tui/light.go index 9b1489fa..7b474181 100644 --- a/src/tui/light.go +++ b/src/tui/light.go @@ -360,6 +360,11 @@ func (r *LightRenderer) escSequence(sz *int) Event { if r.buffer[1] >= 1 && r.buffer[1] <= 'z'-'a'+1 { return Event{int(CtrlAltA + r.buffer[1] - 1), 0, nil} } + alt := false + if len(r.buffer) > 2 && r.buffer[1] == ESC { + r.buffer = r.buffer[1:] + alt = true + } switch r.buffer[1] { case 32: return Event{AltSpace, 0, nil} @@ -380,12 +385,25 @@ func (r *LightRenderer) escSequence(sz *int) Event { *sz = 3 switch r.buffer[2] { case 68: + if alt { + return Event{AltLeft, 0, nil} + } return Event{Left, 0, nil} case 67: + if alt { + // Ugh.. + return Event{AltRight, 0, nil} + } return Event{Right, 0, nil} case 66: + if alt { + return Event{AltDown, 0, nil} + } return Event{Down, 0, nil} case 65: + if alt { + return Event{AltUp, 0, nil} + } return Event{Up, 0, nil} case 90: return Event{BTab, 0, nil} diff --git a/src/tui/tcell.go b/src/tui/tcell.go index 8e5524ae..5f2b87fe 100644 --- a/src/tui/tcell.go +++ b/src/tui/tcell.go @@ -295,12 +295,24 @@ func (r *FullscreenRenderer) GetChar() Event { return Event{BSpace, 0, nil} case tcell.KeyUp: + if alt { + return Event{AltUp, 0, nil} + } return Event{Up, 0, nil} case tcell.KeyDown: + if alt { + return Event{AltDown, 0, nil} + } return Event{Down, 0, nil} case tcell.KeyLeft: + if alt { + return Event{AltLeft, 0, nil} + } return Event{Left, 0, nil} case tcell.KeyRight: + if alt { + return Event{AltRight, 0, nil} + } return Event{Right, 0, nil} case tcell.KeyHome: diff --git a/src/tui/tui.go b/src/tui/tui.go index e2f5ea58..f1fac5e3 100644 --- a/src/tui/tui.go +++ b/src/tui/tui.go @@ -85,6 +85,11 @@ const ( AltSlash AltBS + AltUp + AltDown + AltLeft + AltRight + Alt0 )