mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-19 11:39:33 +02:00
* Optimize keyboard unit for code size; now 3kb+ object code less.
git-svn-id: trunk@2678 -
This commit is contained in:
parent
2d97d480ed
commit
2a14ed7c32
@ -13,7 +13,9 @@
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
unit Keyboard;
|
||||
unit keyboard;
|
||||
|
||||
{$inline on}
|
||||
|
||||
{*****************************************************************************}
|
||||
interface
|
||||
@ -29,7 +31,7 @@ const
|
||||
function RawReadKey:char;
|
||||
function RawReadString : String;
|
||||
function KeyPressed : Boolean;
|
||||
procedure AddSequence(const St : String; AChar,AScan :byte);
|
||||
procedure AddSequence(const St : String; AChar,AScan :byte);inline;
|
||||
function FindSequence(const St : String;var AChar, Ascan : byte) : boolean;
|
||||
procedure RestoreStartMode;
|
||||
|
||||
@ -473,10 +475,11 @@ const
|
||||
begin
|
||||
fpFD_ZERO(fdsin);
|
||||
fpFD_SET(StdInputHandle,fdsin);
|
||||
Fillchar(MouseEvent,SizeOf(TMouseEvent),#0);
|
||||
if inhead=intail then
|
||||
fpSelect(StdInputHandle+1,@fdsin,nil,nil,10);
|
||||
ch:=ttyRecvChar;
|
||||
{ Fillchar(MouseEvent,SizeOf(TMouseEvent),#0);}
|
||||
MouseEvent.action:=0;
|
||||
if inhead=intail then
|
||||
fpSelect(StdInputHandle+1,@fdsin,nil,nil,10);
|
||||
ch:=ttyRecvChar;
|
||||
{ Other bits are used for Shift, Meta and Ctrl modifiers PM }
|
||||
case (ord(ch)-ord(' ')) and 3 of
|
||||
0 : {left button press}
|
||||
@ -536,8 +539,7 @@ type
|
||||
SpecialHandler : Tprocedure;
|
||||
end;
|
||||
|
||||
var
|
||||
RootTree : Array[0..255] of PTreeElement;
|
||||
var roottree:array[char] of PTreeElement;
|
||||
|
||||
procedure FreeElement (PT:PTreeElement);
|
||||
var next : PTreeElement;
|
||||
@ -552,25 +554,24 @@ begin
|
||||
end;
|
||||
|
||||
procedure FreeTree;
|
||||
var i : integer;
|
||||
|
||||
var i:char;
|
||||
|
||||
begin
|
||||
for i := low(RootTree) to high(RootTree) do
|
||||
begin
|
||||
FreeElement(RootTree[i]);
|
||||
RootTree[i] := nil;
|
||||
end;
|
||||
for i:=low(roottree) to high(roottree) do
|
||||
begin
|
||||
FreeElement(RootTree[i]);
|
||||
roottree[i]:=nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
function NewPTree(ch : byte;Pa : PTreeElement) : PTreeElement;
|
||||
var PT : PTreeElement;
|
||||
begin
|
||||
New(PT);
|
||||
FillChar(PT^,SizeOf(TTreeElement),#0);
|
||||
PT^.char:=ch;
|
||||
PT^.Parent:=Pa;
|
||||
newPtree:=allocmem(sizeof(Ttreeelement));
|
||||
newPtree^.char:=ch;
|
||||
newPtree^.Parent:=Pa;
|
||||
if Assigned(Pa) and (Pa^.Child=nil) then
|
||||
Pa^.Child:=PT;
|
||||
NewPTree:=PT;
|
||||
Pa^.Child:=newPtree;
|
||||
end;
|
||||
|
||||
function DoAddSequence(const St : String; AChar,AScan :byte) : PTreeElement;
|
||||
@ -584,11 +585,11 @@ begin
|
||||
DoAddSequence:=nil;
|
||||
exit;
|
||||
end;
|
||||
CurPTree:=RootTree[ord(st[1])];
|
||||
CurPTree:=RootTree[st[1]];
|
||||
if CurPTree=nil then
|
||||
begin
|
||||
CurPTree:=NewPTree(ord(st[1]),nil);
|
||||
RootTree[ord(st[1])]:=CurPTree;
|
||||
RootTree[st[1]]:=CurPTree;
|
||||
end;
|
||||
for i:=2 to Length(St) do
|
||||
begin
|
||||
@ -649,7 +650,7 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
procedure AddSequence(const St : String; AChar,AScan :byte);
|
||||
procedure AddSequence(const St : String; AChar,AScan :byte);inline;
|
||||
begin
|
||||
DoAddSequence(St,AChar,AScan);
|
||||
end;
|
||||
@ -659,11 +660,6 @@ function FindChild(c : byte;Root : PTreeElement) : PTreeElement;
|
||||
var
|
||||
NPT : PTreeElement;
|
||||
begin
|
||||
if not assigned(Root) then
|
||||
begin
|
||||
FindChild:=nil;
|
||||
exit;
|
||||
end;
|
||||
NPT:=Root^.Child;
|
||||
while assigned(NPT) and (NPT^.char<c) do
|
||||
NPT:=NPT^.Next;
|
||||
@ -685,33 +681,264 @@ end;
|
||||
function FindSequence(const St : String;var AChar,AScan :byte) : boolean;
|
||||
var
|
||||
NPT : PTreeElement;
|
||||
I : longint;
|
||||
i : byte;
|
||||
begin
|
||||
FindSequence:=false;
|
||||
AChar:=0;
|
||||
AScan:=0;
|
||||
if St='' then
|
||||
exit;
|
||||
NPT:=RootTree[ord(St[1])];
|
||||
if not assigned(NPT) then
|
||||
exit;
|
||||
for i:=2 to Length(St) do
|
||||
NPT:=RootTree[St[1]];
|
||||
if npt<>nil then
|
||||
begin
|
||||
NPT:=FindChild(ord(St[i]),NPT);
|
||||
if not assigned(NPT) then
|
||||
exit;
|
||||
end;
|
||||
if not NPT^.CanBeTerminal then
|
||||
exit
|
||||
else
|
||||
begin
|
||||
FindSequence:=true;
|
||||
AScan:=NPT^.ScanValue;
|
||||
AChar:=NPT^.CharValue;
|
||||
for i:=2 to Length(St) do
|
||||
begin
|
||||
NPT:=FindChild(ord(St[i]),NPT);
|
||||
if NPT=nil then
|
||||
exit;
|
||||
end;
|
||||
if NPT^.CanBeTerminal then
|
||||
begin
|
||||
FindSequence:=true;
|
||||
AScan:=NPT^.ScanValue;
|
||||
AChar:=NPT^.CharValue;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
type key_sequence=packed record
|
||||
char,scan:byte;
|
||||
st:string[7];
|
||||
end;
|
||||
|
||||
const key_sequences:array[0..211] 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:kbEsc;st:#27'[0~'), {if linux keyboard patched, escape
|
||||
returns this}
|
||||
(char:0;scan:kbHome;st:#27'[1~'), {linux}
|
||||
(char:0;scan:kbIns;st:#27'[2~'), {linux,Eterm}
|
||||
(char:0;scan:kbDel;st:#27'[3~'), {linux,Eterm}
|
||||
(char:0;scan:kbEnd;st:#27'[4~'), {linux,Eterm}
|
||||
(char:0;scan:kbPgUp;st:#27'[5~'), {linux,Eterm}
|
||||
(char:0;scan:kbPgDn;st:#27'[6~'), {linux,Eterm}
|
||||
(char:0;scan:kbHome;st:#27'[7~'), {Eterm}
|
||||
(char:0;scan:kbF1;st:#27'[11~'), {Eterm}
|
||||
(char:0;scan:kbF2;st:#27'[12~'), {Eterm}
|
||||
(char:0;scan:kbF3;st:#27'[13~'), {Eterm}
|
||||
(char:0;scan:kbF4;st:#27'[14~'), {Eterm}
|
||||
(char:0;scan:kbF5;st:#27'[15~'), {xterm,Eterm,gnome}
|
||||
(char:0;scan:kbF6;st:#27'[17~'), {linux,xterm,Eterm,konsole,gnome}
|
||||
(char:0;scan:kbF7;st:#27'[18~'), {linux,xterm,Eterm,konsole,gnome}
|
||||
(char:0;scan:kbF8;st:#27'[19~'), {linux,xterm,Eterm,konsole,gnome}
|
||||
(char:0;scan:kbF9;st:#27'[20~'), {linux,xterm,Eterm,konsole,gnome}
|
||||
(char:0;scan:kbF10;st:#27'[21~'), {linux,xterm,Eterm,konsole,gnome}
|
||||
(char:0;scan:kbF11;st:#27'[23~'), {linux,xterm,Eterm,konsole,gnome}
|
||||
(char:0;scan:kbF12;st:#27'[24~'), {linux,xterm,Eterm,konsole,gnome}
|
||||
(char:0;scan:kbShiftF3;st:#27'[25~'), {linux}
|
||||
(char:0;scan:kbShiftF4;st:#27'[26~'), {linux}
|
||||
(char:0;scan:kbShiftF5;st:#27'[28~'), {linux}
|
||||
(char:0;scan:kbShiftF6;st:#27'[29~'), {linux}
|
||||
(char:0;scan:kbShiftF7;st:#27'[31~'), {linux}
|
||||
(char:0;scan:kbShiftF8;st:#27'[32~'), {linux}
|
||||
(char:0;scan:kbShiftF9;st:#27'[33~'), {linux}
|
||||
(char:0;scan:kbShiftF10;st:#27'[34~'), {linux}
|
||||
(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: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:kbCtrlIns;st:#27'[2;5~'), {xterm}
|
||||
(char:0;scan:kbCtrlDel;st:#27'[3;5~'), {xterm}
|
||||
(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:kbAltF6;st:#27#27'[17~'),
|
||||
(char:0;scan:kbAltF7;st:#27#27'[18~'),
|
||||
(char:0;scan:kbAltF8;st:#27#27'[19~'),
|
||||
(char:0;scan:kbAltF9;st:#27#27'[20~'),
|
||||
(char:0;scan:kbAltF10;st:#27#27'[21~'),
|
||||
(char:0;scan:kbAltF11;st:#27#27'[23~'),
|
||||
(char:0;scan:kbAltF12;st:#27#27'[24~'),
|
||||
(char:0;scan:kbUp;st:#27'[A'), {linux,FreeBSD}
|
||||
(char:0;scan:kbDown;st:#27'[B'), {linux,FreeBSD}
|
||||
(char:0;scan:kbRight;st:#27'[C'), {linux,FreeBSD}
|
||||
(char:0;scan:kbLeft;st:#27'[D'), {linux,FreeBSD}
|
||||
(char:0;scan:kbEnd;st:#27'[F'), {FreeBSD}
|
||||
(char:0;scan:kbPgdn;st:#27'[G'), {FreeBSD}
|
||||
(char:0;scan:kbHome;st:#27'[H'), {FreeBSD}
|
||||
(char:0;scan:kbPgup;st:#27'[I'), {FreeBSD}
|
||||
(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: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:kbShiftEnd;st:#27'[1;2F'), {xterm}
|
||||
(char:0;scan:kbShiftHome;st:#27'[1;2H'), {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:kbCtrlEnd;st:#27'[1;5F'), {xterm}
|
||||
(char:0;scan:kbCtrlHome;st:#27'[1;5H'), {xterm}
|
||||
(char:0;scan:kbAltUp;st:#27#27'[A'),
|
||||
(char:0;scan:kbAltDown;st:#27#27'[B'),
|
||||
(char:0;scan:kbAltLeft;st:#27#27'[D'),
|
||||
(char:0;scan:kbAltRight;st:#27#27'[C'),
|
||||
(char:0;scan:kbAltPgUp;st:#27#27'[5~'),
|
||||
(char:0;scan:kbAltPgDn;st:#27#27'[6~'),
|
||||
(char:0;scan:kbAltEnd;st:#27#27'[4~'),
|
||||
(char:0;scan:kbAltHome;st:#27#27'[1~'),
|
||||
(char:0;scan:kbAltIns;st:#27#27'[2~'),
|
||||
(char:0;scan:kbAltDel;st:#27#27'[3~'),
|
||||
(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}
|
||||
(char:0;scan:kbHome;st:#27'OF'), {some xterm configurations}
|
||||
(char:0;scan:kbEnd;st:#27'OH'), {some xterm configurations}
|
||||
(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: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:kbAltF1;st:#27#27'OP'),
|
||||
(char:0;scan:kbAltF2;st:#27#27'OQ'),
|
||||
(char:0;scan:kbAltF3;st:#27#27'OR'),
|
||||
(char:0;scan:kbAltF4;st:#27#27'OS'),
|
||||
(char:0;scan:kbAltF5;st:#27#27'Ot'),
|
||||
(char:0;scan:kbAltF6;st:#27#27'Ou'),
|
||||
(char:0;scan:kbAltF7;st:#27#27'Ov'),
|
||||
(char:0;scan:kbAltF8;st:#27#27'Ol'),
|
||||
(char:0;scan:kbAltF9;st:#27#27'Ow'),
|
||||
(char:0;scan:kbAltF10;st:#27#27'Ox'),
|
||||
(char:0;scan:kbAltF11;st:#27#27'Oy'),
|
||||
(char:0;scan:kbAltF12;st:#27#27'Oz'),
|
||||
(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:kbAltLeft;st:#27#27'OD'),
|
||||
{ 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')
|
||||
);
|
||||
|
||||
procedure LoadDefaultSequences;
|
||||
|
||||
var i:cardinal;
|
||||
|
||||
begin
|
||||
AddSpecialSequence(#27'[M',@GenMouseEvent);
|
||||
{Unix backspace/delete hell... Is #127 a backspace or delete?}
|
||||
@ -727,227 +954,9 @@ begin
|
||||
DoAddSequence(#27#127,0,kbAltBack); {Alt+backspace}
|
||||
end;
|
||||
{ all Esc letter }
|
||||
DoAddSequence(#27'A',0,kbAltA);
|
||||
DoAddSequence(#27'a',0,kbAltA);
|
||||
DoAddSequence(#27'B',0,kbAltB);
|
||||
DoAddSequence(#27'b',0,kbAltB);
|
||||
DoAddSequence(#27'C',0,kbAltC);
|
||||
DoAddSequence(#27'c',0,kbAltC);
|
||||
DoAddSequence(#27'D',0,kbAltD);
|
||||
DoAddSequence(#27'd',0,kbAltD);
|
||||
DoAddSequence(#27'E',0,kbAltE);
|
||||
DoAddSequence(#27'e',0,kbAltE);
|
||||
DoAddSequence(#27'F',0,kbAltF);
|
||||
DoAddSequence(#27'f',0,kbAltF);
|
||||
DoAddSequence(#27'G',0,kbAltG);
|
||||
DoAddSequence(#27'g',0,kbAltG);
|
||||
DoAddSequence(#27'H',0,kbAltH);
|
||||
DoAddSequence(#27'h',0,kbAltH);
|
||||
DoAddSequence(#27'I',0,kbAltI);
|
||||
DoAddSequence(#27'i',0,kbAltI);
|
||||
DoAddSequence(#27'J',0,kbAltJ);
|
||||
DoAddSequence(#27'j',0,kbAltJ);
|
||||
DoAddSequence(#27'K',0,kbAltK);
|
||||
DoAddSequence(#27'k',0,kbAltK);
|
||||
DoAddSequence(#27'L',0,kbAltL);
|
||||
DoAddSequence(#27'l',0,kbAltL);
|
||||
DoAddSequence(#27'M',0,kbAltM);
|
||||
DoAddSequence(#27'm',0,kbAltM);
|
||||
DoAddSequence(#27'N',0,kbAltN);
|
||||
DoAddSequence(#27'n',0,kbAltN);
|
||||
DoAddSequence(#27'O',0,kbAltO);
|
||||
DoAddSequence(#27'o',0,kbAltO);
|
||||
DoAddSequence(#27'P',0,kbAltP);
|
||||
DoAddSequence(#27'p',0,kbAltP);
|
||||
DoAddSequence(#27'Q',0,kbAltQ);
|
||||
DoAddSequence(#27'q',0,kbAltQ);
|
||||
DoAddSequence(#27'R',0,kbAltR);
|
||||
DoAddSequence(#27'r',0,kbAltR);
|
||||
DoAddSequence(#27'S',0,kbAltS);
|
||||
DoAddSequence(#27's',0,kbAltS);
|
||||
DoAddSequence(#27'T',0,kbAltT);
|
||||
DoAddSequence(#27't',0,kbAltT);
|
||||
DoAddSequence(#27'U',0,kbAltU);
|
||||
DoAddSequence(#27'u',0,kbAltU);
|
||||
DoAddSequence(#27'V',0,kbAltV);
|
||||
DoAddSequence(#27'v',0,kbAltV);
|
||||
DoAddSequence(#27'W',0,kbAltW);
|
||||
DoAddSequence(#27'w',0,kbAltW);
|
||||
DoAddSequence(#27'X',0,kbAltX);
|
||||
DoAddSequence(#27'x',0,kbAltX);
|
||||
DoAddSequence(#27'Y',0,kbAltY);
|
||||
DoAddSequence(#27'y',0,kbAltY);
|
||||
DoAddSequence(#27'Z',0,kbAltZ);
|
||||
DoAddSequence(#27'z',0,kbAltZ);
|
||||
DoAddSequence(#27'-',0,kbAltMinus);
|
||||
DoAddSequence(#27'=',0,kbAltEqual);
|
||||
DoAddSequence(#27'0',0,kbAlt0);
|
||||
DoAddSequence(#27'1',0,kbAlt1);
|
||||
DoAddSequence(#27'2',0,kbAlt2);
|
||||
DoAddSequence(#27'3',0,kbAlt3);
|
||||
DoAddSequence(#27'4',0,kbAlt4);
|
||||
DoAddSequence(#27'5',0,kbAlt5);
|
||||
DoAddSequence(#27'6',0,kbAlt6);
|
||||
DoAddSequence(#27'7',0,kbAlt7);
|
||||
DoAddSequence(#27'8',0,kbAlt8);
|
||||
DoAddSequence(#27'9',0,kbAlt9);
|
||||
|
||||
DoAddSequence(#27'[[A',0,kbF1); {linux,konsole,xterm}
|
||||
DoAddSequence(#27'[[B',0,kbF2); {linux,konsole,xterm}
|
||||
DoAddSequence(#27'[[C',0,kbF3); {linux,konsole,xterm}
|
||||
DoAddSequence(#27'[[D',0,kbF4); {linux,konsole,xterm}
|
||||
DoAddSequence(#27'[[E',0,kbF5); {linux,konsole}
|
||||
DoAddSequence(#27'[0~',0,kbEsc); {if linux keyboard patched, escape
|
||||
returns this}
|
||||
DoAddSequence(#27'[1~',0,kbHome); {linux}
|
||||
DoAddSequence(#27'[2~',0,kbIns); {linux,Eterm}
|
||||
DoAddSequence(#27'[3~',0,kbDel); {linux,Eterm}
|
||||
DoAddSequence(#27'[4~',0,kbEnd); {linux,Eterm}
|
||||
DoAddSequence(#27'[5~',0,kbPgUp); {linux,Eterm}
|
||||
DoAddSequence(#27'[6~',0,kbPgDn); {linux,Eterm}
|
||||
DoAddSequence(#27'[7~',0,kbHome); {Eterm}
|
||||
DoAddSequence(#27'[11~',0,kbF1); {Eterm}
|
||||
DoAddSequence(#27'[12~',0,kbF2); {Eterm}
|
||||
DoAddSequence(#27'[13~',0,kbF3); {Eterm}
|
||||
DoAddSequence(#27'[14~',0,kbF4); {Eterm}
|
||||
DoAddSequence(#27'[15~',0,kbF5); {xterm,Eterm,gnome}
|
||||
DoAddSequence(#27'[17~',0,kbF6); {linux,xterm,Eterm,konsole,gnome}
|
||||
DoAddSequence(#27'[18~',0,kbF7); {linux,xterm,Eterm,konsole,gnome}
|
||||
DoAddSequence(#27'[19~',0,kbF8); {linux,xterm,Eterm,konsole,gnome}
|
||||
DoAddSequence(#27'[20~',0,kbF9); {linux,xterm,Eterm,konsole,gnome}
|
||||
DoAddSequence(#27'[21~',0,kbF10); {linux,xterm,Eterm,konsole,gnome}
|
||||
DoAddSequence(#27'[23~',0,kbF11); {linux,xterm,Eterm,konsole,gnome}
|
||||
DoAddSequence(#27'[24~',0,kbF12); {linux,xterm,Eterm,konsole,gnome}
|
||||
DoAddSequence(#27'[25~',0,kbShiftF3); {linux}
|
||||
DoAddSequence(#27'[26~',0,kbShiftF4); {linux}
|
||||
DoAddSequence(#27'[28~',0,kbShiftF5); {linux}
|
||||
DoAddSequence(#27'[29~',0,kbShiftF6); {linux}
|
||||
DoAddSequence(#27'[31~',0,kbShiftF7); {linux}
|
||||
DoAddSequence(#27'[32~',0,kbShiftF8); {linux}
|
||||
DoAddSequence(#27'[33~',0,kbShiftF9); {linux}
|
||||
DoAddSequence(#27'[34~',0,kbShiftF10); {linux}
|
||||
DoAddSequence(#27'[2;2~',0,kbShiftIns); {should be the code, but shift+ins
|
||||
is paste X clipboard in many
|
||||
terminal emulators :(}
|
||||
DoAddSequence(#27'[3;2~',0,kbShiftDel); {xterm,konsole}
|
||||
DoAddSequence(#27'[11;2~',0,kbShiftF1); {konsole in vt420pc mode}
|
||||
DoAddSequence(#27'[12;2~',0,kbShiftF2); {konsole in vt420pc mode}
|
||||
DoAddSequence(#27'[13;2~',0,kbShiftF3); {konsole in vt420pc mode}
|
||||
DoAddSequence(#27'[14;2~',0,kbShiftF4); {konsole in vt420pc mode}
|
||||
DoAddSequence(#27'[15;2~',0,kbShiftF5); {xterm}
|
||||
DoAddSequence(#27'[17;2~',0,kbShiftF6); {xterm}
|
||||
DoAddSequence(#27'[18;2~',0,kbShiftF7); {xterm}
|
||||
DoAddSequence(#27'[19;2~',0,kbShiftF8); {xterm}
|
||||
DoAddSequence(#27'[20;2~',0,kbShiftF9); {xterm}
|
||||
DoAddSequence(#27'[21;2~',0,kbShiftF10); {xterm}
|
||||
DoAddSequence(#27'[23;2~',0,kbShiftF11); {xterm}
|
||||
DoAddSequence(#27'[24;2~',0,kbShiftF12); {xterm}
|
||||
DoAddSequence(#27'[2;5~',0,kbCtrlIns); {xterm}
|
||||
DoAddSequence(#27'[3;5~',0,kbCtrlDel); {xterm}
|
||||
DoAddSequence(#27#27'[[A',0,kbAltF1);
|
||||
DoAddSequence(#27#27'[[B',0,kbAltF2);
|
||||
DoAddSequence(#27#27'[[C',0,kbAltF3);
|
||||
DoAddSequence(#27#27'[[D',0,kbAltF4);
|
||||
DoAddSequence(#27#27'[[E',0,kbAltF5);
|
||||
DoAddSequence(#27#27'[17~',0,kbAltF6);
|
||||
DoAddSequence(#27#27'[18~',0,kbAltF7);
|
||||
DoAddSequence(#27#27'[19~',0,kbAltF8);
|
||||
DoAddSequence(#27#27'[20~',0,kbAltF9);
|
||||
DoAddSequence(#27#27'[21~',0,kbAltF10);
|
||||
DoAddSequence(#27#27'[23~',0,kbAltF11);
|
||||
DoAddSequence(#27#27'[24~',0,kbAltF12);
|
||||
DoAddSequence(#27'[A',0,kbUp); {linux,FreeBSD}
|
||||
DoAddSequence(#27'[B',0,kbDown); {linux,FreeBSD}
|
||||
DoAddSequence(#27'[C',0,kbRight); {linux,FreeBSD}
|
||||
DoAddSequence(#27'[D',0,kbLeft); {linux,FreeBSD}
|
||||
DoAddSequence(#27'[F',0,kbEnd); {FreeBSD}
|
||||
DoAddSequence(#27'[G',0,kbPgUp); {FreeBSD}
|
||||
DoAddSequence(#27'[H',0,kbHome); {FreeBSD}
|
||||
DoAddSequence(#27'[H',0,kbPgdn); {FreeBSD}
|
||||
DoAddSequence(#27'[M',0,kbF1); {FreeBSD}
|
||||
DoAddSequence(#27'[N',0,kbF2); {FreeBSD}
|
||||
DoAddSequence(#27'[O',0,kbF3); {FreeBSD}
|
||||
DoAddSequence(#27'[P',0,kbF4); {FreeBSD}
|
||||
DoAddSequence(#27'[Q',0,kbF5); {FreeBSD}
|
||||
DoAddSequence(#27'[R',0,kbF6); {FreeBSD}
|
||||
DoAddSequence(#27'[S',0,kbF7); {FreeBSD}
|
||||
DoAddSequence(#27'[T',0,kbF8); {FreeBSD}
|
||||
DoAddSequence(#27'[U',0,kbF9); {FreeBSD}
|
||||
DoAddSequence(#27'[V',0,kbF10); {FreeBSD}
|
||||
DoAddSequence(#27'[W',0,kbF11); {FreeBSD}
|
||||
DoAddSequence(#27'[X',0,kbF12); {FreeBSD}
|
||||
DoAddSequence(#27'[Z',0,kbShiftTab);
|
||||
|
||||
DoAddSequence(#27'[1;2A',0,kbShiftUp); {xterm}
|
||||
DoAddSequence(#27'[1;2B',0,kbShiftDown); {xterm}
|
||||
DoAddSequence(#27'[1;2C',0,kbShiftRight); {xterm}
|
||||
DoAddSequence(#27'[1;2D',0,kbShiftLeft); {xterm}
|
||||
DoAddSequence(#27'[1;2F',0,kbShiftEnd); {xterm}
|
||||
DoAddSequence(#27'[1;2H',0,kbShiftHome); {xterm}
|
||||
|
||||
DoAddSequence(#27'[1;5A',0,kbCtrlUp); {xterm}
|
||||
DoAddSequence(#27'[1;5B',0,kbCtrlDown); {xterm}
|
||||
DoAddSequence(#27'[1;5C',0,kbCtrlRight); {xterm}
|
||||
DoAddSequence(#27'[1;5D',0,kbCtrlLeft); {xterm}
|
||||
DoAddSequence(#27'[1;5F',0,kbCtrlEnd); {xterm}
|
||||
DoAddSequence(#27'[1;5H',0,kbCtrlHome); {xterm}
|
||||
DoAddSequence(#27#27'[A',0,kbAltUp);
|
||||
DoAddSequence(#27#27'[B',0,kbAltDown);
|
||||
DoAddSequence(#27#27'[D',0,kbAltLeft);
|
||||
DoAddSequence(#27#27'[C',0,kbAltRight);
|
||||
DoAddSequence(#27#27'[5~',0,kbAltPgUp);
|
||||
DoAddSequence(#27#27'[6~',0,kbAltPgDn);
|
||||
DoAddSequence(#27#27'[4~',0,kbAltEnd);
|
||||
DoAddSequence(#27#27'[1~',0,kbAltHome);
|
||||
DoAddSequence(#27#27'[2~',0,kbAltIns);
|
||||
DoAddSequence(#27#27'[3~',0,kbAltDel);
|
||||
DoAddSequence(#27'OA',0,kbUp); {xterm}
|
||||
DoAddSequence(#27'OB',0,kbDown); {xterm}
|
||||
DoAddSequence(#27'OC',0,kbRight); {xterm}
|
||||
DoAddSequence(#27'OD',0,kbLeft); {xterm}
|
||||
DoAddSequence(#27'OF',0,kbHome); {some xterm configurations}
|
||||
DoAddSequence(#27'OH',0,kbEnd); {some xterm configurations}
|
||||
DoAddSequence(#27'OP',0,kbF1); {vt100,gnome,konsole}
|
||||
DoAddSequence(#27'OQ',0,kbF2); {vt100,gnome,konsole}
|
||||
DoAddSequence(#27'OR',0,kbF3); {vt100,gnome,konsole}
|
||||
DoAddSequence(#27'OS',0,kbF4); {vt100,gnome,konsole}
|
||||
DoAddSequence(#27'Ot',0,kbF5); {vt100}
|
||||
DoAddSequence(#27'Ou',0,kbF6); {vt100}
|
||||
DoAddSequence(#27'Ov',0,kbF7); {vt100}
|
||||
DoAddSequence(#27'Ol',0,kbF8); {vt100}
|
||||
DoAddSequence(#27'Ow',0,kbF9); {vt100}
|
||||
DoAddSequence(#27'Ox',0,kbF10); {vt100}
|
||||
DoAddSequence(#27'Oy',0,kbF11); {vt100}
|
||||
DoAddSequence(#27'Oz',0,kbF12); {vt100}
|
||||
DoAddSequence(#27'O2P',0,kbShiftF1); {konsole,xterm}
|
||||
DoAddSequence(#27'O2Q',0,kbShiftF2); {konsole,xterm}
|
||||
DoAddSequence(#27'O2R',0,kbShiftF3); {konsole,xterm}
|
||||
DoAddSequence(#27'O2S',0,kbShiftF4); {konsole,xterm}
|
||||
DoAddSequence(#27#27'OP',0,kbAltF1);
|
||||
DoAddSequence(#27#27'OQ',0,kbAltF2);
|
||||
DoAddSequence(#27#27'OR',0,kbAltF3);
|
||||
DoAddSequence(#27#27'OS',0,kbAltF4);
|
||||
DoAddSequence(#27#27'Ot',0,kbAltF5);
|
||||
DoAddSequence(#27#27'Ou',0,kbAltF6);
|
||||
DoAddSequence(#27#27'Ov',0,kbAltF7);
|
||||
DoAddSequence(#27#27'Ol',0,kbAltF8);
|
||||
DoAddSequence(#27#27'Ow',0,kbAltF9);
|
||||
DoAddSequence(#27#27'Ox',0,kbAltF10);
|
||||
DoAddSequence(#27#27'Oy',0,kbAltF11);
|
||||
DoAddSequence(#27#27'Oz',0,kbAltF12);
|
||||
DoAddSequence(#27#27'OA',0,kbAltUp);
|
||||
DoAddSequence(#27#27'OB',0,kbAltDown);
|
||||
DoAddSequence(#27#27'OC',0,kbAltRight);
|
||||
DoAddSequence(#27#27'OD',0,kbAltLeft);
|
||||
{ xterm default values }
|
||||
{ xterm alternate default values }
|
||||
{ ignored sequences }
|
||||
DoAddSequence(#27'[?1;0c',0,0);
|
||||
DoAddSequence(#27'[?1l',0,0);
|
||||
DoAddSequence(#27'[?1h',0,0);
|
||||
DoAddSequence(#27'[?1;2c',0,0);
|
||||
DoAddSequence(#27'[?7l',0,0);
|
||||
DoAddSequence(#27'[?7h',0,0);
|
||||
for i:=low(key_sequences) to high(key_sequences) do
|
||||
with key_sequences[i] do
|
||||
DoAddSequence(st,char,scan);
|
||||
end;
|
||||
|
||||
function RawReadKey:char;
|
||||
@ -1065,7 +1074,7 @@ begin
|
||||
fpSelect (StdInputHandle+1,@fdsin,nil,nil,nil);
|
||||
end;
|
||||
ch:=ttyRecvChar;
|
||||
NPT:=RootTree[ord(ch)];
|
||||
NPT:=RootTree[ch];
|
||||
if not assigned(NPT) then
|
||||
PushKey(ch)
|
||||
else
|
||||
@ -1130,31 +1139,29 @@ End;
|
||||
|
||||
{$ifdef linux}
|
||||
function ShiftState:byte;
|
||||
var
|
||||
arg,
|
||||
shift : longint;
|
||||
|
||||
var arg:longint;
|
||||
|
||||
begin
|
||||
shift:=0;
|
||||
shiftstate:=0;
|
||||
arg:=6;
|
||||
if fpioctl(StdInputHandle,TIOCLINUX,@arg)=0 then
|
||||
begin
|
||||
if (arg and 8)<>0 then
|
||||
shift:=kbAlt;
|
||||
shiftstate:=kbAlt;
|
||||
if (arg and 4)<>0 then
|
||||
inc(shift,kbCtrl);
|
||||
inc(shiftstate,kbCtrl);
|
||||
{ 2 corresponds to AltGr so set both kbAlt and kbCtrl PM }
|
||||
if (arg and 2)<>0 then
|
||||
shift:=shift or (kbAlt or kbCtrl);
|
||||
shiftstate:=shiftstate or (kbAlt or kbCtrl);
|
||||
if (arg and 1)<>0 then
|
||||
inc(shift,kbShift);
|
||||
inc(shiftstate,kbShift);
|
||||
end;
|
||||
ShiftState:=shift;
|
||||
end;
|
||||
|
||||
procedure force_linuxtty;
|
||||
|
||||
var s:string[15];
|
||||
{ st:stat;}
|
||||
handle:sizeint;
|
||||
thistty:string;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user