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<>[]) thendiff -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 - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
