📄 read_key.pro
字号:
FUNCTION read_key, wait;+; NAME:; READ_KEY; PURPOSE:; To read a keystroke and return its ASCII equivalent; EXPLANATION:; If an ESCAPE sequence was produced and the sequence is; recognized (e.g. up arrow), then a code is returned.;; This functionality is mostly made obsolete by the addition of the; ESCAPE and KEY_NAME keywords to GET_KBRD in IDL V6.2;; CALLING SEQUENCE:; key = READ_KEY(Wait);; INPUTS:; Wait - The wait flag. If non-zero, execution is halted until a; key is struck. If zero, execution returns immediately and; a zero is returned if there was no keystroke waiting in the; keyboard buffer. If not specified, zero is assumed.;; OUTPUT:; Returned - The key struck. The ASCII code for non-escape sequences.; Escape sequence equivalents:; Up Arrow -- 128; Down Arrow -- 130; Left Arrow -- 129; Right Arrow -- 131; Else -- 0;; The return value is a byte value.;; MODIFICATION HISTORY:; Written by Michael R. Greason, STX, 22 June 1990.; Rewritten for a SUN workstation. MRG, STX, 23 August 1990.; Converted to IDL V5.0 W. Landsman September 1997;-; Check the input parameter.;IF (n_params(0) LT 1) THEN wait = 0;; Get the keystroke.;key = byte(get_kbrd(wait))key = key[0];; If it is an ESCAPE, get the rest of it and ; then decode it.;IF (key EQ 27B) THEN BEGIN st = bytarr(10);; Get the rest of the escape sequence.; i = 0 REPEAT BEGIN key = byte(get_kbrd(0)) st[i] = key[0] i = i + 1 ENDREP UNTIL (st[i-1] EQ 0B);; Decode the escape sequence.; CASE string(st) OF '[A' : key = 128B '[B' : key = 130B '[D' : key = 129B '[C' : key = 131B ELSE : BEGIN IF (i GT 1) THEN key = 0B ELSE key = 27B END ENDCASEENDIF;; If it is a CSI, get the rest of it and ; then decode it.;IF (key EQ '9B'XB) THEN BEGIN st = bytarr(10);; Get the rest of the sequence.; i = 0 REPEAT BEGIN key = byte(get_kbrd(0)) st[i] = key[0] i = i + 1 ENDREP UNTIL (st[i-1] EQ 0B);; Decode the sequence.; CASE string(st) OF 'A' : key = 128B 'B' : key = 130B 'D' : key = 129B 'C' : key = 131B ELSE : BEGIN IF (i GT 1) THEN key = 0B ELSE key = '9B'XB END ENDCASEENDIF;; If it is a SS3, get the rest of it and ; then decode it.;IF (key EQ '8F'XB) THEN BEGIN st = bytarr(10);; Get the rest of the sequence.; i = 0 REPEAT BEGIN key = byte(get_kbrd(0)) st[i] = key[0] i = i + 1 ENDREP UNTIL (st[i-1] EQ 0B);; Decode the sequence.; CASE string(st) OF ELSE : BEGIN IF (i GT 1) THEN key = 0B ELSE key = '8F'XB END ENDCASEENDIF;RETURN, keyEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -