どのようにしてbashのようなタブ補完を実装するのでしょうか?
-
20-09-2019 - |
質問
私は標準入力にどのようにシステムを印刷文字を決定しようとしている - 「入力」それは、ユーザーが削除して、ユーザーがヒットした場合、入力と見なされることができます文字を印字する方法、である。
私はCを使用してことが起こるが、解決策は、言語に依存した場合、私は非常に驚くだろう。
任意の洞察力をありがとう! :D
解決
いくつかの人々はbashが真であるのreadlineを、使用していることを指摘しているが、私は、あなたが本当に求めていることは、あなたが入力したヒットする前に入力したものを参照してくださいすることができているかと思います。
答えはttysのことである。(例:端末)は、端末の入力処理が無効になっている「生モード」へと切り替えることができ、それが入ってくるよう、あなたはすべての文字が表示されますこれはまたの自動エコーを無効にします文字を入力ます。
に、このガイドでは、ファイルまたは端末のから単一の文字を読み込みを参照してください。詳細はます。
他のヒント
、bashはその入力のためのreadlineを使用しています。ソースはこちらの利用可能で、完全なというファイルがあります。 Cます。
あなたの質問に答えるために、私は、彼らが実際に標準入力に印刷されているとは思いません。 Readlineのは、この中に、ユーザが編集している行の内容、および完了印刷用バッファのいくつかの種類が含まれています。ユーザがEnterキーを押すと、バッファの内容が行を読み取りたいと思ったどのプログラムに送信され、およびBashの場合には、標準入力に沿って渡されます。 (Readlineのは、これを行いません - 。単に後で使用するための文字列に値を格納可能性があるのreadlineを使用する他のプログラムを)
これは、入力を処理するためのreadlineライブラリを使用して、readlineのは、歴史と完了を提供しています。
実際の完了を実装するには、キーボード入力の処理へのアクセスが必要とされています。完成は、それによって使用されるバッファを変更することができなければなりません。その後それだけで現在の入力を見て、発見されたものを、完了がチェックについてです。実際の完了論理は、多くの方法で作業することができます。
ここでのreadlineを経由して、タブ補完を実装するC抜粋です。