0

Windows 7 64 ビット OS の Cygwin mintty ターミナルで Bash(バージョン 4.3.46(6)) シェルを使用し、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行目の書き込みステートメントはオプションです(チェックのためだけに)。

これは、印刷可能な文字ではうまくいくようです。stdin からの文字列が端末にエコー バックされ、文字列が variable に保存されることを確認しました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' )

しかし、それらのどれも機能していないようでした。

矢印キーからのエコーバックを無効にする方法を誰か説明してください。

4

0 に答える 0