From aad5e497a47d34c507532fdd4a90288a33cc774f Mon Sep 17 00:00:00 2001 From: Massimo Mund Date: Thu, 12 Sep 2024 20:03:00 +0200 Subject: [PATCH] Added common CTRL+ALT, CTRL+SHIFT, CTRL+ALT+SHIFT key sequences --- man/man1/fzf.1 | 62 +++++++++++++++++++++++++- src/options.go | 58 ++++++++++++++++++++++++ src/tui/eventtype_string.go | 84 ++++++++++++++++++++++------------ src/tui/light.go | 75 +++++++++++++++++++++++++++++++ src/tui/light_test.go | 30 +++++++++++++ src/tui/tcell.go | 89 +++++++++++++++++++++++++++++++++++++ src/tui/tui.go | 31 +++++++++++++ 7 files changed, 399 insertions(+), 30 deletions(-) diff --git a/man/man1/fzf.1 b/man/man1/fzf.1 index f0f274c01e1..1550abc72fd 100644 --- a/man/man1/fzf.1 +++ b/man/man1/fzf.1 @@ -1231,6 +1231,8 @@ e.g. .br \fIalt\-end\fR .br +\fIalt\-backspace\fR (\fIalt\-bspace\fR \fIalt\-bs\fR) +.br \fIalt\-delete\fR .br \fIalt\-page\-up\fR @@ -1241,8 +1243,6 @@ e.g. .br \fIalt\-space\fR .br -\fIalt\-backspace\fR (\fIalt\-bspace\fR \fIalt\-bs\fR) -.br \fItab\fR .br \fIshift\-tab\fR (\fIbtab\fR) @@ -1281,6 +1281,8 @@ e.g. .br \fIctrl\-end\fR .br +\fIctrl\-backspace\fR (\fIctrl\-bspace\fR \fIctrl\-bs\fR) +.br \fIctrl\-delete\fR .br \fIctrl\-page\-up\fR @@ -1323,6 +1325,62 @@ e.g. .br \fIalt\-shift\-page\-down\fR .br +\fIctrl\-alt\-up\fR +.br +\fIctrl\-alt\-down\fR +.br +\fIctrl\-alt\-left\fR +.br +\fIctrl\-alt\-right\fR +.br +\fIctrl\-alt\-home\fR +.br +\fIctrl\-alt\-end\fR +.br +\fIctrl\-alt\-backspace\fR (\fIctrl\-alt\-bspace\fR \fIctrl\-alt\-bs\fR) +.br +\fIctrl\-alt\-delete\fR +.br +\fIctrl\-alt\-page\-up\fR +.br +\fIctrl\-alt\-page\-down\fR +.br +\fIctrl\-shift\-up\fR +.br +\fIctrl\-shift\-down\fR +.br +\fIctrl\-shift\-left\fR +.br +\fIctrl\-shift\-right\fR +.br +\fIctrl\-shift\-home\fR +.br +\fIctrl\-shift\-end\fR +.br +\fIctrl\-shift\-delete\fR +.br +\fIctrl\-shift\-page\-up\fR +.br +\fIctrl\-shift\-page\-down\fR +.br +\fIctrl\-alt\-shift\-up\fR +.br +\fIctrl\-alt\-shift\-down\fR +.br +\fIctrl\-alt\-shift\-left\fR +.br +\fIctrl\-alt\-shift\-right\fR +.br +\fIctrl\-alt\-shift\-home\fR +.br +\fIctrl\-alt\-shift\-end\fR +.br +\fIctrl\-alt\-shift\-delete\fR +.br +\fIctrl\-alt\-shift\-page\-up\fR +.br +\fIctrl\-alt\-shift\-page\-down\fR +.br \fIleft\-click\fR .br \fIright\-click\fR diff --git a/src/options.go b/src/options.go index d963a0988f1..1e217be6e24 100644 --- a/src/options.go +++ b/src/options.go @@ -845,6 +845,10 @@ func parseKeyChordsImpl(str string, message string) (map[tui.Event]string, error chords[tui.AltKey(' ')] = key case "alt-bs", "alt-bspace", "alt-backspace": add(tui.AltBackspace) + case "ctrl-bs", "ctrl-bspace", "ctrl-backspace": + add(tui.CtrlBackspace) + case "ctrl-alt-bs", "ctrl-alt-bspace", "ctrl-alt-backspace": + add(tui.CtrlAltBackspace) case "alt-up": add(tui.AltUp) case "alt-down": @@ -917,6 +921,60 @@ func parseKeyChordsImpl(str string, message string) (map[tui.Event]string, error add(tui.CtrlPageUp) case "ctrl-page-down": add(tui.CtrlPageDown) + case "ctrl-alt-up", "alt-ctrl-up": + add(tui.CtrlAltUp) + case "ctrl-alt-down", "alt-ctrl-down": + add(tui.CtrlAltDown) + case "ctrl-alt-right", "alt-ctrl-right": + add(tui.CtrlAltRight) + case "ctrl-alt-left", "alt-ctrl-left": + add(tui.CtrlAltLeft) + case "ctrl-alt-home", "alt-ctrl-home": + add(tui.CtrlAltHome) + case "ctrl-alt-end", "alt-ctrl-end": + add(tui.CtrlAltEnd) + case "ctrl-alt-delete", "alt-ctrl-delete": + add(tui.CtrlAltDelete) + case "ctrl-alt-page-up", "alt-ctrl-page-up": + add(tui.CtrlAltPageUp) + case "ctrl-alt-page-down", "alt-ctrl-page-down": + add(tui.CtrlAltPageDown) + case "ctrl-shift-up", "shift-ctrl-up": + add(tui.CtrlShiftUp) + case "ctrl-shift-down", "shift-ctrl-down": + add(tui.CtrlShiftDown) + case "ctrl-shift-right", "shift-ctrl-right": + add(tui.CtrlShiftRight) + case "ctrl-shift-left", "shift-ctrl-left": + add(tui.CtrlShiftLeft) + case "ctrl-shift-home", "shift-ctrl-home": + add(tui.CtrlShiftHome) + case "ctrl-shift-end", "shift-ctrl-end": + add(tui.CtrlShiftEnd) + case "ctrl-shift-delete", "shift-ctrl-delete": + add(tui.CtrlShiftDelete) + case "ctrl-shift-page-up", "shift-ctrl-page-up": + add(tui.CtrlShiftPageUp) + case "ctrl-shift-page-down", "shift-ctrl-page-down": + add(tui.CtrlShiftPageDown) + case "ctrl-alt-shift-up": + add(tui.CtrlAltShiftUp) + case "ctrl-alt-shift-down": + add(tui.CtrlAltShiftDown) + case "ctrl-alt-shift-right": + add(tui.CtrlAltShiftRight) + case "ctrl-alt-shift-left": + add(tui.CtrlAltShiftLeft) + case "ctrl-alt-shift-home": + add(tui.CtrlAltShiftHome) + case "ctrl-alt-shift-end": + add(tui.CtrlAltShiftEnd) + case "ctrl-alt-shift-delete": + add(tui.CtrlAltShiftDelete) + case "ctrl-alt-shift-page-up": + add(tui.CtrlAltShiftPageUp) + case "ctrl-alt-shift-page-down": + add(tui.CtrlAltShiftPageDown) case "shift-up": add(tui.ShiftUp) case "shift-down": diff --git a/src/tui/eventtype_string.go b/src/tui/eventtype_string.go index 0da293d017f..af235f480b8 100644 --- a/src/tui/eventtype_string.go +++ b/src/tui/eventtype_string.go @@ -105,37 +105,65 @@ func _() { _ = x[CtrlPageDown-94] _ = x[Alt-95] _ = x[CtrlAlt-96] - _ = x[Invalid-97] - _ = x[Fatal-98] - _ = x[Mouse-99] - _ = x[DoubleClick-100] - _ = x[LeftClick-101] - _ = x[RightClick-102] - _ = x[SLeftClick-103] - _ = x[SRightClick-104] - _ = x[ScrollUp-105] - _ = x[ScrollDown-106] - _ = x[SScrollUp-107] - _ = x[SScrollDown-108] - _ = x[PreviewScrollUp-109] - _ = x[PreviewScrollDown-110] - _ = x[Resize-111] - _ = x[Change-112] - _ = x[BackwardEOF-113] - _ = x[Start-114] - _ = x[Load-115] - _ = x[Focus-116] - _ = x[One-117] - _ = x[Zero-118] - _ = x[Result-119] - _ = x[Jump-120] - _ = x[JumpCancel-121] - _ = x[ClickHeader-122] + _ = x[CtrlAltUp-97] + _ = x[CtrlAltDown-98] + _ = x[CtrlAltLeft-99] + _ = x[CtrlAltRight-100] + _ = x[CtrlAltHome-101] + _ = x[CtrlAltEnd-102] + _ = x[CtrlAltBackspace-103] + _ = x[CtrlAltDelete-104] + _ = x[CtrlAltPageUp-105] + _ = x[CtrlAltPageDown-106] + _ = x[CtrlShiftUp-107] + _ = x[CtrlShiftDown-108] + _ = x[CtrlShiftLeft-109] + _ = x[CtrlShiftRight-110] + _ = x[CtrlShiftHome-111] + _ = x[CtrlShiftEnd-112] + _ = x[CtrlShiftDelete-113] + _ = x[CtrlShiftPageUp-114] + _ = x[CtrlShiftPageDown-115] + _ = x[CtrlAltShiftUp-116] + _ = x[CtrlAltShiftDown-117] + _ = x[CtrlAltShiftLeft-118] + _ = x[CtrlAltShiftRight-119] + _ = x[CtrlAltShiftHome-120] + _ = x[CtrlAltShiftEnd-121] + _ = x[CtrlAltShiftDelete-122] + _ = x[CtrlAltShiftPageUp-123] + _ = x[CtrlAltShiftPageDown-124] + _ = x[Invalid-125] + _ = x[Fatal-126] + _ = x[Mouse-127] + _ = x[DoubleClick-128] + _ = x[LeftClick-129] + _ = x[RightClick-130] + _ = x[SLeftClick-131] + _ = x[SRightClick-132] + _ = x[ScrollUp-133] + _ = x[ScrollDown-134] + _ = x[SScrollUp-135] + _ = x[SScrollDown-136] + _ = x[PreviewScrollUp-137] + _ = x[PreviewScrollDown-138] + _ = x[Resize-139] + _ = x[Change-140] + _ = x[BackwardEOF-141] + _ = x[Start-142] + _ = x[Load-143] + _ = x[Focus-144] + _ = x[One-145] + _ = x[Zero-146] + _ = x[Result-147] + _ = x[Jump-148] + _ = x[JumpCancel-149] + _ = x[ClickHeader-150] } -const _EventType_name = "RuneCtrlACtrlBCtrlCCtrlDCtrlECtrlFCtrlGCtrlHTabCtrlJCtrlKCtrlLCtrlMCtrlNCtrlOCtrlPCtrlQCtrlRCtrlSCtrlTCtrlUCtrlVCtrlWCtrlXCtrlYCtrlZEscCtrlSpaceCtrlBackSlashCtrlRightBracketCtrlCaretCtrlSlashShiftTabBackspaceDeletePageUpPageDownUpDownLeftRightHomeEndInsertShiftUpShiftDownShiftLeftShiftRightShiftDeleteShiftHomeShiftEndShiftPageUpShiftPageDownF1F2F3F4F5F6F7F8F9F10F11F12AltBackspaceAltUpAltDownAltLeftAltRightAltDeleteAltHomeAltEndAltPageUpAltPageDownAltShiftUpAltShiftDownAltShiftLeftAltShiftRightAltShiftDeleteAltShiftHomeAltShiftEndAltShiftPageUpAltShiftPageDownCtrlUpCtrlDownCtrlLeftCtrlRightCtrlHomeCtrlEndCtrlBackspaceCtrlDeleteCtrlPageUpCtrlPageDownAltCtrlAltInvalidFatalMouseDoubleClickLeftClickRightClickSLeftClickSRightClickScrollUpScrollDownSScrollUpSScrollDownPreviewScrollUpPreviewScrollDownResizeChangeBackwardEOFStartLoadFocusOneZeroResultJumpJumpCancelClickHeader" +const _EventType_name = "RuneCtrlACtrlBCtrlCCtrlDCtrlECtrlFCtrlGCtrlHTabCtrlJCtrlKCtrlLCtrlMCtrlNCtrlOCtrlPCtrlQCtrlRCtrlSCtrlTCtrlUCtrlVCtrlWCtrlXCtrlYCtrlZEscCtrlSpaceCtrlBackSlashCtrlRightBracketCtrlCaretCtrlSlashShiftTabBackspaceDeletePageUpPageDownUpDownLeftRightHomeEndInsertShiftUpShiftDownShiftLeftShiftRightShiftDeleteShiftHomeShiftEndShiftPageUpShiftPageDownF1F2F3F4F5F6F7F8F9F10F11F12AltBackspaceAltUpAltDownAltLeftAltRightAltDeleteAltHomeAltEndAltPageUpAltPageDownAltShiftUpAltShiftDownAltShiftLeftAltShiftRightAltShiftDeleteAltShiftHomeAltShiftEndAltShiftPageUpAltShiftPageDownCtrlUpCtrlDownCtrlLeftCtrlRightCtrlHomeCtrlEndCtrlBackspaceCtrlDeleteCtrlPageUpCtrlPageDownAltCtrlAltCtrlAltUpCtrlAltDownCtrlAltLeftCtrlAltRightCtrlAltHomeCtrlAltEndCtrlAltBackspaceCtrlAltDeleteCtrlAltPageUpCtrlAltPageDownCtrlShiftUpCtrlShiftDownCtrlShiftLeftCtrlShiftRightCtrlShiftHomeCtrlShiftEndCtrlShiftDeleteCtrlShiftPageUpCtrlShiftPageDownCtrlAltShiftUpCtrlAltShiftDownCtrlAltShiftLeftCtrlAltShiftRightCtrlAltShiftHomeCtrlAltShiftEndCtrlAltShiftDeleteCtrlAltShiftPageUpCtrlAltShiftPageDownInvalidFatalMouseDoubleClickLeftClickRightClickSLeftClickSRightClickScrollUpScrollDownSScrollUpSScrollDownPreviewScrollUpPreviewScrollDownResizeChangeBackwardEOFStartLoadFocusOneZeroResultJumpJumpCancelClickHeader" -var _EventType_index = [...]uint16{0, 4, 9, 14, 19, 24, 29, 34, 39, 44, 47, 52, 57, 62, 67, 72, 77, 82, 87, 92, 97, 102, 107, 112, 117, 122, 127, 132, 135, 144, 157, 173, 182, 191, 199, 208, 214, 220, 228, 230, 234, 238, 243, 247, 250, 256, 263, 272, 281, 291, 302, 311, 319, 330, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 364, 367, 370, 382, 387, 394, 401, 409, 418, 425, 431, 440, 451, 461, 473, 485, 498, 512, 524, 535, 549, 565, 571, 579, 587, 596, 604, 611, 624, 634, 644, 656, 659, 666, 673, 678, 683, 694, 703, 713, 723, 734, 742, 752, 761, 772, 787, 804, 810, 816, 827, 832, 836, 841, 844, 848, 854, 858, 868, 879} +var _EventType_index = [...]uint16{0, 4, 9, 14, 19, 24, 29, 34, 39, 44, 47, 52, 57, 62, 67, 72, 77, 82, 87, 92, 97, 102, 107, 112, 117, 122, 127, 132, 135, 144, 157, 173, 182, 191, 199, 208, 214, 220, 228, 230, 234, 238, 243, 247, 250, 256, 263, 272, 281, 291, 302, 311, 319, 330, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 364, 367, 370, 382, 387, 394, 401, 409, 418, 425, 431, 440, 451, 461, 473, 485, 498, 512, 524, 535, 549, 565, 571, 579, 587, 596, 604, 611, 624, 634, 644, 656, 659, 666, 675, 686, 697, 709, 720, 730, 746, 759, 772, 787, 798, 811, 824, 838, 851, 863, 878, 893, 910, 924, 940, 956, 973, 989, 1004, 1022, 1040, 1060, 1067, 1072, 1077, 1088, 1097, 1107, 1117, 1128, 1136, 1146, 1155, 1166, 1181, 1198, 1204, 1210, 1221, 1226, 1230, 1235, 1238, 1242, 1248, 1252, 1262, 1273} func (i EventType) String() string { if i < 0 || i >= EventType(len(_EventType_index)-1) { diff --git a/src/tui/light.go b/src/tui/light.go index 9b2081d98cb..d01d788d746 100644 --- a/src/tui/light.go +++ b/src/tui/light.go @@ -468,6 +468,12 @@ func (r *LightRenderer) escSequence(sz *int) Event { return Event{AltShiftDelete, 0, nil} case '5': return Event{CtrlDelete, 0, nil} + case '6': + return Event{CtrlShiftDelete, 0, nil} + case '7': + return Event{CtrlAltDelete, 0, nil} + case '8': + return Event{CtrlAltShiftDelete, 0, nil} } } return Event{Invalid, 0, nil} @@ -491,6 +497,12 @@ func (r *LightRenderer) escSequence(sz *int) Event { return Event{AltShiftPageUp, 0, nil} case '5': return Event{CtrlPageUp, 0, nil} + case '6': + return Event{CtrlShiftPageUp, 0, nil} + case '7': + return Event{CtrlAltPageUp, 0, nil} + case '8': + return Event{CtrlAltShiftPageUp, 0, nil} } } return Event{Invalid, 0, nil} @@ -512,6 +524,12 @@ func (r *LightRenderer) escSequence(sz *int) Event { return Event{AltShiftPageDown, 0, nil} case '5': return Event{CtrlPageDown, 0, nil} + case '6': + return Event{CtrlShiftPageDown, 0, nil} + case '7': + return Event{CtrlAltPageDown, 0, nil} + case '8': + return Event{CtrlAltShiftPageDown, 0, nil} } } return Event{Invalid, 0, nil} @@ -572,9 +590,21 @@ func (r *LightRenderer) escSequence(sz *int) Event { *sz = 7 char = r.buffer[6] } + ctrlShift := ctrl && shift + ctrlAlt := ctrl && alt altShift := alt && shift + ctrlAltShift := ctrl && alt && shift switch char { case 'A': + if ctrlAltShift { + return Event{CtrlAltShiftUp, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltUp, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftUp, 0, nil} + } if altShift { return Event{AltShiftUp, 0, nil} } @@ -588,6 +618,15 @@ func (r *LightRenderer) escSequence(sz *int) Event { return Event{ShiftUp, 0, nil} } case 'B': + if ctrlAltShift { + return Event{CtrlAltShiftDown, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltDown, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftDown, 0, nil} + } if altShift { return Event{AltShiftDown, 0, nil} } @@ -601,6 +640,15 @@ func (r *LightRenderer) escSequence(sz *int) Event { return Event{ShiftDown, 0, nil} } case 'C': + if ctrlAltShift { + return Event{CtrlAltShiftRight, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltRight, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftRight, 0, nil} + } if altShift { return Event{AltShiftRight, 0, nil} } @@ -614,6 +662,15 @@ func (r *LightRenderer) escSequence(sz *int) Event { return Event{AltRight, 0, nil} } case 'D': + if ctrlAltShift { + return Event{CtrlAltShiftLeft, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltLeft, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftLeft, 0, nil} + } if altShift { return Event{AltShiftLeft, 0, nil} } @@ -627,6 +684,15 @@ func (r *LightRenderer) escSequence(sz *int) Event { return Event{ShiftLeft, 0, nil} } case 'H': + if ctrlAltShift { + return Event{CtrlAltShiftHome, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltHome, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftHome, 0, nil} + } if altShift { return Event{AltShiftHome, 0, nil} } @@ -640,6 +706,15 @@ func (r *LightRenderer) escSequence(sz *int) Event { return Event{ShiftHome, 0, nil} } case 'F': + if ctrlAltShift { + return Event{CtrlAltShiftEnd, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltEnd, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftEnd, 0, nil} + } if altShift { return Event{AltShiftEnd, 0, nil} } diff --git a/src/tui/light_test.go b/src/tui/light_test.go index 276f3b403af..95ccb3ea231 100644 --- a/src/tui/light_test.go +++ b/src/tui/light_test.go @@ -205,6 +205,36 @@ func TestLightRenderer(t *testing.T) { assertEscSequence("\x1b[5;5~", "ctrl-page-up") assertEscSequence("\x1b[6;5~", "ctrl-page-down") + assertEscSequence("\x1b[1;7A", "ctrl-alt-up") + assertEscSequence("\x1b[1;7B", "ctrl-alt-down") + assertEscSequence("\x1b[1;7C", "ctrl-alt-right") + assertEscSequence("\x1b[1;7D", "ctrl-alt-left") + assertEscSequence("\x1b[1;7H", "ctrl-alt-home") + assertEscSequence("\x1b[1;7F", "ctrl-alt-end") + assertEscSequence("\x1b[3;7~", "ctrl-alt-delete") + assertEscSequence("\x1b[5;7~", "ctrl-alt-page-up") + assertEscSequence("\x1b[6;7~", "ctrl-alt-page-down") + + assertEscSequence("\x1b[1;6A", "ctrl-shift-up") + assertEscSequence("\x1b[1;6B", "ctrl-shift-down") + assertEscSequence("\x1b[1;6C", "ctrl-shift-right") + assertEscSequence("\x1b[1;6D", "ctrl-shift-left") + assertEscSequence("\x1b[1;6H", "ctrl-shift-home") + assertEscSequence("\x1b[1;6F", "ctrl-shift-end") + assertEscSequence("\x1b[3;6~", "ctrl-shift-delete") + assertEscSequence("\x1b[5;6~", "ctrl-shift-page-up") + assertEscSequence("\x1b[6;6~", "ctrl-shift-page-down") + + assertEscSequence("\x1b[1;8A", "ctrl-alt-shift-up") + assertEscSequence("\x1b[1;8B", "ctrl-alt-shift-down") + assertEscSequence("\x1b[1;8C", "ctrl-alt-shift-right") + assertEscSequence("\x1b[1;8D", "ctrl-alt-shift-left") + assertEscSequence("\x1b[1;8H", "ctrl-alt-shift-home") + assertEscSequence("\x1b[1;8F", "ctrl-alt-shift-end") + assertEscSequence("\x1b[3;8~", "ctrl-alt-shift-delete") + assertEscSequence("\x1b[5;8~", "ctrl-alt-shift-page-up") + assertEscSequence("\x1b[6;8~", "ctrl-alt-shift-page-down") + // mac assertEscSequence("\x1b[1;10A", "alt-shift-up") assertEscSequence("\x1b[1;10B", "alt-shift-down") diff --git a/src/tui/tcell.go b/src/tui/tcell.go index 18abfd6bd3c..4266e9434fd 100644 --- a/src/tui/tcell.go +++ b/src/tui/tcell.go @@ -300,6 +300,8 @@ func (r *FullscreenRenderer) GetChar() Event { shift := (mods & tcell.ModShift) > 0 ctrlAlt := ctrl && alt altShift := alt && shift + ctrlShift := ctrl && shift + ctrlAltShift := ctrl && alt && shift keyfn := func(r rune) Event { if alt { @@ -388,6 +390,12 @@ func (r *FullscreenRenderer) GetChar() Event { return Event{CtrlSlash, 0, nil} // section 3: (Alt)+Backspace2 case tcell.KeyBackspace2: + if ctrlAlt { + return Event{CtrlAltBackspace, 0, nil} + } + if ctrl { + return Event{CtrlBackspace, 0, nil} + } if alt { return Event{AltBackspace, 0, nil} } @@ -395,6 +403,15 @@ func (r *FullscreenRenderer) GetChar() Event { // section 4: (Alt+Shift)+Key(Up|Down|Left|Right) case tcell.KeyUp: + if ctrlAltShift { + return Event{CtrlAltShiftUp, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltUp, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftUp, 0, nil} + } if altShift { return Event{AltShiftUp, 0, nil} } @@ -409,6 +426,15 @@ func (r *FullscreenRenderer) GetChar() Event { } return Event{Up, 0, nil} case tcell.KeyDown: + if ctrlAltShift { + return Event{CtrlAltShiftDown, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltDown, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftDown, 0, nil} + } if altShift { return Event{AltShiftDown, 0, nil} } @@ -423,6 +449,15 @@ func (r *FullscreenRenderer) GetChar() Event { } return Event{Down, 0, nil} case tcell.KeyLeft: + if ctrlAltShift { + return Event{CtrlAltShiftLeft, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltLeft, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftLeft, 0, nil} + } if altShift { return Event{AltShiftLeft, 0, nil} } @@ -437,6 +472,15 @@ func (r *FullscreenRenderer) GetChar() Event { } return Event{Left, 0, nil} case tcell.KeyRight: + if ctrlAltShift { + return Event{CtrlAltShiftRight, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltRight, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftRight, 0, nil} + } if altShift { return Event{AltShiftRight, 0, nil} } @@ -455,6 +499,15 @@ func (r *FullscreenRenderer) GetChar() Event { case tcell.KeyInsert: return Event{Insert, 0, nil} case tcell.KeyHome: + if ctrlAltShift { + return Event{CtrlAltShiftHome, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltHome, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftHome, 0, nil} + } if altShift { return Event{AltShiftHome, 0, nil} } @@ -469,6 +522,15 @@ func (r *FullscreenRenderer) GetChar() Event { } return Event{Home, 0, nil} case tcell.KeyDelete: + if ctrlAltShift { + return Event{CtrlAltShiftDelete, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltDelete, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftDelete, 0, nil} + } if altShift { return Event{AltShiftDelete, 0, nil} } @@ -483,6 +545,15 @@ func (r *FullscreenRenderer) GetChar() Event { } return Event{Delete, 0, nil} case tcell.KeyEnd: + if ctrlAltShift { + return Event{CtrlAltShiftEnd, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltEnd, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftEnd, 0, nil} + } if altShift { return Event{AltShiftEnd, 0, nil} } @@ -497,6 +568,15 @@ func (r *FullscreenRenderer) GetChar() Event { } return Event{End, 0, nil} case tcell.KeyPgUp: + if ctrlAltShift { + return Event{CtrlAltShiftPageUp, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltPageUp, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftPageUp, 0, nil} + } if altShift { return Event{AltShiftPageUp, 0, nil} } @@ -511,6 +591,15 @@ func (r *FullscreenRenderer) GetChar() Event { } return Event{PageUp, 0, nil} case tcell.KeyPgDn: + if ctrlAltShift { + return Event{CtrlAltShiftPageDown, 0, nil} + } + if ctrlAlt { + return Event{CtrlAltPageDown, 0, nil} + } + if ctrlShift { + return Event{CtrlShiftPageDown, 0, nil} + } if altShift { return Event{AltShiftPageDown, 0, nil} } diff --git a/src/tui/tui.go b/src/tui/tui.go index d3f0cb5c0e3..faa00d8ca46 100644 --- a/src/tui/tui.go +++ b/src/tui/tui.go @@ -125,6 +125,37 @@ const ( Alt CtrlAlt + CtrlAltUp + CtrlAltDown + CtrlAltLeft + CtrlAltRight + CtrlAltHome + CtrlAltEnd + CtrlAltBackspace + CtrlAltDelete + CtrlAltPageUp + CtrlAltPageDown + + CtrlShiftUp + CtrlShiftDown + CtrlShiftLeft + CtrlShiftRight + CtrlShiftHome + CtrlShiftEnd + CtrlShiftDelete + CtrlShiftPageUp + CtrlShiftPageDown + + CtrlAltShiftUp + CtrlAltShiftDown + CtrlAltShiftLeft + CtrlAltShiftRight + CtrlAltShiftHome + CtrlAltShiftEnd + CtrlAltShiftDelete + CtrlAltShiftPageUp + CtrlAltShiftPageDown + Invalid Fatal