Ruby でシェルを作成しようとしています。タブ補完を実装するために、WinAPI 関数getch
を使用してユーザーから一度に 1 文字ずつ読み取り、タブをチェックしています。
これに関する問題は、バックスペースキーです。
- カーソルをプロンプトよりも後ろに移動します(たとえば、 prompt
hello>
を使用すると、ユーザーはカーソルを にバックスペースできますh
。最後のスペースで停止したいと思います。 - ユーザーのテキストがコンソールの次の行にオーバーフローすると、バックスペースは前の行に戻りません。
(これらの動作は両方とも設計によるものです。)
これらの問題に対する私の想像上の解決策は、カーソルの動きを制御することです。カーソルがどこにあるかを知り、移動できるようにする必要があります。
Linux では ANSI エスケープ シーケンスを使用しますが、これらは Windows コンソールではサポートされていません。
私はWinAPIを調べて、これを可能にする関数を見つけようとしましたが、見つけることができGetConsoleCursorInfo
たのは、カーソルのサイズと可視性のみを返す関数だけでした.
プリミティブ関数以外に Win32API クラスを使用するのは絶望的であるため、例をいただければ幸いです。
ありがとう。