From c32bc3a22a4fe586f37e8f113516b53d0c6a96eb Mon Sep 17 00:00:00 2001 From: florian Date: Tue, 16 Aug 2011 18:58:50 +0000 Subject: [PATCH] * patch by Nikolay Nikolov to support Alt-Tab and Ctrl-Tab on the linux console, resolves #19247 git-svn-id: trunk@18225 - --- rtl/unix/keyboard.pp | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/rtl/unix/keyboard.pp b/rtl/unix/keyboard.pp index e955dad105..d34215d071 100644 --- a/rtl/unix/keyboard.pp +++ b/rtl/unix/keyboard.pp @@ -742,7 +742,7 @@ type key_sequence=packed record st:string[7]; end; -const key_sequences:array[0..276] of key_sequence=( +const key_sequences:array[0..277] of key_sequence=( (char:0;scan:kbAltA;st:#27'A'), (char:0;scan:kbAltA;st:#27'a'), (char:0;scan:kbAltB;st:#27'B'), @@ -982,6 +982,7 @@ const key_sequences:array[0..276] of key_sequence=( (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} @@ -1432,6 +1433,7 @@ begin {main} { Handle Ctrl-, but not AltGr- } if ((SState and kbCtrl)<>0) and ((SState and kbAlt) = 0) then case MyScan of + kbShiftTab: MyScan := kbCtrlTab; kbHome..kbDel : { cArrow } MyScan:=CtrlArrow[MyScan]; kbF1..KbF10 : { cF1-cF10 } @@ -1442,6 +1444,7 @@ begin {main} { Handle Alt-, but not AltGr } else if ((SState and kbAlt)<>0) and ((SState and kbCtrl) = 0) then case MyScan of + kbShiftTab: MyScan := kbAltTab; kbHome..kbDel : { AltArrow } MyScan:=AltArrow[MyScan]; kbF1..KbF10 : { aF1-aF10 } @@ -1520,11 +1523,27 @@ begin {main} if not again then begin MyScan:=EvalScan(ord(MyChar)); - if ((SState and kbAlt)<>0) and ((SState and kbCtrl) = 0) then + if ((SState and kbCtrl)<>0) and ((SState and kbAlt) = 0) then begin - if MyScan in [$02..$0D] then - inc(MyScan,$76); - MyChar:=chr(0); + if MyChar=#9 then + begin + MyChar:=#0; + MyScan:=kbCtrlTab; + end; + end + else if ((SState and kbAlt)<>0) and ((SState and kbCtrl) = 0) then + begin + if MyChar=#9 then + begin + MyChar:=#0; + MyScan:=kbAltTab; + end + else + begin + if MyScan in [$02..$0D] then + inc(MyScan,$76); + MyChar:=chr(0); + end; end else if (SState and kbShift)<>0 then if MyChar=#9 then