如何在Bash中禁用箭头键

时间:2016-09-20 17:43:37

标签: fortran prompt arrow-keys stty

我在Windows 7 64位操作系统上的Cygwin mintty终端中使用Bash(版本4.3.46(6))shell,并尝试使用Fortran 90制作简单的CUI应用程序。我的简化源代码是这样的。

integer :: i
character ( len = 500 ) :: mybuffer
do
  write ( * , '(a)' , advance = 'no' ) 'PROMPT> '
  read ( * , '(a)' ) mybuffer
  write ( * , '(500Z3)' ) ( iachar ( mybuffer ( i : i ) ) , i = 1 , 6 )
end do
end

第6行的write语句是可选的(仅用于检查)。

这似乎适用于可打印字符。我观察到来自stdin的字符串在终端上回显,字符串保存在变量mybuffer中。

但是当我输入箭头键时,会发生同样的回声,这一次没有希望。

在我的终端中,我已检查(使用此源代码)上箭头键代码为\x1B\x5B\x41,即\e[A
然后我认为这可能是stty((GNU coreutils)8.25)的问题,所以我试过

stty --help

并在帮助中找到了这个(我认为是最相关的)部分。

Local settings:
   [-]crterase   echo erase characters as backspace-space-backspace
 * crtkill       kill all line by obeying the echoprt and echoe settings
 * -crtkill      kill all line by obeying the echoctl and echok settings
 * [-]ctlecho    echo control characters in hat notation ('^c')
   [-]echo       echo input characters
 * [-]echoctl    same as [-]ctlecho
   [-]echoe      same as [-]crterase
   [-]echok      echo a newline after a kill character
 * [-]echoke     same as [-]crtkill
   [-]echonl     echo newline even if not echoing other characters
 * [-]flusho     discard output
   [-]icanon     enable special characters: erase, kill, werase, rprnt
   [-]iexten     enable non-POSIX special characters
   [-]isig       enable interrupt, quit, and suspend special characters
   [-]noflsh     disable flushing after interrupt and quit special characters
 * [-]tostop     stop background jobs that try to write to the terminal

因此我尝试在fortran90源代码中指定这些选项。

call system ( '/usr/bin/stty -echo' )
read ( * , '(a)' ) mybuffer
call system ( '/usr/bin/stty echo' )

但它们似乎都不起作用。

有人请解释我如何禁用箭头键回显。

0 个答案:

没有答案