--- gforth/ekey.fs 1999/08/29 15:45:19 1.1 +++ gforth/ekey.fs 2001/10/26 11:53:21 1.5 @@ -16,7 +16,7 @@ \ You should have received a copy of the GNU General Public License \ along with this program; if not, write to the Free Software -\ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. \ this implementation of EKEY just translates VT100/ANSI escape @@ -41,9 +41,10 @@ keycode k-up keycode k-down keycode k-home keycode k-end -\ keycode k-prior \ note: captured by xterm -\ keycode k-next \ note: captured by xterm +keycode k-prior \ note: captured by xterm +keycode k-next \ note: captured by xterm keycode k-insert \ not in pfe +127 constant k-delete \ not an escape sequence on my xterm, so use ASCII code \ function/keypad keys keycode k1 keycode k2 @@ -57,20 +58,20 @@ keycode k9 keycode k10 keycode k11 \ not in pfe keycode k12 \ not in pfe -\ shifted function/keypad keys have the same key sequences (in xterm) -\ and pfe gives the same keycodes; so what are these keycodes good for? -\ keycode s-k1 -\ keycode s-k2 -\ keycode s-k3 -\ keycode s-k4 -\ keycode s-k5 -\ keycode s-k6 -\ keycode s-k7 -\ keycode s-k8 -\ keycode s-k9 -\ keycode s-k10 -\ keycode s-k11 \ not in pfe -\ keycode s-k12 \ not in pfe +\ shifted fuinction keys (don't work in xterm (same as unshifted, but +\ s-k1..s-k8 work in the Linux console) +keycode s-k1 +keycode s-k2 +keycode s-k3 +keycode s-k4 +keycode s-k5 +keycode s-k6 +keycode s-k7 +keycode s-k8 +keycode s-k9 +keycode s-k10 +keycode s-k11 \ not in pfe +keycode s-k12 \ not in pfe \ helper word \ print a key sequence: @@ -142,6 +143,10 @@ create ekey-buffer 8 chars allot then ( xt addr u ) nextname alias ; +\ nac02dec1999 exclude the escape sequences if we are using crossdoc.fs to generate +\ a documentation file. Do this because key sequences [ and OR here clash with +\ standard names and so prevent them appearing in the documentation. +[IFUNDEF] put-doc-entry get-current esc-sequences set-current \ esc sequences (derived by using key-sequence in an xterm) @@ -152,8 +157,8 @@ get-current esc-sequences set-current ' k-down s" [B" esc-sequence ' k-home s" [H" esc-sequence ' k-end s" [F" esc-sequence -\ ' k-prior s" [5~" esc-sequence \ from linux console -\ ' k-next s" [6~" esc-sequence \ from linux console +' k-prior s" [5~" esc-sequence +' k-next s" [6~" esc-sequence ' k-insert s" [2~" esc-sequence ' k1 s" OP" esc-sequence @@ -169,19 +174,40 @@ get-current esc-sequences set-current ' k11 s" [23~" esc-sequence ' k12 s" [24~" esc-sequence +\ esc sequences from Linux console: + +' k1 s" [[A" esc-sequence +' k2 s" [[B" esc-sequence +' k3 s" [[C" esc-sequence +' k4 s" [[D" esc-sequence +' k5 s" [[E" esc-sequence +' k-delete s" [3~" esc-sequence +' k-home s" [1~" esc-sequence +' k-end s" [4~" esc-sequence + +' s-k1 s" [25~" esc-sequence +' s-k2 s" [26~" esc-sequence +' s-k3 s" [28~" esc-sequence +' s-k4 s" [29~" esc-sequence +' s-k5 s" [31~" esc-sequence +' s-k6 s" [32~" esc-sequence +' s-k7 s" [33~" esc-sequence +' s-k8 s" [34~" esc-sequence + set-current +[ENDIF] : clear-ekey-buffer ( -- ) ekey-buffer 0 ekey-buffered 2! ; -: ekey ( -- u ) +: ekey ( -- u ) \ facility-ext e-key key dup #esc = if drop clear-ekey-buffer esc-prefix then ; -: ekey>char ( u -- u false | c true ) +: ekey>char ( u -- u false | c true ) \ facility-ext e-key-to-char dup 256 u< ; : esc? ( -- flag ) recursive @@ -199,7 +225,9 @@ set-current then true ; -: ekey? ( -- flag ) +: ekey? ( -- flag ) \ facility-ext e-key-question + \G Return @code{true} if a keyboard event is available (use + \G @code{ekey} to receive the event), @code{false} otherwise. key? if key dup #esc =