1) current ide (of fpc 3.3.1) has problems with second compilations. Resolve issue with this patch tdef_nil_for_ide_fpc331.patch
2) add missing xterm escape string sequences keyboard_add_escape_keys_unix_fpc331.patch
3) fpc 3.2.3 add missing xterm escape string sequences keyboard_add_escape_keys_unix_fixes32.patch
Also make sure shift state of escaped keys is transferred to TKeyEvent.
4) kb_scancode_updates.patch safe to apply after keyboard_add_escape_keys_unix_xxx.patch
Some scancode have been bogus for a good reason. I suggest to fix some of them, and be more consistent among all platforms.
Patched file keyscan.inc is in active use only by unix/keyboard.pp
Drivers unit in FV, have internal fix ups, it's fine to make those changes.
5) make Ctrl+Enter shortcut key possible in unix/linux xterm: ctrl_enter_xterm_unix_keyboard.diff
patch is as good for fpc 3.3.1 as for fixes 3.2
Apply patch and make entry in xterm configuration file .Xresources
xterm*VT100.Translations: #override \
Ctrl <KeyPress> Return: string(0x0a)
diff -ru a/packages/rtl-console/src/inc/keyscan.inc b/packages/rtl-console/src/inc/keyscan.inc --- a/packages/rtl-console/src/inc/keyscan.inc 2024-05-09 00:13:05.000000000 +0000 +++ b/packages/rtl-console/src/inc/keyscan.inc 2024-05-28 07:03:45.682436000 +0000 @@ -4,12 +4,8 @@ kbAltEsc = $01; {Alt+Esc = scancode 01, ascii code 0.} kbEsc = $01; {Esc = scancode 01, ascii code 27.} kbAltSpace = $02; - kbCtrlIns = $04; - kbShiftIns = $05; - kbCtrlDel = $06; - kbShiftDel = $07; - kbAltBack = $08; kbAltShiftBack= $09; + kbAltBack = $0E; kbShiftTab = $0F; kbAltQ = $10; kbAltW = $11; @@ -68,7 +64,9 @@ kbDown = $50; kbPgDn = $51; kbIns = $52; + kbShiftIns = $52; { Differs from kbIns only by shift state } kbDel = $53; + kbShiftDel = $53; { Differs from kbDel only by shift state } kbShiftF1 = $54; kbShiftF2 = $55; kbShiftF3 = $56; @@ -131,6 +129,8 @@ kbCtrlCenter = $8F; kbCtrlGreyPlus= $90; kbCtrlDown = $91; + kbCtrlIns = $92; + kbCtrlDel = $93; kbCtrlTab = $94; kbAltHome = $97; kbAltUp = $98;
diff -ru a/packages/rtl-console/src/unix/keyboard.pp b/packages/rtl-console/src/unix/keyboard.pp --- a/packages/rtl-console/src/unix/keyboard.pp 2023-01-19 15:42:50.438798000 +0000 +++ b/packages/rtl-console/src/unix/keyboard.pp 2024-05-27 23:54:54.113784131 +0000 @@ -39,6 +39,7 @@ char : byte; ScanValue : byte; CharValue : byte; + ShiftValue : byte; SpecialHandler : Tprocedure; end; @@ -76,7 +77,7 @@ const KeyBufferSize = 20; var - KeyBuffer : Array[0..KeyBufferSize-1] of Char; + KeyBuffer : Array[0..KeyBufferSize-1] of record ch: Char; sh :byte end; KeyPut, KeySend : longint; @@ -92,18 +93,18 @@ {$i keyscan.inc} {Some internal only scancodes} -const KbShiftUp = $f0; - KbShiftLeft = $f1; - KbShiftRight = $f2; - KbShiftDown = $f3; - KbShiftHome = $f4; - KbShiftEnd = $f5; - KbCtrlShiftUp = $f6; - KbCtrlShiftDown = $f7; - KbCtrlShiftRight = $f8; - KbCtrlShiftLeft = $f9; - KbCtrlShiftHome = $fa; - KbCtrlShiftEnd = $fb; +const kbAltCenter = kbCenter; + kbShiftCenter = kbCenter; + + KbShiftUp = KbUp; + KbShiftLeft = KbLeft; + KbShiftRight = KbRight; + KbShiftDown = KbDown; + KbShiftHome = KbHome; + KbShiftEnd = kbEnd; + kbShiftPgUp = kbPgUp; + kbShiftPgDn = kbPgDn; + double_esc_hack_enabled : boolean = false; @@ -412,7 +413,7 @@ InTail:=0; end; -procedure PushKey(Ch:char); +procedure PushKey(Ch:char;aShift:byte); var Tmp : Longint; begin @@ -421,17 +422,22 @@ If KeyPut>=KeyBufferSize Then KeyPut:=0; If KeyPut<>KeySend Then - KeyBuffer[Tmp]:=Ch + begin + KeyBuffer[Tmp].ch:=Ch; + KeyBuffer[Tmp].sh:=aShift; + end Else KeyPut:=Tmp; End; -function PopKey:char; +function PopKey(var aShift:byte):char; begin + aShift:=0; If KeyPut<>KeySend Then begin - PopKey:=KeyBuffer[KeySend]; + PopKey:=KeyBuffer[KeySend].ch; + aShift:=KeyBuffer[KeySend].sh; Inc(KeySend); If KeySend>=KeyBufferSize Then KeySend:=0; @@ -441,10 +447,10 @@ End; -procedure PushExt(b:byte); +procedure PushExt(b:byte;sh:byte); begin - PushKey(#0); - PushKey(chr(b)); + PushKey(#0,sh); + PushKey(chr(b),0); end; @@ -742,7 +748,7 @@ Pa^.Child:=newPtree; end; -function DoAddSequence(const St : String; AChar,AScan :byte) : PTreeElement; +function DoAddSequence(const St : String; AChar,AScan, AShift :byte) : PTreeElement; var CurPTree,NPT : PTreeElement; c : byte; @@ -803,9 +809,12 @@ Writeln(system.stderr,'Scan was ',ScanValue,' now ',AScan); if (CharValue<>AChar) then Writeln(system.stderr,'Char was ',chr(CharValue),' now ',chr(AChar)); + if (ShiftValue<>AShift) then + Writeln(system.stderr,'Char was ',chr(ShiftValue),' now ',chr(AShift)); {$endif DEBUG} ScanValue:=AScan; CharValue:=AChar; + ShiftValue:=AShift; end; end else with CurPTree^ do @@ -813,6 +822,7 @@ CanBeTerminal:=True; ScanValue:=AScan; CharValue:=AChar; + ShiftValue:=AShift; end; DoAddSequence:=CurPTree; end; @@ -820,7 +830,7 @@ procedure AddSequence(const St : String; AChar,AScan :byte);inline; begin - DoAddSequence(St,AChar,AScan); + DoAddSequence(St,AChar,AScan,0); end; { Returns the Child that as c as char if it exists } @@ -841,7 +851,7 @@ var NPT : PTreeElement; begin - NPT:=DoAddSequence(St,0,0); + NPT:=DoAddSequence(St,0,0,0); NPT^.SpecialHandler:=Proc; AddSpecialSequence:=NPT; end; @@ -884,330 +894,442 @@ type key_sequence=packed record char,scan:byte; + shift:byte; st:string[7]; end; -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'), - (char:0;scan:kbAltB;st:#27'b'), - (char:0;scan:kbAltC;st:#27'C'), - (char:0;scan:kbAltC;st:#27'c'), - (char:0;scan:kbAltD;st:#27'D'), - (char:0;scan:kbAltD;st:#27'd'), - (char:0;scan:kbAltE;st:#27'E'), - (char:0;scan:kbAltE;st:#27'e'), - (char:0;scan:kbAltF;st:#27'F'), - (char:0;scan:kbAltF;st:#27'f'), - (char:0;scan:kbAltG;st:#27'G'), - (char:0;scan:kbAltG;st:#27'g'), - (char:0;scan:kbAltH;st:#27'H'), - (char:0;scan:kbAltH;st:#27'h'), - (char:0;scan:kbAltI;st:#27'I'), - (char:0;scan:kbAltI;st:#27'i'), - (char:0;scan:kbAltJ;st:#27'J'), - (char:0;scan:kbAltJ;st:#27'j'), - (char:0;scan:kbAltK;st:#27'K'), - (char:0;scan:kbAltK;st:#27'k'), - (char:0;scan:kbAltL;st:#27'L'), - (char:0;scan:kbAltL;st:#27'l'), - (char:0;scan:kbAltM;st:#27'M'), - (char:0;scan:kbAltM;st:#27'm'), - (char:0;scan:kbAltN;st:#27'N'), - (char:0;scan:kbAltN;st:#27'n'), - (char:0;scan:kbAltO;st:#27'O'), - (char:0;scan:kbAltO;st:#27'o'), - (char:0;scan:kbAltP;st:#27'P'), - (char:0;scan:kbAltP;st:#27'p'), - (char:0;scan:kbAltQ;st:#27'Q'), - (char:0;scan:kbAltQ;st:#27'q'), - (char:0;scan:kbAltR;st:#27'R'), - (char:0;scan:kbAltR;st:#27'r'), - (char:0;scan:kbAltS;st:#27'S'), - (char:0;scan:kbAltS;st:#27's'), - (char:0;scan:kbAltT;st:#27'T'), - (char:0;scan:kbAltT;st:#27't'), - (char:0;scan:kbAltU;st:#27'U'), - (char:0;scan:kbAltU;st:#27'u'), - (char:0;scan:kbAltV;st:#27'V'), - (char:0;scan:kbAltV;st:#27'v'), - (char:0;scan:kbAltW;st:#27'W'), - (char:0;scan:kbAltW;st:#27'w'), - (char:0;scan:kbAltX;st:#27'X'), - (char:0;scan:kbAltX;st:#27'x'), - (char:0;scan:kbAltY;st:#27'Y'), - (char:0;scan:kbAltY;st:#27'y'), - (char:0;scan:kbAltZ;st:#27'Z'), - (char:0;scan:kbAltZ;st:#27'z'), - (char:0;scan:kbAltMinus;st:#27'-'), - (char:0;scan:kbAltEqual;st:#27'='), - (char:0;scan:kbAlt0;st:#27'0'), - (char:0;scan:kbAlt1;st:#27'1'), - (char:0;scan:kbAlt2;st:#27'2'), - (char:0;scan:kbAlt3;st:#27'3'), - (char:0;scan:kbAlt4;st:#27'4'), - (char:0;scan:kbAlt5;st:#27'5'), - (char:0;scan:kbAlt6;st:#27'6'), - (char:0;scan:kbAlt7;st:#27'7'), - (char:0;scan:kbAlt8;st:#27'8'), - (char:0;scan:kbAlt9;st:#27'9'), - - (char:0;scan:kbF1;st:#27'[[A'), {linux,konsole,xterm} - (char:0;scan:kbF2;st:#27'[[B'), {linux,konsole,xterm} - (char:0;scan:kbF3;st:#27'[[C'), {linux,konsole,xterm} - (char:0;scan:kbF4;st:#27'[[D'), {linux,konsole,xterm} - (char:0;scan:kbF5;st:#27'[[E'), {linux,konsole} - (char:0;scan:kbF1;st:#27'[11~'), {Eterm,rxvt} - (char:0;scan:kbF2;st:#27'[12~'), {Eterm,rxvt} - (char:0;scan:kbF3;st:#27'[13~'), {Eterm,rxvt} - (char:0;scan:kbF4;st:#27'[14~'), {Eterm,rxvt} - (char:0;scan:kbF5;st:#27'[15~'), {xterm,Eterm,gnome,rxvt} - (char:0;scan:kbF6;st:#27'[17~'), {linux,xterm,Eterm,konsole,gnome,rxvt} - (char:0;scan:kbF7;st:#27'[18~'), {linux,xterm,Eterm,konsole,gnome,rxvt} - (char:0;scan:kbF8;st:#27'[19~'), {linux,xterm,Eterm,konsole,gnome,rxvt} - (char:0;scan:kbF9;st:#27'[20~'), {linux,xterm,Eterm,konsole,gnome,rxvt} - (char:0;scan:kbF10;st:#27'[21~'), {linux,xterm,Eterm,konsole,gnome,rxvt} - (char:0;scan:kbF11;st:#27'[23~'), {linux,xterm,Eterm,konsole,gnome,rxvt} - (char:0;scan:kbF12;st:#27'[24~'), {linux,xterm,Eterm,konsole,gnome,rxvt} - (char:0;scan:kbF1;st:#27'[M'), {FreeBSD} - (char:0;scan:kbF2;st:#27'[N'), {FreeBSD} - (char:0;scan:kbF3;st:#27'[O'), {FreeBSD} - (char:0;scan:kbF4;st:#27'[P'), {FreeBSD} - (char:0;scan:kbF5;st:#27'[Q'), {FreeBSD} - (char:0;scan:kbF6;st:#27'[R'), {FreeBSD} - (char:0;scan:kbF7;st:#27'[S'), {FreeBSD} - (char:0;scan:kbF8;st:#27'[T'), {FreeBSD} - (char:0;scan:kbF9;st:#27'[U'), {FreeBSD} - (char:0;scan:kbF10;st:#27'[V'), {FreeBSD} - (char:0;scan:kbF11;st:#27'[W'), {FreeBSD} - (char:0;scan:kbF12;st:#27'[X'), {FreeBSD} - (char:0;scan:kbF1;st:#27'OP'), {vt100,gnome,konsole} - (char:0;scan:kbF2;st:#27'OQ'), {vt100,gnome,konsole} - (char:0;scan:kbF3;st:#27'OR'), {vt100,gnome,konsole} - (char:0;scan:kbF4;st:#27'OS'), {vt100,gnome,konsole} - (char:0;scan:kbF5;st:#27'Ot'), {vt100} - (char:0;scan:kbF6;st:#27'Ou'), {vt100} - (char:0;scan:kbF7;st:#27'Ov'), {vt100} - (char:0;scan:kbF8;st:#27'Ol'), {vt100} - (char:0;scan:kbF9;st:#27'Ow'), {vt100} - (char:0;scan:kbF10;st:#27'Ox'), {vt100} - (char:0;scan:kbF11;st:#27'Oy'), {vt100} - (char:0;scan:kbF12;st:#27'Oz'), {vt100} - (char:0;scan:kbEsc;st:#27'[0~'), {if linux keyboard patched, escape - returns this} - (char:0;scan:kbIns;st:#27'[2~'), {linux,Eterm,rxvt} - (char:0;scan:kbDel;st:#27'[3~'), {linux,Eterm,rxvt} - (char:0;scan:kbHome;st:#27'[1~'), {linux} - (char:0;scan:kbHome;st:#27'[7~'), {Eterm,rxvt} - (char:0;scan:kbHome;st:#27'[H'), {FreeBSD} - (char:0;scan:kbHome;st:#27'OH'), {some xterm configurations} - (char:0;scan:kbEnd;st:#27'[4~'), {linux,Eterm} - (char:0;scan:kbEnd;st:#27'[8~'), {rxvt} - (char:0;scan:kbEnd;st:#27'[F'), {FreeBSD} - (char:0;scan:kbEnd;st:#27'OF'), {some xterm configurations} - (char:0;scan:kbPgUp;st:#27'[5~'), {linux,Eterm,rxvt} - (char:0;scan:kbPgUp;st:#27'[I'), {FreeBSD} - (char:0;scan:kbPgDn;st:#27'[6~'), {linux,Eterm,rxvt} - (char:0;scan:kbPgDn;st:#27'[G'), {FreeBSD} - (char:0;scan:kbUp;st:#27'[A'), {linux,FreeBSD,rxvt} - (char:0;scan:kbDown;st:#27'[B'), {linux,FreeBSD,rxvt} - (char:0;scan:kbRight;st:#27'[C'), {linux,FreeBSD,rxvt} - (char:0;scan:kbLeft;st:#27'[D'), {linux,FreeBSD,rxvt} - (char:0;scan:kbUp;st:#27'OA'), {xterm} - (char:0;scan:kbDown;st:#27'OB'), {xterm} - (char:0;scan:kbRight;st:#27'OC'), {xterm} - (char:0;scan:kbLeft;st:#27'OD'), {xterm} +const key_sequences:array[0..380] of key_sequence=( + (char:0;scan:kbAltA;shift:kbAlt;st:#27'A'), + (char:0;scan:kbAltA;shift:kbAlt;st:#27'a'), + (char:0;scan:kbAltB;shift:kbAlt;st:#27'B'), + (char:0;scan:kbAltB;shift:kbAlt;st:#27'b'), + (char:0;scan:kbAltC;shift:kbAlt;st:#27'C'), + (char:0;scan:kbAltC;shift:kbAlt;st:#27'c'), + (char:0;scan:kbAltD;shift:kbAlt;st:#27'D'), + (char:0;scan:kbAltD;shift:kbAlt;st:#27'd'), + (char:0;scan:kbAltE;shift:kbAlt;st:#27'E'), + (char:0;scan:kbAltE;shift:kbAlt;st:#27'e'), + (char:0;scan:kbAltF;shift:kbAlt;st:#27'F'), + (char:0;scan:kbAltF;shift:kbAlt;st:#27'f'), + (char:0;scan:kbAltG;shift:kbAlt;st:#27'G'), + (char:0;scan:kbAltG;shift:kbAlt;st:#27'g'), + (char:0;scan:kbAltH;shift:kbAlt;st:#27'H'), + (char:0;scan:kbAltH;shift:kbAlt;st:#27'h'), + (char:0;scan:kbAltI;shift:kbAlt;st:#27'I'), + (char:0;scan:kbAltI;shift:kbAlt;st:#27'i'), + (char:0;scan:kbAltJ;shift:kbAlt;st:#27'J'), + (char:0;scan:kbAltJ;shift:kbAlt;st:#27'j'), + (char:0;scan:kbAltK;shift:kbAlt;st:#27'K'), + (char:0;scan:kbAltK;shift:kbAlt;st:#27'k'), + (char:0;scan:kbAltL;shift:kbAlt;st:#27'L'), + (char:0;scan:kbAltL;shift:kbAlt;st:#27'l'), + (char:0;scan:kbAltM;shift:kbAlt;st:#27'M'), + (char:0;scan:kbAltM;shift:kbAlt;st:#27'm'), + (char:0;scan:kbAltN;shift:kbAlt;st:#27'N'), + (char:0;scan:kbAltN;shift:kbAlt;st:#27'n'), + (char:0;scan:kbAltO;shift:kbAlt;st:#27'O'), + (char:0;scan:kbAltO;shift:kbAlt;st:#27'o'), + (char:0;scan:kbAltP;shift:kbAlt;st:#27'P'), + (char:0;scan:kbAltP;shift:kbAlt;st:#27'p'), + (char:0;scan:kbAltQ;shift:kbAlt;st:#27'Q'), + (char:0;scan:kbAltQ;shift:kbAlt;st:#27'q'), + (char:0;scan:kbAltR;shift:kbAlt;st:#27'R'), + (char:0;scan:kbAltR;shift:kbAlt;st:#27'r'), + (char:0;scan:kbAltS;shift:kbAlt;st:#27'S'), + (char:0;scan:kbAltS;shift:kbAlt;st:#27's'), + (char:0;scan:kbAltT;shift:kbAlt;st:#27'T'), + (char:0;scan:kbAltT;shift:kbAlt;st:#27't'), + (char:0;scan:kbAltU;shift:kbAlt;st:#27'U'), + (char:0;scan:kbAltU;shift:kbAlt;st:#27'u'), + (char:0;scan:kbAltV;shift:kbAlt;st:#27'V'), + (char:0;scan:kbAltV;shift:kbAlt;st:#27'v'), + (char:0;scan:kbAltW;shift:kbAlt;st:#27'W'), + (char:0;scan:kbAltW;shift:kbAlt;st:#27'w'), + (char:0;scan:kbAltX;shift:kbAlt;st:#27'X'), + (char:0;scan:kbAltX;shift:kbAlt;st:#27'x'), + (char:0;scan:kbAltY;shift:kbAlt;st:#27'Y'), + (char:0;scan:kbAltY;shift:kbAlt;st:#27'y'), + (char:0;scan:kbAltZ;shift:kbAlt;st:#27'Z'), + (char:0;scan:kbAltZ;shift:kbAlt;st:#27'z'), + (char:0;scan:kbAltMinus;shift:kbAlt;st:#27'-'), + (char:0;scan:kbAltEqual;shift:kbAlt;st:#27'='), + (char:0;scan:kbAlt0;shift:kbAlt;st:#27'0'), + (char:0;scan:kbAlt1;shift:kbAlt;st:#27'1'), + (char:0;scan:kbAlt2;shift:kbAlt;st:#27'2'), + (char:0;scan:kbAlt3;shift:kbAlt;st:#27'3'), + (char:0;scan:kbAlt4;shift:kbAlt;st:#27'4'), + (char:0;scan:kbAlt5;shift:kbAlt;st:#27'5'), + (char:0;scan:kbAlt6;shift:kbAlt;st:#27'6'), + (char:0;scan:kbAlt7;shift:kbAlt;st:#27'7'), + (char:0;scan:kbAlt8;shift:kbAlt;st:#27'8'), + (char:0;scan:kbAlt9;shift:kbAlt;st:#27'9'), + + (char:0;scan:kbF1;shift:0;st:#27'[[A'), {linux,konsole,xterm} + (char:0;scan:kbF2;shift:0;st:#27'[[B'), {linux,konsole,xterm} + (char:0;scan:kbF3;shift:0;st:#27'[[C'), {linux,konsole,xterm} + (char:0;scan:kbF4;shift:0;st:#27'[[D'), {linux,konsole,xterm} + (char:0;scan:kbF5;shift:0;st:#27'[[E'), {linux,konsole} + (char:0;scan:kbF1;shift:0;st:#27'[11~'), {Eterm,rxvt} + (char:0;scan:kbF2;shift:0;st:#27'[12~'), {Eterm,rxvt} + (char:0;scan:kbF3;shift:0;st:#27'[13~'), {Eterm,rxvt} + (char:0;scan:kbF4;shift:0;st:#27'[14~'), {Eterm,rxvt} + (char:0;scan:kbF5;shift:0;st:#27'[15~'), {xterm,Eterm,gnome,rxvt} + (char:0;scan:kbF6;shift:0;st:#27'[17~'), {linux,xterm,Eterm,konsole,gnome,rxvt} + (char:0;scan:kbF7;shift:0;st:#27'[18~'), {linux,xterm,Eterm,konsole,gnome,rxvt} + (char:0;scan:kbF8;shift:0;st:#27'[19~'), {linux,xterm,Eterm,konsole,gnome,rxvt} + (char:0;scan:kbF9;shift:0;st:#27'[20~'), {linux,xterm,Eterm,konsole,gnome,rxvt} + (char:0;scan:kbF10;shift:0;st:#27'[21~'), {linux,xterm,Eterm,konsole,gnome,rxvt} + (char:0;scan:kbF11;shift:0;st:#27'[23~'), {linux,xterm,Eterm,konsole,gnome,rxvt} + (char:0;scan:kbF12;shift:0;st:#27'[24~'), {linux,xterm,Eterm,konsole,gnome,rxvt} + (char:0;scan:kbF1;shift:0;st:#27'[M'), {FreeBSD} + (char:0;scan:kbF2;shift:0;st:#27'[N'), {FreeBSD} + (char:0;scan:kbF3;shift:0;st:#27'[O'), {FreeBSD} + (char:0;scan:kbF4;shift:0;st:#27'[P'), {FreeBSD} + (char:0;scan:kbF5;shift:0;st:#27'[Q'), {FreeBSD} + (char:0;scan:kbF6;shift:0;st:#27'[R'), {FreeBSD} + (char:0;scan:kbF7;shift:0;st:#27'[S'), {FreeBSD} + (char:0;scan:kbF8;shift:0;st:#27'[T'), {FreeBSD} + (char:0;scan:kbF9;shift:0;st:#27'[U'), {FreeBSD} + (char:0;scan:kbF10;shift:0;st:#27'[V'), {FreeBSD} + (char:0;scan:kbF11;shift:0;st:#27'[W'), {FreeBSD} + (char:0;scan:kbF12;shift:0;st:#27'[X'), {FreeBSD} + (char:0;scan:kbF1;shift:0;st:#27'OP'), {vt100,gnome,konsole} + (char:0;scan:kbF2;shift:0;st:#27'OQ'), {vt100,gnome,konsole} + (char:0;scan:kbF3;shift:0;st:#27'OR'), {vt100,gnome,konsole} + (char:0;scan:kbF4;shift:0;st:#27'OS'), {vt100,gnome,konsole} + (char:0;scan:kbF5;shift:0;st:#27'Ot'), {vt100} + (char:0;scan:kbF6;shift:0;st:#27'Ou'), {vt100} + (char:0;scan:kbF7;shift:0;st:#27'Ov'), {vt100} + (char:0;scan:kbF8;shift:0;st:#27'Ol'), {vt100} + (char:0;scan:kbF9;shift:0;st:#27'Ow'), {vt100} + (char:0;scan:kbF10;shift:0;st:#27'Ox'), {vt100} + (char:0;scan:kbF11;shift:0;st:#27'Oy'), {vt100} + (char:0;scan:kbF12;shift:0;st:#27'Oz'), {vt100} + (char:27;scan:kbEsc;shift:0;st:#27'[0~'), {if linux keyboard patched, escape + returns this} + (char:0;scan:kbIns;shift:0;st:#27'[2~'), {linux,Eterm,rxvt} + (char:0;scan:kbDel;shift:0;st:#27'[3~'), {linux,Eterm,rxvt} + (char:0;scan:kbHome;shift:0;st:#27'[1~'), {linux} + (char:0;scan:kbHome;shift:0;st:#27'[7~'), {Eterm,rxvt} + (char:0;scan:kbHome;shift:0;st:#27'[H'), {FreeBSD} + (char:0;scan:kbHome;shift:0;st:#27'OH'), {some xterm configurations} + (char:0;scan:kbEnd;shift:0;st:#27'[4~'), {linux,Eterm} + (char:0;scan:kbEnd;shift:0;st:#27'[8~'), {rxvt} + (char:0;scan:kbEnd;shift:0;st:#27'[F'), {FreeBSD} + (char:0;scan:kbEnd;shift:0;st:#27'OF'), {some xterm configurations} + (char:0;scan:kbPgUp;shift:0;st:#27'[5~'), {linux,Eterm,rxvt} + (char:0;scan:kbPgUp;shift:0;st:#27'[I'), {FreeBSD} + (char:0;scan:kbPgDn;shift:0;st:#27'[6~'), {linux,Eterm,rxvt} +{$ifdef FREEBSD} + (char:0;scan:kbPgDn;shift:0;st:#27'[G'), {FreeBSD, conflicts with linux. + Note: new FreeBSD versions seem + to use xterm-like sequences, so + this one is not needed for them. + Todo: resolve conflicting sequences + according to the TERM variable, + instead of using IFDEFs, this way + it'll work over SSH across platforms + too.} +{$else FREEBSD} + (char:0;scan:kbCenter;shift:0;st:#27'[G'), {linux} +{$endif FREEBSD} + (char:0;scan:kbCenter;shift:0;st:#27'[E'), {xterm,gnome3} + (char:0;scan:kbUp;shift:0;st:#27'[A'), {linux,FreeBSD,rxvt} + (char:0;scan:kbDown;shift:0;st:#27'[B'), {linux,FreeBSD,rxvt} + (char:0;scan:kbRight;shift:0;st:#27'[C'), {linux,FreeBSD,rxvt} + (char:0;scan:kbLeft;shift:0;st:#27'[D'), {linux,FreeBSD,rxvt} + (char:0;scan:kbUp;shift:0;st:#27'OA'), {xterm} + (char:0;scan:kbDown;shift:0;st:#27'OB'), {xterm} + (char:0;scan:kbRight;shift:0;st:#27'OC'), {xterm} + (char:0;scan:kbLeft;shift:0;st:#27'OD'), {xterm} (* Already recognized above as F11! - (char:0;scan:kbShiftF1;st:#27'[23~'), {rxvt} - (char:0;scan:kbShiftF2;st:#27'[24~'), {rxvt} + (char:0;scan:kbShiftF1;shift:kbShift;st:#27'[23~'), {rxvt} + (char:0;scan:kbShiftF2;shift:kbShift;st:#27'[24~'), {rxvt} *) - (char:0;scan:kbShiftF3;st:#27'[25~'), {linux,rxvt} - (char:0;scan:kbShiftF4;st:#27'[26~'), {linux,rxvt} - (char:0;scan:kbShiftF5;st:#27'[28~'), {linux,rxvt} - (char:0;scan:kbShiftF6;st:#27'[29~'), {linux,rxvt} - (char:0;scan:kbShiftF7;st:#27'[31~'), {linux,rxvt} - (char:0;scan:kbShiftF8;st:#27'[32~'), {linux,rxvt} - (char:0;scan:kbShiftF9;st:#27'[33~'), {linux,rxvt} - (char:0;scan:kbShiftF10;st:#27'[34~'), {linux,rxvt} - (char:0;scan:kbShiftF11;st:#27'[23$'), {rxvt} - (char:0;scan:kbShiftF12;st:#27'[24$'), {rxvt} - (char:0;scan:kbShiftF1;st:#27'[11;2~'), {konsole in vt420pc mode} - (char:0;scan:kbShiftF2;st:#27'[12;2~'), {konsole in vt420pc mode} - (char:0;scan:kbShiftF3;st:#27'[13;2~'), {konsole in vt420pc mode} - (char:0;scan:kbShiftF4;st:#27'[14;2~'), {konsole in vt420pc mode} - (char:0;scan:kbShiftF5;st:#27'[15;2~'), {xterm} - (char:0;scan:kbShiftF6;st:#27'[17;2~'), {xterm} - (char:0;scan:kbShiftF7;st:#27'[18;2~'), {xterm} - (char:0;scan:kbShiftF8;st:#27'[19;2~'), {xterm} - (char:0;scan:kbShiftF9;st:#27'[20;2~'), {xterm} - (char:0;scan:kbShiftF10;st:#27'[21;2~'), {xterm} - (char:0;scan:kbShiftF11;st:#27'[23;2~'), {xterm} - (char:0;scan:kbShiftF12;st:#27'[24;2~'), {xterm} - (char:0;scan:kbShiftF1;st:#27'O2P'), {konsole,xterm} - (char:0;scan:kbShiftF2;st:#27'O2Q'), {konsole,xterm} - (char:0;scan:kbShiftF3;st:#27'O2R'), {konsole,xterm} - (char:0;scan:kbShiftF4;st:#27'O2S'), {konsole,xterm} - (char:0;scan:kbShiftF1;st:#27'[1;2P'), {xterm,gnome3} - (char:0;scan:kbShiftF2;st:#27'[1;2Q'), {xterm,gnome3} - (char:0;scan:kbShiftF3;st:#27'[1;2R'), {xterm,gnome3} - (char:0;scan:kbShiftF4;st:#27'[1;2S'), {xterm,gnome3} - (char:0;scan:kbCtrlF1;st:#27'O5P'), {konsole,xterm} - (char:0;scan:kbCtrlF2;st:#27'O5Q'), {konsole,xterm} - (char:0;scan:kbCtrlF3;st:#27'O5R'), {konsole,xterm} - (char:0;scan:kbCtrlF4;st:#27'O5S'), {konsole,xterm} - (char:0;scan:kbCtrlF1;st:#27'[1;5P'), {xterm,gnome3} - (char:0;scan:kbCtrlF2;st:#27'[1;5Q'), {xterm,gnome3} - (char:0;scan:kbCtrlF3;st:#27'[1;5R'), {xterm,gnome3} - (char:0;scan:kbCtrlF4;st:#27'[1;5S'), {xterm,gnome3} - (char:0;scan:kbCtrlF1;st:#27'[11;5~'), {none, but expected} - (char:0;scan:kbCtrlF2;st:#27'[12;5~'), {none, but expected} - (char:0;scan:kbCtrlF3;st:#27'[13;5~'), {none, but expected} - (char:0;scan:kbCtrlF4;st:#27'[14;5~'), {none, but expected} - (char:0;scan:kbCtrlF5;st:#27'[15;5~'), {xterm} - (char:0;scan:kbCtrlF6;st:#27'[17;5~'), {xterm} - (char:0;scan:kbCtrlF7;st:#27'[18;5~'), {xterm} - (char:0;scan:kbCtrlF8;st:#27'[19;5~'), {xterm} - (char:0;scan:kbCtrlF9;st:#27'[20;5~'), {xterm} - (char:0;scan:kbCtrlF10;st:#27'[21;5~'), {xterm} - (char:0;scan:kbCtrlF11;st:#27'[23;5~'), {xterm} - (char:0;scan:kbCtrlF12;st:#27'[24;5~'), {xterm} - (char:0;scan:kbCtrlF1;st:#27'[11^'), {rxvt} - (char:0;scan:kbCtrlF2;st:#27'[12^'), {rxvt} - (char:0;scan:kbCtrlF3;st:#27'[13^'), {rxvt} - (char:0;scan:kbCtrlF4;st:#27'[14^'), {rxvt} - (char:0;scan:kbCtrlF5;st:#27'[15^'), {rxvt} - (char:0;scan:kbCtrlF6;st:#27'[17^'), {rxvt} - (char:0;scan:kbCtrlF7;st:#27'[18^'), {rxvt} - (char:0;scan:kbCtrlF8;st:#27'[19^'), {rxvt} - (char:0;scan:kbCtrlF9;st:#27'[20^'), {rxvt} - (char:0;scan:kbCtrlF10;st:#27'[21^'), {rxvt} - (char:0;scan:kbCtrlF11;st:#27'[23^'), {rxvt} - (char:0;scan:kbCtrlF12;st:#27'[24^'), {rxvt} - (char:0;scan:kbShiftIns;st:#27'[2;2~'), {should be the code, but shift+ins - is paste X clipboard in many - terminal emulators :(} - (char:0;scan:kbShiftDel;st:#27'[3;2~'), {xterm,konsole} - (char:0;scan:kbCtrlIns;st:#27'[2;5~'), {xterm} - (char:0;scan:kbCtrlDel;st:#27'[3;5~'), {xterm} - (char:0;scan:kbShiftDel;st:#27'[3$'), {rxvt} - (char:0;scan:kbCtrlIns;st:#27'[2^'), {rxvt} - (char:0;scan:kbCtrlDel;st:#27'[3^'), {rxvt} - (char:0;scan:kbAltF1;st:#27#27'[[A'), - (char:0;scan:kbAltF2;st:#27#27'[[B'), - (char:0;scan:kbAltF3;st:#27#27'[[C'), - (char:0;scan:kbAltF4;st:#27#27'[[D'), - (char:0;scan:kbAltF5;st:#27#27'[[E'), - (char:0;scan:kbAltF1;st:#27#27'[11~'), {rxvt} - (char:0;scan:kbAltF2;st:#27#27'[12~'), {rxvt} - (char:0;scan:kbAltF3;st:#27#27'[13~'), {rxvt} - (char:0;scan:kbAltF4;st:#27#27'[14~'), {rxvt} - (char:0;scan:kbAltF5;st:#27#27'[15~'), {rxvt} - (char:0;scan:kbAltF6;st:#27#27'[17~'), {rxvt} - (char:0;scan:kbAltF7;st:#27#27'[18~'), {rxvt} - (char:0;scan:kbAltF8;st:#27#27'[19~'), {rxvt} - (char:0;scan:kbAltF9;st:#27#27'[20~'), {rxvt} - (char:0;scan:kbAltF10;st:#27#27'[21~'), {rxvt} - (char:0;scan:kbAltF11;st:#27#27'[23~'), {rxvt} - (char:0;scan:kbAltF12;st:#27#27'[24~'), {rxvt} - (char:0;scan:kbAltF1;st:#27#27'OP'), {xterm} - (char:0;scan:kbAltF2;st:#27#27'OQ'), {xterm} - (char:0;scan:kbAltF3;st:#27#27'OR'), {xterm} - (char:0;scan:kbAltF4;st:#27#27'OS'), {xterm} - (char:0;scan:kbAltF5;st:#27#27'Ot'), {xterm} - (char:0;scan:kbAltF6;st:#27#27'Ou'), {xterm} - (char:0;scan:kbAltF7;st:#27#27'Ov'), {xterm} - (char:0;scan:kbAltF8;st:#27#27'Ol'), {xterm} - (char:0;scan:kbAltF9;st:#27#27'Ow'), {xterm} - (char:0;scan:kbAltF10;st:#27#27'Ox'), {xterm} - (char:0;scan:kbAltF11;st:#27#27'Oy'), {xterm} - (char:0;scan:kbAltF12;st:#27#27'Oz'), {xterm} - (char:0;scan:kbAltF1;st:#27'[1;3P'), {xterm,gnome3} - (char:0;scan:kbAltF2;st:#27'[1;3Q'), {xterm,gnome3} - (char:0;scan:kbAltF3;st:#27'[1;3R'), {xterm,gnome3} - (char:0;scan:kbAltF4;st:#27'[1;3S'), {xterm,gnome3} - (char:0;scan:kbAltF1;st:#27'O3P'), {xterm on FreeBSD} - (char:0;scan:kbAltF2;st:#27'O3Q'), {xterm on FreeBSD} - (char:0;scan:kbAltF3;st:#27'O3R'), {xterm on FreeBSD} - (char:0;scan:kbAltF4;st:#27'O3S'), {xterm on FreeBSD} - (char:0;scan:kbAltF5;st:#27'[15;3~'), {xterm on FreeBSD} - (char:0;scan:kbAltF6;st:#27'[17;3~'), {xterm on FreeBSD} - (char:0;scan:kbAltF7;st:#27'[18;3~'), {xterm on FreeBSD} - (char:0;scan:kbAltF8;st:#27'[19;3~'), {xterm on FreeBSD} - (char:0;scan:kbAltF9;st:#27'[20;3~'), {xterm on FreeBSD} - (char:0;scan:kbAltF10;st:#27'[21;3~'), {xterm on FreeBSD} - (char:0;scan:kbAltF11;st:#27'[23;3~'), {xterm on FreeBSD} - (char:0;scan:kbAltF12;st:#27'[24;3~'), {xterm on FreeBSD} - - (char:0;scan:kbShiftTab;st:#27#9), {linux - 'Meta_Tab'} - (char:0;scan:kbShiftTab;st:#27'[Z'), - (char:0;scan:kbShiftUp;st:#27'[1;2A'), {xterm} - (char:0;scan:kbShiftDown;st:#27'[1;2B'), {xterm} - (char:0;scan:kbShiftRight;st:#27'[1;2C'), {xterm} - (char:0;scan:kbShiftLeft;st:#27'[1;2D'), {xterm} - (char:0;scan:kbShiftUp;st:#27'[a'), {rxvt} - (char:0;scan:kbShiftDown;st:#27'[b'), {rxvt} - (char:0;scan:kbShiftRight;st:#27'[c'), {rxvt} - (char:0;scan:kbShiftLeft;st:#27'[d'), {rxvt} - (char:0;scan:kbShiftEnd;st:#27'[1;2F'), {xterm} - (char:0;scan:kbShiftEnd;st:#27'[8$'), {rxvt} - (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} - (char:0;scan:kbCtrlLeft;st:#27'[1;5D'), {xterm} - (char:0;scan:kbCtrlUp;st:#27'[Oa'), {rxvt} - (char:0;scan:kbCtrlDown;st:#27'[Ob'), {rxvt} - (char:0;scan:kbCtrlRight;st:#27'[Oc'), {rxvt} - (char:0;scan:kbCtrlLeft;st:#27'[Od'), {rxvt} - (char:0;scan:kbCtrlEnd;st:#27'[1;5F'), {xterm} - (char:0;scan:kbCtrlEnd;st:#27'[8^'), {rxvt} - (char:0;scan:kbCtrlHome;st:#27'[1;5H'), {xterm} - (char:0;scan:kbCtrlHome;st:#27'[7^'), {rxvt} - - (char:0;scan:kbAltUp;st:#27#27'[A'), {rxvt} - (char:0;scan:kbAltDown;st:#27#27'[B'), {rxvt} - (char:0;scan:kbAltLeft;st:#27#27'[D'), {rxvt} - (char:0;scan:kbAltRight;st:#27#27'[C'), {rxvt} +(* These seem to be shifted. Probably something changed with linux's default keymaps. + (char:0;scan:kbShiftF3;shift:kbShift;st:#27'[25~'), {linux,rxvt} + (char:0;scan:kbShiftF4;shift:kbShift;st:#27'[26~'), {linux,rxvt} + (char:0;scan:kbShiftF5;shift:kbShift;st:#27'[28~'), {linux,rxvt} + (char:0;scan:kbShiftF6;shift:kbShift;st:#27'[29~'), {linux,rxvt} + (char:0;scan:kbShiftF7;shift:kbShift;st:#27'[31~'), {linux,rxvt} + (char:0;scan:kbShiftF8;shift:kbShift;st:#27'[32~'), {linux,rxvt} + (char:0;scan:kbShiftF9;shift:kbShift;st:#27'[33~'), {linux,rxvt} + (char:0;scan:kbShiftF10;shift:kbShift;st:#27'[34~'), {linux,rxvt}*) + (char:0;scan:kbShiftF1;shift:kbShift;st:#27'[25~'), {linux} + (char:0;scan:kbShiftF2;shift:kbShift;st:#27'[26~'), {linux} + (char:0;scan:kbShiftF3;shift:kbShift;st:#27'[28~'), {linux} + (char:0;scan:kbShiftF4;shift:kbShift;st:#27'[29~'), {linux} + (char:0;scan:kbShiftF5;shift:kbShift;st:#27'[31~'), {linux} + (char:0;scan:kbShiftF6;shift:kbShift;st:#27'[32~'), {linux} + (char:0;scan:kbShiftF7;shift:kbShift;st:#27'[33~'), {linux} + (char:0;scan:kbShiftF8;shift:kbShift;st:#27'[34~'), {linux} + (char:0;scan:kbShiftF11;shift:kbShift;st:#27'[23$'), {rxvt} + (char:0;scan:kbShiftF12;shift:kbShift;st:#27'[24$'), {rxvt} + (char:0;scan:kbShiftF1;shift:kbShift;st:#27'[11;2~'), {konsole in vt420pc mode} + (char:0;scan:kbShiftF2;shift:kbShift;st:#27'[12;2~'), {konsole in vt420pc mode} + (char:0;scan:kbShiftF3;shift:kbShift;st:#27'[13;2~'), {konsole in vt420pc mode} + (char:0;scan:kbShiftF4;shift:kbShift;st:#27'[14;2~'), {konsole in vt420pc mode} + (char:0;scan:kbShiftF5;shift:kbShift;st:#27'[15;2~'), {xterm} + (char:0;scan:kbShiftF6;shift:kbShift;st:#27'[17;2~'), {xterm} + (char:0;scan:kbShiftF7;shift:kbShift;st:#27'[18;2~'), {xterm} + (char:0;scan:kbShiftF8;shift:kbShift;st:#27'[19;2~'), {xterm} + (char:0;scan:kbShiftF9;shift:kbShift;st:#27'[20;2~'), {xterm} + (char:0;scan:kbShiftF10;shift:kbShift;st:#27'[21;2~'), {xterm} + (char:0;scan:kbShiftF11;shift:kbShift;st:#27'[23;2~'), {xterm} + (char:0;scan:kbShiftF12;shift:kbShift;st:#27'[24;2~'), {xterm} + (char:0;scan:kbShiftF1;shift:kbShift;st:#27'O2P'), {konsole,xterm} + (char:0;scan:kbShiftF2;shift:kbShift;st:#27'O2Q'), {konsole,xterm} + (char:0;scan:kbShiftF3;shift:kbShift;st:#27'O2R'), {konsole,xterm} + (char:0;scan:kbShiftF4;shift:kbShift;st:#27'O2S'), {konsole,xterm} + (char:0;scan:kbShiftF1;shift:kbShift;st:#27'[1;2P'), {xterm,gnome3} + (char:0;scan:kbShiftF2;shift:kbShift;st:#27'[1;2Q'), {xterm,gnome3} + (char:0;scan:kbShiftF3;shift:kbShift;st:#27'[1;2R'), {xterm,gnome3} + (char:0;scan:kbShiftF4;shift:kbShift;st:#27'[1;2S'), {xterm,gnome3} + (char:0;scan:kbCtrlF1;shift:kbCtrl;st:#27'O5P'), {konsole,xterm} + (char:0;scan:kbCtrlF2;shift:kbCtrl;st:#27'O5Q'), {konsole,xterm} + (char:0;scan:kbCtrlF3;shift:kbCtrl;st:#27'O5R'), {konsole,xterm} + (char:0;scan:kbCtrlF4;shift:kbCtrl;st:#27'O5S'), {konsole,xterm} + (char:0;scan:kbCtrlF1;shift:kbCtrl;st:#27'[1;5P'), {xterm,gnome3} + (char:0;scan:kbCtrlF2;shift:kbCtrl;st:#27'[1;5Q'), {xterm,gnome3} + (char:0;scan:kbCtrlF3;shift:kbCtrl;st:#27'[1;5R'), {xterm,gnome3} + (char:0;scan:kbCtrlF4;shift:kbCtrl;st:#27'[1;5S'), {xterm,gnome3} + (char:0;scan:kbCtrlF1;shift:kbCtrl;st:#27'[11;5~'), {none, but expected} + (char:0;scan:kbCtrlF2;shift:kbCtrl;st:#27'[12;5~'), {none, but expected} + (char:0;scan:kbCtrlF3;shift:kbCtrl;st:#27'[13;5~'), {none, but expected} + (char:0;scan:kbCtrlF4;shift:kbCtrl;st:#27'[14;5~'), {none, but expected} + (char:0;scan:kbCtrlF5;shift:kbCtrl;st:#27'[15;5~'), {xterm} + (char:0;scan:kbCtrlF6;shift:kbCtrl;st:#27'[17;5~'), {xterm} + (char:0;scan:kbCtrlF7;shift:kbCtrl;st:#27'[18;5~'), {xterm} + (char:0;scan:kbCtrlF8;shift:kbCtrl;st:#27'[19;5~'), {xterm} + (char:0;scan:kbCtrlF9;shift:kbCtrl;st:#27'[20;5~'), {xterm} + (char:0;scan:kbCtrlF10;shift:kbCtrl;st:#27'[21;5~'), {xterm} + (char:0;scan:kbCtrlF11;shift:kbCtrl;st:#27'[23;5~'), {xterm} + (char:0;scan:kbCtrlF12;shift:kbCtrl;st:#27'[24;5~'), {xterm} + (char:0;scan:kbCtrlF1;shift:kbCtrl;st:#27'[11^'), {rxvt} + (char:0;scan:kbCtrlF2;shift:kbCtrl;st:#27'[12^'), {rxvt} + (char:0;scan:kbCtrlF3;shift:kbCtrl;st:#27'[13^'), {rxvt} + (char:0;scan:kbCtrlF4;shift:kbCtrl;st:#27'[14^'), {rxvt} + (char:0;scan:kbCtrlF5;shift:kbCtrl;st:#27'[15^'), {rxvt} + (char:0;scan:kbCtrlF6;shift:kbCtrl;st:#27'[17^'), {rxvt} + (char:0;scan:kbCtrlF7;shift:kbCtrl;st:#27'[18^'), {rxvt} + (char:0;scan:kbCtrlF8;shift:kbCtrl;st:#27'[19^'), {rxvt} + (char:0;scan:kbCtrlF9;shift:kbCtrl;st:#27'[20^'), {rxvt} + (char:0;scan:kbCtrlF10;shift:kbCtrl;st:#27'[21^'), {rxvt} + (char:0;scan:kbCtrlF11;shift:kbCtrl;st:#27'[23^'), {rxvt} + (char:0;scan:kbCtrlF12;shift:kbCtrl;st:#27'[24^'), {rxvt} + (char:0;scan:kbShiftIns;shift:kbShift;st:#27'[2;2~'), {should be the code, but shift+ins + is paste X clipboard in many + terminal emulators :(} + (char:0;scan:kbShiftDel;shift:kbShift;st:#27'[3;2~'), {xterm,konsole} + (char:0;scan:kbCtrlIns;shift:kbCtrl;st:#27'[2;5~'), {xterm} + (char:0;scan:kbCtrlDel;shift:kbCtrl;st:#27'[3;5~'), {xterm} + (char:0;scan:kbShiftDel;shift:kbShift;st:#27'[3$'), {rxvt} + (char:0;scan:kbCtrlIns;shift:kbCtrl;st:#27'[2^'), {rxvt} + (char:0;scan:kbCtrlDel;shift:kbCtrl;st:#27'[3^'), {rxvt} + (char:0;scan:kbAltF1;shift:kbAlt;st:#27#27'[[A'), + (char:0;scan:kbAltF2;shift:kbAlt;st:#27#27'[[B'), + (char:0;scan:kbAltF3;shift:kbAlt;st:#27#27'[[C'), + (char:0;scan:kbAltF4;shift:kbAlt;st:#27#27'[[D'), + (char:0;scan:kbAltF5;shift:kbAlt;st:#27#27'[[E'), + (char:0;scan:kbAltF1;shift:kbAlt;st:#27#27'[11~'), {rxvt} + (char:0;scan:kbAltF2;shift:kbAlt;st:#27#27'[12~'), {rxvt} + (char:0;scan:kbAltF3;shift:kbAlt;st:#27#27'[13~'), {rxvt} + (char:0;scan:kbAltF4;shift:kbAlt;st:#27#27'[14~'), {rxvt} + (char:0;scan:kbAltF5;shift:kbAlt;st:#27#27'[15~'), {rxvt} + (char:0;scan:kbAltF6;shift:kbAlt;st:#27#27'[17~'), {rxvt} + (char:0;scan:kbAltF7;shift:kbAlt;st:#27#27'[18~'), {rxvt} + (char:0;scan:kbAltF8;shift:kbAlt;st:#27#27'[19~'), {rxvt} + (char:0;scan:kbAltF9;shift:kbAlt;st:#27#27'[20~'), {rxvt} + (char:0;scan:kbAltF10;shift:kbAlt;st:#27#27'[21~'), {rxvt} + (char:0;scan:kbAltF11;shift:kbAlt;st:#27#27'[23~'), {rxvt} + (char:0;scan:kbAltF12;shift:kbAlt;st:#27#27'[24~'), {rxvt} + (char:0;scan:kbAltF1;shift:kbAlt;st:#27#27'OP'), {xterm} + (char:0;scan:kbAltF2;shift:kbAlt;st:#27#27'OQ'), {xterm} + (char:0;scan:kbAltF3;shift:kbAlt;st:#27#27'OR'), {xterm} + (char:0;scan:kbAltF4;shift:kbAlt;st:#27#27'OS'), {xterm} + (char:0;scan:kbAltF5;shift:kbAlt;st:#27#27'Ot'), {xterm} + (char:0;scan:kbAltF6;shift:kbAlt;st:#27#27'Ou'), {xterm} + (char:0;scan:kbAltF7;shift:kbAlt;st:#27#27'Ov'), {xterm} + (char:0;scan:kbAltF8;shift:kbAlt;st:#27#27'Ol'), {xterm} + (char:0;scan:kbAltF9;shift:kbAlt;st:#27#27'Ow'), {xterm} + (char:0;scan:kbAltF10;shift:kbAlt;st:#27#27'Ox'), {xterm} + (char:0;scan:kbAltF11;shift:kbAlt;st:#27#27'Oy'), {xterm} + (char:0;scan:kbAltF12;shift:kbAlt;st:#27#27'Oz'), {xterm} + (char:0;scan:kbAltF1;shift:kbAlt;st:#27'[1;3P'), {xterm,gnome3} + (char:0;scan:kbAltF2;shift:kbAlt;st:#27'[1;3Q'), {xterm,gnome3} + (char:0;scan:kbAltF3;shift:kbAlt;st:#27'[1;3R'), {xterm,gnome3} + (char:0;scan:kbAltF4;shift:kbAlt;st:#27'[1;3S'), {xterm,gnome3} + (char:0;scan:kbAltF1;shift:kbAlt;st:#27'O3P'), {xterm on FreeBSD} + (char:0;scan:kbAltF2;shift:kbAlt;st:#27'O3Q'), {xterm on FreeBSD} + (char:0;scan:kbAltF3;shift:kbAlt;st:#27'O3R'), {xterm on FreeBSD} + (char:0;scan:kbAltF4;shift:kbAlt;st:#27'O3S'), {xterm on FreeBSD} + (char:0;scan:kbAltF5;shift:kbAlt;st:#27'[15;3~'), {xterm on FreeBSD} + (char:0;scan:kbAltF6;shift:kbAlt;st:#27'[17;3~'), {xterm on FreeBSD} + (char:0;scan:kbAltF7;shift:kbAlt;st:#27'[18;3~'), {xterm on FreeBSD} + (char:0;scan:kbAltF8;shift:kbAlt;st:#27'[19;3~'), {xterm on FreeBSD} + (char:0;scan:kbAltF9;shift:kbAlt;st:#27'[20;3~'), {xterm on FreeBSD} + (char:0;scan:kbAltF10;shift:kbAlt;st:#27'[21;3~'), {xterm on FreeBSD} + (char:0;scan:kbAltF11;shift:kbAlt;st:#27'[23;3~'), {xterm on FreeBSD} + (char:0;scan:kbAltF12;shift:kbAlt;st:#27'[24;3~'), {xterm on FreeBSD} + + (char:0;scan:kbCtrlF1;shift:kbCtrl or kbShift;st:#27'[1;6P'), {xterm,gnome3} + (char:0;scan:kbCtrlF2;shift:kbCtrl or kbShift;st:#27'[1;6Q'), {xterm,gnome3} + (char:0;scan:kbCtrlF3;shift:kbCtrl or kbShift;st:#27'[1;6R'), {xterm,gnome3} + (char:0;scan:kbCtrlF4;shift:kbCtrl or kbShift;st:#27'[1;6S'), {xterm,gnome3} + (char:0;scan:kbCtrlF5;shift:kbCtrl or kbShift;st:#27'[15;6~'), {xterm} + (char:0;scan:kbCtrlF6;shift:kbCtrl or kbShift;st:#27'[17;6~'), {xterm} + (char:0;scan:kbCtrlF7;shift:kbCtrl or kbShift;st:#27'[18;6~'), {xterm} + (char:0;scan:kbCtrlF8;shift:kbCtrl or kbShift;st:#27'[19;6~'), {xterm} + (char:0;scan:kbCtrlF9;shift:kbCtrl or kbShift;st:#27'[20;6~'), {xterm} + (char:0;scan:kbCtrlF10;shift:kbCtrl or kbShift;st:#27'[21;6~'), {xterm} + (char:0;scan:kbCtrlF11;shift:kbCtrl or kbShift;st:#27'[23;6~'), {xterm} + (char:0;scan:kbCtrlF12;shift:kbCtrl or kbShift;st:#27'[24;6~'), {xterm} + + (char:0;scan:kbAltF1;shift:kbShift or kbAlt;st:#27'[1;4P'), {xterm} + (char:0;scan:kbAltF2;shift:kbShift or kbAlt;st:#27'[1;4Q'), {xterm} + (char:0;scan:kbAltF3;shift:kbShift or kbAlt;st:#27'[1;4R'), {xterm} + (char:0;scan:kbAltF4;shift:kbShift or kbAlt;st:#27'[1;4S'), {xterm} + (char:0;scan:kbAltF5;shift:kbShift or kbAlt;st:#27'[15;4~'), {xterm} + (char:0;scan:kbAltF6;shift:kbShift or kbAlt;st:#27'[17;4~'), {xterm} + (char:0;scan:kbAltF7;shift:kbShift or kbAlt;st:#27'[18;4~'), {xterm} + (char:0;scan:kbAltF8;shift:kbShift or kbAlt;st:#27'[19;4~'), {xterm} + (char:0;scan:kbAltF9;shift:kbShift or kbAlt;st:#27'[20;4~'), {xterm} + (char:0;scan:kbAltF10;shift:kbShift or kbAlt;st:#27'[21;4~'), {xterm} + (char:0;scan:kbAltF11;shift:kbShift or kbAlt;st:#27'[23;4~'), {xterm} + (char:0;scan:kbAltF12;shift:kbShift or kbAlt;st:#27'[24;4~'), {xterm} + + (char:0;scan:kbAltF1;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8P'), {xterm} + (char:0;scan:kbAltF2;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8Q'), {xterm} + (char:0;scan:kbAltF3;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8R'), {xterm} + (char:0;scan:kbAltF4;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8S'), {xterm} + (char:0;scan:kbAltF5;shift:kbCtrl or kbShift or kbAlt;st:#27'[15;8~'), {xterm} + (char:0;scan:kbAltF6;shift:kbCtrl or kbShift or kbAlt;st:#27'[17;8~'), {xterm} + (char:0;scan:kbAltF7;shift:kbCtrl or kbShift or kbAlt;st:#27'[18;8~'), {xterm} + (char:0;scan:kbAltF8;shift:kbCtrl or kbShift or kbAlt;st:#27'[19;8~'), {xterm} + (char:0;scan:kbAltF9;shift:kbCtrl or kbShift or kbAlt;st:#27'[20;8~'), {xterm} + (char:0;scan:kbAltF10;shift:kbCtrl or kbShift or kbAlt;st:#27'[21;8~'), {xterm} + (char:0;scan:kbAltF11;shift:kbCtrl or kbShift or kbAlt;st:#27'[23;8~'), {xterm} + (char:0;scan:kbAltF12;shift:kbCtrl or kbShift or kbAlt;st:#27'[24;8~'), {xterm} + + (char:0;scan:kbShiftTab;shift:kbShift;st:#27#9), {linux - 'Meta_Tab'} + (char:0;scan:kbShiftTab;shift:kbShift;st:#27'[Z'), + (char:0;scan:kbShiftUp;shift:kbShift;st:#27'[1;2A'), {xterm} + (char:0;scan:kbShiftDown;shift:kbShift;st:#27'[1;2B'), {xterm} + (char:0;scan:kbShiftRight;shift:kbShift;st:#27'[1;2C'), {xterm} + (char:0;scan:kbShiftLeft;shift:kbShift;st:#27'[1;2D'), {xterm} + (char:0;scan:kbShiftCenter;shift:kbShift;st:#27'[1;2E'),{xterm} + (char:0;scan:kbShiftPgUp;shift:kbShift;st:#27'[5;2~'), {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)} + (char:0;scan:kbShiftPgDn;shift:kbShift;st:#27'[6;2~'), {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)} + (char:0;scan:kbShiftUp;shift:kbShift;st:#27'[a'), {rxvt} + (char:0;scan:kbShiftDown;shift:kbShift;st:#27'[b'), {rxvt} + (char:0;scan:kbShiftRight;shift:kbShift;st:#27'[c'), {rxvt} + (char:0;scan:kbShiftLeft;shift:kbShift;st:#27'[d'), {rxvt} + (char:0;scan:kbShiftEnd;shift:kbShift;st:#27'[1;2F'), {xterm} + (char:0;scan:kbShiftEnd;shift:kbShift;st:#27'[8$'), {rxvt} + (char:0;scan:kbShiftHome;shift:kbShift;st:#27'[1;2H'), {xterm} + (char:0;scan:kbShiftHome;shift:kbShift;st:#27'[7$'), {rxvt} + + (char:0;scan:KbCtrlUp;shift:kbCtrl or kbShift;st:#27'[1;6A'), {xterm} + (char:0;scan:KbCtrlDown;shift:kbCtrl or kbShift;st:#27'[1;6B'), {xterm} + (char:0;scan:KbCtrlRight;shift:kbCtrl or kbShift;st:#27'[1;6C'), {xterm, xfce4} + (char:0;scan:KbCtrlLeft;shift:kbCtrl or kbShift;st:#27'[1;6D'), {xterm, xfce4} + (char:0;scan:KbCtrlCenter;shift:kbCtrl or kbShift;st:#27'[1;6E'),{xterm} + (char:0;scan:KbCtrlHome;shift:kbCtrl or kbShift;st:#27'[1;6H'), {xterm} + (char:0;scan:KbCtrlEnd;shift:kbCtrl or kbShift;st:#27'[1;6F'), {xterm} + (char:0;scan:KbCtrlIns;shift:kbCtrl or kbShift;st:#27'[2;6~'), {xterm} + (char:0;scan:KbCtrlDel;shift:kbCtrl or kbShift;st:#27'[3;6~'), {xterm} + (char:0;scan:kbCtrlPgUp;shift:kbCtrl or kbShift;st:#27'[5;6~'), {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)} + (char:0;scan:kbCtrlPgDn;shift:kbCtrl or kbShift;st:#27'[6;6~'), {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)} + + (char:0;scan:kbCtrlPgDn;shift:kbCtrl;st:#27'[6;5~'), {xterm} + (char:0;scan:kbCtrlPgUp;shift:kbCtrl;st:#27'[5;5~'), {xterm} + (char:0;scan:kbCtrlUp;shift:kbCtrl;st:#27'[1;5A'), {xterm} + (char:0;scan:kbCtrlDown;shift:kbCtrl;st:#27'[1;5B'), {xterm} + (char:0;scan:kbCtrlRight;shift:kbCtrl;st:#27'[1;5C'), {xterm} + (char:0;scan:kbCtrlLeft;shift:kbCtrl;st:#27'[1;5D'), {xterm} + (char:0;scan:kbCtrlCenter;shift:kbCtrl;st:#27'[1;5E'), {xterm} + (char:0;scan:kbCtrlUp;shift:kbCtrl;st:#27'[Oa'), {rxvt} + (char:0;scan:kbCtrlDown;shift:kbCtrl;st:#27'[Ob'), {rxvt} + (char:0;scan:kbCtrlRight;shift:kbCtrl;st:#27'[Oc'), {rxvt} + (char:0;scan:kbCtrlLeft;shift:kbCtrl;st:#27'[Od'), {rxvt} + (char:0;scan:kbCtrlEnd;shift:kbCtrl;st:#27'[1;5F'), {xterm} + (char:0;scan:kbCtrlEnd;shift:kbCtrl;st:#27'[8^'), {rxvt} + (char:0;scan:kbCtrlHome;shift:kbCtrl;st:#27'[1;5H'), {xterm} + (char:0;scan:kbCtrlHome;shift:kbCtrl;st:#27'[7^'), {rxvt} + + (char:0;scan:kbAltUp;shift:kbAlt;st:#27#27'[A'), {rxvt} + (char:0;scan:kbAltDown;shift:kbAlt;st:#27#27'[B'), {rxvt} + (char:0;scan:kbAltLeft;shift:kbAlt;st:#27#27'[D'), {rxvt} + (char:0;scan:kbAltRight;shift:kbAlt;st:#27#27'[C'), {rxvt} {$ifdef HAIKU} - (char:0;scan:kbAltUp;st:#27#27'OA'), - (char:0;scan:kbAltDown;st:#27#27'OB'), - (char:0;scan:kbAltRight;st:#27#27'OC'), + (char:0;scan:kbAltUp;shift:kbAlt;st:#27#27'OA'), + (char:0;scan:kbAltDown;shift:kbAlt;st:#27#27'OB'), + (char:0;scan:kbAltRight;shift:kbAlt;st:#27#27'OC'), {$else} - (char:0;scan:kbAltUp;st:#27'OA'), - (char:0;scan:kbAltDown;st:#27'OB'), - (char:0;scan:kbAltRight;st:#27'OC'), + (char:0;scan:kbAltUp;shift:kbAlt;st:#27'OA'), + (char:0;scan:kbAltDown;shift:kbAlt;st:#27'OB'), + (char:0;scan:kbAltRight;shift:kbAlt;st:#27'OC'), {$endif} - (char:0;scan:kbAltLeft;st:#27#27'OD'), - (char:0;scan:kbAltPgUp;st:#27#27'[5~'), {rxvt} - (char:0;scan:kbAltPgDn;st:#27#27'[6~'), {rxvt} - (char:0;scan:kbAltEnd;st:#27#27'[4~'), - (char:0;scan:kbAltEnd;st:#27#27'[8~'), {rxvt} - (char:0;scan:kbAltHome;st:#27#27'[1~'), - (char:0;scan:kbAltHome;st:#27#27'[7~'), {rxvt} - (char:0;scan:kbAltIns;st:#27#27'[2~'), {rxvt} - (char:0;scan:kbAltDel;st:#27#27'[3~'), {rxvt} + (char:0;scan:kbAltLeft;shift:kbAlt;st:#27#27'OD'), + (char:0;scan:kbAltPgUp;shift:kbAlt;st:#27#27'[5~'), {rxvt} + (char:0;scan:kbAltPgDn;shift:kbAlt;st:#27#27'[6~'), {rxvt} + (char:0;scan:kbAltEnd;shift:kbAlt;st:#27#27'[4~'), + (char:0;scan:kbAltEnd;shift:kbAlt;st:#27#27'[8~'), {rxvt} + (char:0;scan:kbAltHome;shift:kbAlt;st:#27#27'[1~'), + (char:0;scan:kbAltHome;shift:kbAlt;st:#27#27'[7~'), {rxvt} + (char:0;scan:kbAltIns;shift:kbAlt;st:#27#27'[2~'), {rxvt} + (char:0;scan:kbAltDel;shift:kbAlt;st:#27#27'[3~'), {rxvt} + + (char:0;scan:KbAltUp;shift:kbAlt;st:#27'[1;3A'), {xterm} + (char:0;scan:KbAltDown;shift:kbAlt;st:#27'[1;3B'), {xterm} + (char:0;scan:KbAltRight;shift:kbAlt;st:#27'[1;3C'), {xterm} + (char:0;scan:KbAltLeft;shift:kbAlt;st:#27'[1;3D'), {xterm} + (char:0;scan:KbAltCenter;shift:kbAlt;st:#27'[1;3E'), {xterm} + (char:0;scan:KbAltHome;shift:kbAlt;st:#27'[1;3H'), {xterm} + (char:0;scan:KbAltEnd;shift:kbAlt;st:#27'[1;3F'), {xterm} + (char:0;scan:KbAltIns;shift:kbAlt;st:#27'[2;3~'), {xterm} + (char:0;scan:KbAltDel;shift:kbAlt;st:#27'[3;3~'), {xterm} + (char:0;scan:kbAltPgUp;shift:kbAlt;st:#27'[5;3~'), {xterm} + (char:0;scan:kbAltPgDn;shift:kbAlt;st:#27'[6;3~'), {xterm} + + (char:0;scan:KbAltUp;shift:kbShift or kbAlt;st:#27'[1;4A'), {xterm} + (char:0;scan:KbAltDown;shift:kbShift or kbAlt;st:#27'[1;4B'), {xterm} + (char:0;scan:KbAltRight;shift:kbShift or kbAlt;st:#27'[1;4C'), {xterm} + (char:0;scan:KbAltLeft;shift:kbShift or kbAlt;st:#27'[1;4D'), {xterm} + (char:0;scan:kbAltCenter;shift:kbShift or kbAlt;st:#27'[1;4E'), {xterm} + (char:0;scan:KbAltHome;shift:kbShift or kbAlt;st:#27'[1;4H'), {xterm} + (char:0;scan:KbAltEnd;shift:kbShift or kbAlt;st:#27'[1;4F'), {xterm} + (char:0;scan:KbAltIns;shift:kbShift or kbAlt;st:#27'[2;4~'), {xterm} + (char:0;scan:KbAltDel;shift:kbShift or kbAlt;st:#27'[3;4~'), {xterm} + (char:0;scan:kbAltPgUp;shift:kbShift or kbAlt;st:#27'[5;4~'), {xterm} + (char:0;scan:kbAltPgDn;shift:kbShift or kbAlt;st:#27'[6;4~'), {xterm} + + (char:0;scan:KbAltIns;shift:kbCtrl or kbAlt;st:#27'[2;7~'), {xterm} + (char:0;scan:KbAltDel;shift:kbCtrl or kbAlt;st:#27'[3;7~'), {xterm, Del on numpad} + (char:0;scan:kbAltPgUp;shift:kbCtrl or kbAlt;st:#27'[5;7~'), {xterm} + (char:0;scan:kbAltPgDn;shift:kbCtrl or kbAlt;st:#27'[6;7~'), {xterm} + + (char:0;scan:KbAltUp;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8A'), {xterm} + (char:0;scan:KbAltDown;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8B'), {xterm} + (char:0;scan:KbAltRight;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8C'), {xterm} + (char:0;scan:KbAltLeft;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8D'), {xterm} + (char:0;scan:kbAltCenter;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8E'), {xterm} + (char:0;scan:KbAltHome;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8H'), {xterm} + (char:0;scan:KbAltEnd;shift:kbCtrl or kbShift or kbAlt;st:#27'[1;8F'), {xterm} + (char:0;scan:KbAltIns;shift:kbCtrl or kbShift or kbAlt;st:#27'[2;8~'), {xterm} + (char:0;scan:KbAltDel;shift:kbCtrl or kbShift or kbAlt;st:#27'[3;8~'), {xterm} + (char:0;scan:kbAltPgUp;shift:kbCtrl or kbShift or kbAlt;st:#27'[5;8~'), {xterm} + (char:0;scan:kbAltPgDn;shift:kbCtrl or kbShift or kbAlt;st:#27'[6;8~'), {xterm} { xterm default values } { xterm alternate default values } { ignored sequences } - (char:0;scan:0;st:#27'[?1;0c'), - (char:0;scan:0;st:#27'[?1l'), - (char:0;scan:0;st:#27'[?1h'), - (char:0;scan:0;st:#27'[?1;2c'), - (char:0;scan:0;st:#27'[?7l'), - (char:0;scan:0;st:#27'[?7h') + (char:0;scan:0;shift:0;st:#27'[?1;0c'), + (char:0;scan:0;shift:0;st:#27'[?1l'), + (char:0;scan:0;shift:0;st:#27'[?1h'), + (char:0;scan:0;shift:0;st:#27'[?1;2c'), + (char:0;scan:0;shift:0;st:#27'[?7l'), + (char:0;scan:0;shift:0;st:#27'[?7h') ); procedure LoadDefaultSequences; @@ -1221,28 +1343,29 @@ if copy(fpgetenv('TERM'),1,4)='cons' then begin {FreeBSD is until now only terminal that uses it for delete.} - DoAddSequence(#127,0,kbDel); {Delete} - DoAddSequence(#27#127,0,kbAltDel); {Alt+delete} + DoAddSequence(#127,0,kbDel,0); {Delete} + DoAddSequence(#27#127,0,kbAltDel,kbAlt); {Alt+delete} end else begin - DoAddSequence(#127,8,0); {Backspace} - DoAddSequence(#27#127,0,kbAltBack); {Alt+backspace} + DoAddSequence(#127,8,0,0); {Backspace} + DoAddSequence(#27#127,0,kbAltBack,kbAlt); {Alt+backspace} end; { all Esc letter } for i:=low(key_sequences) to high(key_sequences) do with key_sequences[i] do - DoAddSequence(st,char,scan); + DoAddSequence(st,char,scan,shift); end; function RawReadKey:char; var fdsin : tfdSet; + lose: byte; begin {Check Buffer first} if KeySend<>KeyPut then begin - RawReadKey:=PopKey; + RawReadKey:=PopKey(lose); exit; end; {Wait for Key} @@ -1279,7 +1402,7 @@ end; -function ReadKey(var IsAlt : boolean):char; +function ReadKey(var IsAlt : byte):char; var ch : char; fdsin : tfdSet; @@ -1293,15 +1416,15 @@ i : byte; begin for i:=0 to arrayind-1 do - PushKey(store[i]); + PushKey(store[i],0); end; begin - IsAlt:=false; + IsAlt:=0; {Check Buffer first} if KeySend<>KeyPut then begin - ReadKey:=PopKey; + ReadKey:=PopKey(IsAlt); exit; end; {Wait for Key} @@ -1314,7 +1437,7 @@ ch:=ttyRecvChar; NPT:=RootTree[ch]; if not assigned(NPT) then - PushKey(ch) + PushKey(ch,0) else begin fpFD_ZERO(fdsin); @@ -1379,12 +1502,13 @@ if assigned(NPT^.SpecialHandler) then begin NPT^.SpecialHandler; - PushExt(0); + PushExt(0,0); end else if NPT^.CharValue<>0 then - PushKey(chr(NPT^.CharValue)) + PushKey(chr(NPT^.CharValue),NPT^.ShiftValue) else if NPT^.ScanValue<>0 then - PushExt(NPT^.ScanValue); + PushExt(NPT^.ScanValue,NPT^.ShiftValue); + end else RestoreArray; @@ -1393,7 +1517,7 @@ writeln(f); {$endif logging} - ReadKey:=PopKey; + ReadKey:=PopKey(IsAlt); End; {$ifdef linux} @@ -1566,15 +1690,11 @@ (kbAltHome,kbAltUp,kbAltPgUp,kbNoKey,kbAltLeft, kbCenter,kbAltRight,kbAltGrayPlus,kbAltEnd, 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; MyChar : char; - EscUsed,AltPrefixUsed,CtrlPrefixUsed,ShiftPrefixUsed,IsAlt,Again : boolean; + EscUsed,AltPrefixUsed,CtrlPrefixUsed,ShiftPrefixUsed,Again : boolean; + IsAlt:byte; SState:byte; begin {main} @@ -1590,8 +1710,8 @@ AltPrefixUsed:=false; ShiftPrefixUsed:=false; EscUsed:=false; - if IsAlt then - SState:=SState or kbAlt; + if IsAlt<>0 then + SState:=SState or IsAlt; repeat again:=false; if Mychar=#0 then @@ -1630,18 +1750,6 @@ kbF11..KbF12 : { sF11-sF12 } MyScan:=MyScan+kbShiftF11-kbF11; end; - if myscan in [kbShiftUp..kbCtrlShiftEnd] then - begin - 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; if (MyChar<>#0) or (MyScan<>0) or (SState<>0) then @@ -1732,8 +1840,8 @@ begin MyChar:=Readkey(IsAlt); MyScan:=ord(MyChar); - if IsAlt then - SState:=SState or kbAlt; + if IsAlt<> 0then + SState:=SState or IsAlt; end; until not Again; if (MyChar<>#0) or (MyScan<>0) or (SState<>0) then
diff -ru a/packages/rtl-console/src/unix/keyboard.pp b/packages/rtl-console/src/unix/keyboard.pp --- a/packages/rtl-console/src/unix/keyboard.pp 2024-05-09 00:13:05.000000000 +0000 +++ b/packages/rtl-console/src/unix/keyboard.pp 2024-05-27 18:16:38.119777000 +0000 @@ -103,22 +103,98 @@ {$i keyscan.inc} {Some internal only scancodes} -const KbShiftUp = $f0; - KbShiftLeft = $f1; - KbShiftRight = $f2; - KbShiftDown = $f3; - KbShiftHome = $f4; - KbShiftEnd = $f5; - KbShiftPgUp = $f6; - KbShiftPgDn = $f7; - KbCtrlShiftUp = $f8; - KbCtrlShiftDown = $f9; - KbCtrlShiftRight = $fa; - KbCtrlShiftLeft = $fb; - KbCtrlShiftHome = $fc; - KbCtrlShiftEnd = $fd; - KbCtrlShiftPgUp = $fe; - KbCtrlShiftPgDn = $ff; +const + KbAltCenter = KbCenter; {there is no true scancode for Alt+Center (Numpad "5") reusing Shift+Center} + { aliases of scancodes } + KbShiftUp = KbUp; + KbShiftLeft = KbLeft; + KbShiftRight = KbRight; + KbShiftDown = KbDown; + KbShiftCenter = KbCenter; + KbShiftHome = KbHome; + KbShiftEnd = KbEnd; + KbShiftPgUp = KbPgUp; + KbShiftPgDn = KbPgDn; + + KbCtrlShiftUp = KbCtrlUp; + KbCtrlShiftDown = KbCtrlDown; + KbCtrlShiftRight = KbCtrlRight; + KbCtrlShiftLeft = KbCtrlLeft; + KbCtrlShiftCenter = KbCtrlCenter; + KbCtrlShiftHome = KbCtrlHome; + KbCtrlShiftEnd = KbCtrlEnd; + KbCtrlShiftIns = kbCtrlIns; + KbCtrlShiftDel = kbCtrlDel; + KbCtrlShiftPgUp = KbCtrlPgUp; + KbCtrlShiftPgDn = KbCtrlPgDn; + + KbShiftAltUp = KbAltUp; + KbShiftAltDown = KbAltDown; + KbShiftAltRight = KbAltRight; + KbShiftAltLeft = KbAltLeft; + KbShiftAltCenter = KbAltCenter; + KbShiftAltHome = KbAltHome; + KbShiftAltEnd = KbAltEnd; + KbShiftAltIns = KbAltIns; + KbShiftAltDel = KbAltDel; + kbShiftAltPgUp = KbAltPgUp; + kbShiftAltPgDn = KbAltPgDn; + + KbCtrlAltIns = KbAltIns; + KbCtrlAltDel = KbAltDel; + kbCtrlAltPgUp = KbAltPgUp; + kbCtrlAltPgDn = KbAltPgDn; + + KbCtrlShiftAltUp = KbAltUp; + KbCtrlShiftAltDown = KbAltDown; + KbCtrlShiftAltRight = KbAltRight; + KbCtrlShiftAltLeft = KbAltLeft; + kbCtrlShiftAltCenter = KbAltCenter; + KbCtrlShiftAltHome = KbAltHome; + KbCtrlShiftAltEnd = KbAltEnd; + KbCtrlShiftAltIns = KbAltIns; + KbCtrlShiftAltDel = KbAltDel; + kbCtrlShiftAltPgUp = KbAltPgUp; + kbCtrlShiftAltPgDn = KbAltPgDn; + + kbCtrlShiftF1 = kbCtrlF1; + kbCtrlShiftF2 = kbCtrlF2; + kbCtrlShiftF3 = kbCtrlF3; + kbCtrlShiftF4 = kbCtrlF4; + kbCtrlShiftF5 = kbCtrlF5; + kbCtrlShiftF6 = kbCtrlF6; + kbCtrlShiftF7 = kbCtrlF7; + kbCtrlShiftF8 = kbCtrlF8; + kbCtrlShiftF9 = kbCtrlF9; + kbCtrlShiftF10 = kbCtrlF10; + kbCtrlShiftF11 = kbCtrlF11; + kbCtrlShiftF12 = kbCtrlF12; + + kbShiftAltF1 = kbAltF1; + kbShiftAltF2 = kbAltF2; + kbShiftAltF3 = kbAltF3; + kbShiftAltF4 = kbAltF4; + kbShiftAltF5 = kbAltF5; + kbShiftAltF6 = kbAltF6; + kbShiftAltF7 = kbAltF7; + kbShiftAltF8 = kbAltF8; + kbShiftAltF9 = kbAltF9; + kbShiftAltF10 = kbAltF10; + kbShiftAltF11 = kbAltF11; + kbShiftAltF12 = kbAltF12; + + kbCtrlShiftAltF1 = kbAltF1; + kbCtrlShiftAltF2 = kbAltF2; + kbCtrlShiftAltF3 = kbAltF3; + kbCtrlShiftAltF4 = kbAltF4; + kbCtrlShiftAltF5 = kbAltF5; + kbCtrlShiftAltF6 = kbAltF6; + kbCtrlShiftAltF7 = kbAltF7; + kbCtrlShiftAltF8 = kbAltF8; + kbCtrlShiftAltF9 = kbAltF9; + kbCtrlShiftAltF10 = kbAltF10; + kbCtrlShiftAltF11 = kbAltF11; + kbCtrlShiftAltF12 = kbAltF12; double_esc_hack_enabled : boolean = false; @@ -899,7 +976,7 @@ st:string[7]; end; -const key_sequences:array[0..302] of key_sequence=( +const key_sequences:array[0..380] of key_sequence=( (AnsiChar:0;scan:kbAltA;shift:[essAlt];st:#27'A'), (AnsiChar:0;scan:kbAltA;shift:[essAlt];st:#27'a'), (AnsiChar:0;scan:kbAltB;shift:[essAlt];st:#27'B'), @@ -1173,12 +1250,52 @@ (AnsiChar:0;scan:kbAltF11;shift:[essAlt];st:#27'[23;3~'), {xterm on FreeBSD} (AnsiChar:0;scan:kbAltF12;shift:[essAlt];st:#27'[24;3~'), {xterm on FreeBSD} + (AnsiChar:0;scan:kbCtrlShiftF1;shift:[essCtrl,essShift];st:#27'[1;6P'), {xterm,gnome3} + (AnsiChar:0;scan:kbCtrlShiftF2;shift:[essCtrl,essShift];st:#27'[1;6Q'), {xterm,gnome3} + (AnsiChar:0;scan:kbCtrlShiftF3;shift:[essCtrl,essShift];st:#27'[1;6R'), {xterm,gnome3} + (AnsiChar:0;scan:kbCtrlShiftF4;shift:[essCtrl,essShift];st:#27'[1;6S'), {xterm,gnome3} + (AnsiChar:0;scan:kbCtrlShiftF5;shift:[essCtrl,essShift];st:#27'[15;6~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftF6;shift:[essCtrl,essShift];st:#27'[17;6~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftF7;shift:[essCtrl,essShift];st:#27'[18;6~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftF8;shift:[essCtrl,essShift];st:#27'[19;6~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftF9;shift:[essCtrl,essShift];st:#27'[20;6~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftF10;shift:[essCtrl,essShift];st:#27'[21;6~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftF11;shift:[essCtrl,essShift];st:#27'[23;6~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftF12;shift:[essCtrl,essShift];st:#27'[24;6~'), {xterm} + + (AnsiChar:0;scan:kbShiftAltF1;shift:[essShift,essAlt];st:#27'[1;4P'), {xterm} + (AnsiChar:0;scan:kbShiftAltF2;shift:[essShift,essAlt];st:#27'[1;4Q'), {xterm} + (AnsiChar:0;scan:kbShiftAltF3;shift:[essShift,essAlt];st:#27'[1;4R'), {xterm} + (AnsiChar:0;scan:kbShiftAltF4;shift:[essShift,essAlt];st:#27'[1;4S'), {xterm} + (AnsiChar:0;scan:kbShiftAltF5;shift:[essShift,essAlt];st:#27'[15;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltF6;shift:[essShift,essAlt];st:#27'[17;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltF7;shift:[essShift,essAlt];st:#27'[18;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltF8;shift:[essShift,essAlt];st:#27'[19;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltF9;shift:[essShift,essAlt];st:#27'[20;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltF10;shift:[essShift,essAlt];st:#27'[21;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltF11;shift:[essShift,essAlt];st:#27'[23;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltF12;shift:[essShift,essAlt];st:#27'[24;4~'), {xterm} + + (AnsiChar:0;scan:kbCtrlShiftAltF1;shift:[essCtrl,essShift,essAlt];st:#27'[1;8P'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF2;shift:[essCtrl,essShift,essAlt];st:#27'[1;8Q'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF3;shift:[essCtrl,essShift,essAlt];st:#27'[1;8R'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF4;shift:[essCtrl,essShift,essAlt];st:#27'[1;8S'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF5;shift:[essCtrl,essShift,essAlt];st:#27'[15;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF6;shift:[essCtrl,essShift,essAlt];st:#27'[17;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF7;shift:[essCtrl,essShift,essAlt];st:#27'[18;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF8;shift:[essCtrl,essShift,essAlt];st:#27'[19;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF9;shift:[essCtrl,essShift,essAlt];st:#27'[20;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF10;shift:[essCtrl,essShift,essAlt];st:#27'[21;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF11;shift:[essCtrl,essShift,essAlt];st:#27'[23;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltF12;shift:[essCtrl,essShift,essAlt];st:#27'[24;8~'), {xterm} + (AnsiChar:0;scan:kbShiftTab;shift:[essShift];st:#27#9), {linux - 'Meta_Tab'} (AnsiChar:0;scan:kbShiftTab;shift:[essShift];st:#27'[Z'), (AnsiChar:0;scan:kbShiftUp;shift:[essShift];st:#27'[1;2A'), {xterm} (AnsiChar:0;scan:kbShiftDown;shift:[essShift];st:#27'[1;2B'), {xterm} (AnsiChar:0;scan:kbShiftRight;shift:[essShift];st:#27'[1;2C'), {xterm} (AnsiChar:0;scan:kbShiftLeft;shift:[essShift];st:#27'[1;2D'), {xterm} + (AnsiChar:0;scan:kbShiftCenter;shift:[essShift];st:#27'[1;2E'),{xterm} (AnsiChar:0;scan:kbShiftPgUp;shift:[essShift];st:#27'[5;2~'), {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)} (AnsiChar:0;scan:kbShiftPgDn;shift:[essShift];st:#27'[6;2~'), {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)} (AnsiChar:0;scan:kbShiftUp;shift:[essShift];st:#27'[a'), {rxvt} @@ -1194,8 +1311,11 @@ (AnsiChar:0;scan:KbCtrlShiftDown;shift:[essCtrl,essShift];st:#27'[1;6B'), {xterm} (AnsiChar:0;scan:KbCtrlShiftRight;shift:[essCtrl,essShift];st:#27'[1;6C'), {xterm, xfce4} (AnsiChar:0;scan:KbCtrlShiftLeft;shift:[essCtrl,essShift];st:#27'[1;6D'), {xterm, xfce4} + (AnsiChar:0;scan:KbCtrlShiftCenter;shift:[essCtrl,essShift];st:#27'[1;6E'),{xterm} (AnsiChar:0;scan:KbCtrlShiftHome;shift:[essCtrl,essShift];st:#27'[1;6H'), {xterm} (AnsiChar:0;scan:KbCtrlShiftEnd;shift:[essCtrl,essShift];st:#27'[1;6F'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftIns;shift:[essCtrl,essShift];st:#27'[2;6~'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftDel;shift:[essCtrl,essShift];st:#27'[3;6~'), {xterm} (AnsiChar:0;scan:kbCtrlShiftPgUp;shift:[essCtrl,essShift];st:#27'[5;6~'), {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)} (AnsiChar:0;scan:kbCtrlShiftPgDn;shift:[essCtrl,essShift];st:#27'[6;6~'), {fpterm, xterm-compatible sequence (but xterm uses shift+pgup/pgdn for scrollback)} @@ -1205,6 +1325,7 @@ (AnsiChar:0;scan:kbCtrlDown;shift:[essCtrl];st:#27'[1;5B'), {xterm} (AnsiChar:0;scan:kbCtrlRight;shift:[essCtrl];st:#27'[1;5C'), {xterm} (AnsiChar:0;scan:kbCtrlLeft;shift:[essCtrl];st:#27'[1;5D'), {xterm} + (AnsiChar:0;scan:kbCtrlCenter;shift:[essCtrl];st:#27'[1;5E'), {xterm} (AnsiChar:0;scan:kbCtrlUp;shift:[essCtrl];st:#27'[Oa'), {rxvt} (AnsiChar:0;scan:kbCtrlDown;shift:[essCtrl];st:#27'[Ob'), {rxvt} (AnsiChar:0;scan:kbCtrlRight;shift:[essCtrl];st:#27'[Oc'), {rxvt} @@ -1237,6 +1358,47 @@ (AnsiChar:0;scan:kbAltIns;shift:[essAlt];st:#27#27'[2~'), {rxvt} (AnsiChar:0;scan:kbAltDel;shift:[essAlt];st:#27#27'[3~'), {rxvt} + (AnsiChar:0;scan:KbAltUp;shift:[essAlt];st:#27'[1;3A'), {xterm} + (AnsiChar:0;scan:KbAltDown;shift:[essAlt];st:#27'[1;3B'), {xterm} + (AnsiChar:0;scan:KbAltRight;shift:[essAlt];st:#27'[1;3C'), {xterm} + (AnsiChar:0;scan:KbAltLeft;shift:[essAlt];st:#27'[1;3D'), {xterm} + (AnsiChar:0;scan:KbAltCenter;shift:[essAlt];st:#27'[1;3E'), {xterm} + (AnsiChar:0;scan:KbAltHome;shift:[essAlt];st:#27'[1;3H'), {xterm} + (AnsiChar:0;scan:KbAltEnd;shift:[essAlt];st:#27'[1;3F'), {xterm} + (AnsiChar:0;scan:KbAltIns;shift:[essAlt];st:#27'[2;3~'), {xterm} + (AnsiChar:0;scan:KbAltDel;shift:[essAlt];st:#27'[3;3~'), {xterm} + (AnsiChar:0;scan:kbAltPgUp;shift:[essAlt];st:#27'[5;3~'), {xterm} + (AnsiChar:0;scan:kbAltPgDn;shift:[essAlt];st:#27'[6;3~'), {xterm} + + (AnsiChar:0;scan:KbShiftAltUp;shift:[essShift,essAlt];st:#27'[1;4A'), {xterm} + (AnsiChar:0;scan:KbShiftAltDown;shift:[essShift,essAlt];st:#27'[1;4B'), {xterm} + (AnsiChar:0;scan:KbShiftAltRight;shift:[essShift,essAlt];st:#27'[1;4C'), {xterm} + (AnsiChar:0;scan:KbShiftAltLeft;shift:[essShift,essAlt];st:#27'[1;4D'), {xterm} + (AnsiChar:0;scan:kbShiftAltCenter;shift:[essShift,essAlt];st:#27'[1;4E'), {xterm} + (AnsiChar:0;scan:KbShiftAltHome;shift:[essShift,essAlt];st:#27'[1;4H'), {xterm} + (AnsiChar:0;scan:KbShiftAltEnd;shift:[essShift,essAlt];st:#27'[1;4F'), {xterm} + (AnsiChar:0;scan:KbShiftAltIns;shift:[essShift,essAlt];st:#27'[2;4~'), {xterm} + (AnsiChar:0;scan:KbShiftAltDel;shift:[essShift,essAlt];st:#27'[3;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltPgUp;shift:[essShift,essAlt];st:#27'[5;4~'), {xterm} + (AnsiChar:0;scan:kbShiftAltPgDn;shift:[essShift,essAlt];st:#27'[6;4~'), {xterm} + + (AnsiChar:0;scan:KbCtrlAltIns;shift:[essCtrl,essAlt];st:#27'[2;7~'), {xterm} + (AnsiChar:0;scan:KbCtrlAltDel;shift:[essCtrl,essAlt];st:#27'[3;7~'), {xterm, Del on numpad} + (AnsiChar:0;scan:kbCtrlAltPgUp;shift:[essCtrl,essAlt];st:#27'[5;7~'), {xterm} + (AnsiChar:0;scan:kbCtrlAltPgDn;shift:[essCtrl,essAlt];st:#27'[6;7~'), {xterm} + + (AnsiChar:0;scan:KbCtrlShiftAltUp;shift:[essCtrl,essShift,essAlt];st:#27'[1;8A'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftAltDown;shift:[essCtrl,essShift,essAlt];st:#27'[1;8B'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftAltRight;shift:[essCtrl,essShift,essAlt];st:#27'[1;8C'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftAltLeft;shift:[essCtrl,essShift,essAlt];st:#27'[1;8D'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltCenter;shift:[essCtrl,essShift,essAlt];st:#27'[1;8E'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftAltHome;shift:[essCtrl,essShift,essAlt];st:#27'[1;8H'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftAltEnd;shift:[essCtrl,essShift,essAlt];st:#27'[1;8F'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftAltIns;shift:[essCtrl,essShift,essAlt];st:#27'[2;8~'), {xterm} + (AnsiChar:0;scan:KbCtrlShiftAltDel;shift:[essCtrl,essShift,essAlt];st:#27'[3;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltPgUp;shift:[essCtrl,essShift,essAlt];st:#27'[5;8~'), {xterm} + (AnsiChar:0;scan:kbCtrlShiftAltPgDn;shift:[essCtrl,essShift,essAlt];st:#27'[6;8~'), {xterm} + { xterm default values } { xterm alternate default values } { ignored sequences } @@ -1636,6 +1833,7 @@ k.AsciiChar := chr(NPT^.CharValue); k.UnicodeChar := WideChar(NPT^.CharValue); k.VirtualScanCode := (NPT^.ScanValue shl 8) or Ord(k.AsciiChar); + k.ShiftState:=k.ShiftState+NPT^.ShiftValue; PushKey(k); end; end @@ -1763,13 +1963,8 @@ kbCtrlDown,kbCtrlPgDn,kbCtrlIns,kbCtrlDel); AltArrow : array [kbHome..kbDel] of byte = (kbAltHome,kbAltUp,kbAltPgUp,kbNoKey,kbAltLeft, - kbCenter,kbAltRight,kbAltGrayPlus,kbAltEnd, + kbAltCenter,kbAltRight,kbAltGrayPlus,kbAltEnd, kbAltDown,kbAltPgDn,kbAltIns,kbAltDel); - ShiftArrow : array [kbShiftUp..kbShiftPgDn] of byte = - (kbUp,kbLeft,kbRight,kbDown,kbHome,kbEnd,kbPgUp,kbPgDn); - CtrlShiftArrow : array [kbCtrlShiftUp..kbCtrlShiftPgDn] of byte = - (kbCtrlUp,kbCtrlDown,kbCtrlRight,kbCtrlLeft,kbCtrlHome,kbCtrlEnd,kbCtrlPgUp,kbCtrlPgDn); - var MyScan:byte; MyChar : AnsiChar; @@ -1830,18 +2028,6 @@ kbF11..KbF12 : { sF11-sF12 } MyScan:=MyScan+kbShiftF11-kbF11; end; - if myscan in [kbShiftUp..kbCtrlShiftPgDn] then - begin - if myscan <= kbShiftPgDn then - begin - myscan:=ShiftArrow[myscan]; - Include(sstate, essShift); - end else - begin - myscan:=CtrlShiftArrow[myscan]; - sstate:=sstate + [essShift, essCtrl]; - end; - end; if myscan=kbAltBack then Include(sstate, essAlt); if (MyChar<>#0) or (MyUniChar<>WideChar(0)) or (MyScan<>0) or (SState<>[]) then
diff -ru a/packages/rtl-console/src/unix/keyboard.pp b/packages/rtl-console/src/unix/keyboard.pp --- a/packages/rtl-console/src/unix/keyboard.pp 2023-01-19 15:42:50.438798000 +0000 +++ b/packages/rtl-console/src/unix/keyboard.pp 2024-05-27 15:57:58.919861124 +0000 @@ -1536,6 +1536,7 @@ case b of $08:EvalScan:=$0E; { backspace } $09:EvalScan:=$0F; { TAB } + $0A:EvalScan:=$1C; { LF } $0D:EvalScan:=$1C; { CR } $1B:EvalScan:=$01; { esc } $40:EvalScan:=$03; { @ }
diff -ru a/compiler/parser.pas b/compiler/parser.pas --- a/compiler/parser.pas 2024-05-09 00:13:05.000000000 +0000 +++ b/compiler/parser.pas 2024-05-25 00:36:17.477438402 +0000 @@ -278,6 +278,8 @@ unloaded_units.free; unloaded_units:=nil; end; + { Set default types to nil. At this point they are not valid class pointers. } + set_default_types_nil; { if there was an error in the scanner, the scanner is still assinged } diff -ru a/compiler/symdef.pas b/compiler/symdef.pas --- a/compiler/symdef.pas 2024-05-09 00:13:05.000000000 +0000 +++ b/compiler/symdef.pas 2024-05-25 01:40:44.230016407 +0000 @@ -1398,6 +1398,7 @@ procedure get_tabledef(prefix:tinternaltypeprefix;countdef,elementdef:tdef;count:longint;packrecords:shortint;out recdef:trecorddef;out arrdef:tarraydef); function fileinfo_of_typesym_in_def(def:tdef;sym:tsym;out filepos:tfileposinfo):boolean; + procedure set_default_types_nil; implementation @@ -9575,5 +9576,177 @@ {$endif} end; + procedure set_default_types_nil; + begin + { set default types to nil } + voidpointertype:=nil; { pointer for Void-pointeddef } + charpointertype:=nil; { pointer for Char-pointeddef } + widecharpointertype:=nil; { pointer for WideChar-pointeddef } + voidcodepointertype:=nil; { pointer to code; corresponds to System.CodePointer } + voidstackpointertype:=nil; { the pointer type used for accessing parameters and local vars on the stack } + parentfpvoidpointertype:=nil; { void pointer with the size of the hidden parentfp parameter, passed to nested functions } +{$ifdef x86} + voidnearpointertype:=nil; + voidnearcspointertype:=nil; + voidneardspointertype:=nil; + voidnearsspointertype:=nil; + voidnearespointertype:=nil; + voidnearfspointertype:=nil; + voidneargspointertype:=nil; + {$ifdef i8086} + voidfarpointertype:=nil; + voidhugepointertype:=nil; + charnearpointertype:=nil; + charfarpointertype:=nil; + charhugepointertype:=nil; + bytefarpointertype:=nil; { used for Mem[] } + wordfarpointertype:=nil; { used for MemW[] } + longintfarpointertype:=nil; { used for MemL[] } + {$endif i8086} +{$endif x86} +{$ifdef wasm} + wasmvoidexternreftype:=nil; +{$endif wasm} + cundefinedtype:=nil; + cformaltype:=nil; { unique formal definition } + ctypedformaltype:=nil; { unique typed formal definition } + voidtype:=nil; { Void (procedure) } + cansichartype:=nil; { Char } + cwidechartype:=nil; { WideChar } + cchartype:=nil; { either cansichartype or cwidechartype. Do not free } + pasbool1type:=nil; { boolean type } + pasbool8type:=nil; + pasbool16type:=nil; + pasbool32type:=nil; + pasbool64type:=nil; + bool8type:=nil; + bool16type:=nil; + bool32type:=nil; + bool64type:=nil; { implement me } +{$ifdef llvm} + llvmbool1type:=nil; { LLVM i1 type } +{$endif llvm} + u8inttype:=nil; { 8-Bit unsigned integer } + s8inttype:=nil; { 8-Bit signed integer } + u16inttype:=nil; { 16-Bit unsigned integer } + s16inttype:=nil; { 16-Bit signed integer } + u24inttype:=nil; { 24-Bit unsigned integer } + s24inttype:=nil; { 24-Bit signed integer } + u32inttype:=nil; { 32-Bit unsigned integer } + s32inttype:=nil; { 32-Bit signed integer } + u40inttype:=nil; { 40-Bit unsigned integer } + s40inttype:=nil; { 40-Bit signed integer } + u48inttype:=nil; { 48-Bit unsigned integer } + s48inttype:=nil; { 48-Bit signed integer } + u56inttype:=nil; { 56-Bit unsigned integer } + s56inttype:=nil; { 56-Bit signed integer } + u64inttype:=nil; { 64-bit unsigned integer } + s64inttype:=nil; { 64-bit signed integer } + u128inttype:=nil; { 128-bit unsigned integer } + s128inttype:=nil; {Â 128-bit signed integer } + s32floattype:=nil; { 32 bit floating point number } + s64floattype:=nil; { 64 bit floating point number } + s80floattype:=nil; { 80 bit floating point number } + sc80floattype:=nil; { 80 bit floating point number but stored like in C } + s64currencytype:=nil; { pointer to a currency type } + cshortstringtype:=nil; { pointer to type of short string const } + clongstringtype:=nil; { pointer to type of long string const } + cansistringtype:=nil; { pointer to type of ansi string const } + cwidestringtype:=nil; { pointer to type of wide string const } + cunicodestringtype:=nil; + openshortstringtype:=nil; { pointer to type of an open shortstring, + needed for readln() } + openchararraytype:=nil; { pointer to type of an open array of char, + needed for readln() } + cfiletype:=nil; { get the same definition for all file } + { used for stabs } + methodpointertype:=nil; { typecasting of methodpointers to extract self } + nestedprocpointertype:=nil; { typecasting of nestedprocpointers to extract parentfp } + hresultdef:=nil; + typekindtype:=nil; { def of TTypeKind for correct handling of GetTypeKind parameters } + { we use only one variant def for every variant class } + cvarianttype:=nil; + colevarianttype:=nil; + { default integer type, normally s32inttype on 32 bit systems and s64bittype on 64 bit systems } + sinttype:=nil; + uinttype:=nil; + { integer types corresponding to OS_SINT/OS_INT } + ossinttype:=nil; + osuinttype:=nil; + { integer types corresponding to the ALU size, sizeof(aint) and the ALUSInt/ALUUInt types in the system unit } + alusinttype:=nil; + aluuinttype:=nil; + { integer types corresponding to SizeInt and SizeUInt for the target platform } + sizeuinttype:=nil; + sizesinttype:=nil; + { unsigned and signed ord type with the same size as a pointer } + ptruinttype:=nil; + ptrsinttype:=nil; + { unsigned and signed ord type with the same size as a codepointer } + codeptruinttype:=nil; + codeptrsinttype:=nil; + { several types to simulate more or less C++ objects for GDB } + vmttype:=nil; + vmtarraytype:=nil; + { type of classrefs, used for stabs } + pvmttype:=nil; + { return type of the setjmp function } + exceptionreasontype:=nil; + + class_tobject:=nil; + class_tcustomattribute:=nil; + interface_iunknown:=nil; + interface_idispatch:=nil; + rec_tguid:=nil; + rec_jmp_buf:=nil; + rec_exceptaddr:=nil; + objc_metaclasstype:=nil; + objc_superclasstype:=nil; + objc_idtype:=nil; + objc_seltype:=nil; + objc_objecttype:=nil; + { base type of @protocol(protocolname) Objective-C statements } + objc_protocoltype:=nil; + { helper types for for-in "fast enumeration" support in Objective-C 2.0 } + objc_fastenumeration:=nil; + objc_fastenumerationstate:=nil; + +{$ifdef llvm} + { llvm types } + { a unique def to identify any kind of metadata } + llvm_metadatatype:=nil; +{$endif llvm} + + { Java base types } + { java.lang.Object } + java_jlobject:=nil; + { java.lang.Throwable } + java_jlthrowable:=nil; + { FPC base type for records } + java_fpcbaserecordtype:=nil; + { java.lang.String } + java_jlstring:=nil; + { java.lang.Enum } + java_jlenum:=nil; + { java.util.EnumSet } + java_juenumset:=nil; + { java.util.BitSet } + java_jubitset:=nil; + { FPC java implementation of ansistrings } + java_ansistring:=nil; + { FPC java implementation of shortstrings } + java_shortstring:=nil; + { FPC java procvar base class } + java_procvarbase:=nil; + + { x86 vector types } + x86_m64type:=nil; + x86_m128type:=nil; + x86_m128dtype:=nil; + x86_m128itype:=nil; + x86_m256type:=nil; + x86_m256dtype:=nil; + x86_m256itype:=nil; + end; end. diff -ru a/compiler/symtable.pas b/compiler/symtable.pas --- a/compiler/symtable.pas 2024-05-09 00:13:05.000000000 +0000 +++ b/compiler/symtable.pas 2024-05-25 01:39:37.721249657 +0000 @@ -5055,19 +5055,6 @@ { unit aliases } unitaliases:=TFPHashObjectList.create; {$endif} - { set some global vars to nil, might be important for the ide } - class_tobject:=nil; - class_tcustomattribute:=nil; - interface_iunknown:=nil; - interface_idispatch:=nil; - rec_tguid:=nil; - rec_jmp_buf:=nil; - rec_exceptaddr:=nil; - objc_metaclasstype:=nil; - objc_superclasstype:=nil; - objc_idtype:=nil; - objc_seltype:=nil; - objc_objecttype:=nil; dupnr:=0; end;
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel