From 645b924b0ced476b74672d768a4a683c406e93d0 Mon Sep 17 00:00:00 2001 From: marco Date: Sat, 22 Dec 2018 14:56:20 +0000 Subject: [PATCH] * ctrl-shift-arrow key definitions for xterm, xfce git-svn-id: trunk@40611 - --- packages/rtl-console/src/unix/keyboard.pp | 40 ++++++++++++++++++----- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/packages/rtl-console/src/unix/keyboard.pp b/packages/rtl-console/src/unix/keyboard.pp index 111f5a604a..625b35b6cf 100644 --- a/packages/rtl-console/src/unix/keyboard.pp +++ b/packages/rtl-console/src/unix/keyboard.pp @@ -96,6 +96,12 @@ const KbShiftUp = $f0; KbShiftDown = $f3; KbShiftHome = $f4; KbShiftEnd = $f5; + KbCtrlShiftUp = $f6; + KbCtrlShiftDown = $f7; + KbCtrlShiftRight = $f8; + KbCtrlShiftLeft = $f9; + KbCtrlShiftHome = $fa; + KbCtrlShiftEnd = $fb; double_esc_hack_enabled : boolean = false; @@ -494,7 +500,7 @@ const MouseEvent.buttons := 0; PutMouseEvent(MouseEvent); end; - + procedure GenMouseEvent; var MouseEvent: TMouseEvent; ch : char; @@ -869,7 +875,7 @@ type key_sequence=packed record st:string[7]; end; -const key_sequences:array[0..289] of key_sequence=( +const key_sequences:array[0..297] of key_sequence=( (char:0;scan:kbAltA;st:#27'A'), (char:0;scan:kbAltA;st:#27'a'), (char:0;scan:kbAltB;st:#27'B'), @@ -1136,6 +1142,15 @@ const key_sequences:array[0..289] of key_sequence=( (char:0;scan:kbShiftHome;st:#27'[1;2H'), {xterm} (char:0;scan:kbShiftHome;st:#27'[7$'), {rxvt} + (char:0;scan:KbCtrlShiftUp;st:#27'[1;6A'), {xterm} + (char:0;scan:KbCtrlShiftDown;st:#27'[1;6B'), {xterm} + (char:0;scan:KbCtrlShiftRight;st:#27'[1;6C'), {xterm, xfce4} + (char:0;scan:KbCtrlShiftLeft;st:#27'[1;6D'), {xterm, xfce4} + (char:0;scan:KbCtrlShiftHome;st:#27'[1;6H'), {xterm} + (char:0;scan:KbCtrlShiftEnd;st:#27'[1;6F'), {xterm} + + (char:0;scan:kbCtrlPgDn;st:#27'[6;5~'), {xterm} + (char:0;scan:kbCtrlPgUp;st:#27'[5;5~'), {xterm} (char:0;scan:kbCtrlUp;st:#27'[1;5A'), {xterm} (char:0;scan:kbCtrlDown;st:#27'[1;5B'), {xterm} (char:0;scan:kbCtrlRight;st:#27'[1;5C'), {xterm} @@ -1304,7 +1319,7 @@ begin {This is the same hack as in findsequence; see findsequence for explanation.} ch:=ttyrecvchar; - {Alt+O cannot be used in this situation, it can be a function key.} + {Alt+O cannot be used in this situation, it can be a function key.} if not(ch in ['a'..'z','A'..'N','P'..'Z','0'..'9','-','+','_','=']) then begin if intail=0 then @@ -1361,11 +1376,11 @@ begin end else RestoreArray; - end + end; {$ifdef logging} writeln(f); {$endif logging} - ; + ReadKey:=PopKey; End; @@ -1541,6 +1556,8 @@ const kbAltDown,kbAltPgDn,kbAltIns,kbAltDel); ShiftArrow : array [kbShiftUp..kbShiftEnd] of byte = (kbUp,kbLeft,kbRight,kbDown,kbHome,kbEnd); + CtrlShiftArrow : array [kbCtrlShiftUp..kbCtrlShiftEnd] of byte = + (kbCtrlUp,kbCtrlDown,kbCtrlRight,kbCtrlLeft,kbCtrlHome,kbCtrlEnd); var MyScan:byte; @@ -1601,10 +1618,17 @@ begin {main} kbF11..KbF12 : { sF11-sF12 } MyScan:=MyScan+kbShiftF11-kbF11; end; - if myscan in [kbShiftUp..kbShiftEnd] then + if myscan in [kbShiftUp..kbCtrlShiftEnd] then begin - myscan:=ShiftArrow[myscan]; - sstate:=sstate or kbshift; + if myscan <= kbShiftEnd then + begin + myscan:=ShiftArrow[myscan]; + sstate:=sstate or kbshift; + end else + begin + myscan:=CtrlShiftArrow[myscan]; + sstate:=sstate or kbshift or kbCtrl; + end; end; if myscan=kbAltBack then sstate:=sstate or kbalt;