7

システムが文字を標準入力に印刷する方法、つまり、ユーザーが削除でき、ユーザーが「Enter」を押した場合に入力と見なされる文字を印刷する方法を決定しようとしています。

私はたまたまCを使用していますが、ソリューションが言語に依存しているとしたら、非常に驚​​きます。

洞察をありがとう!:D

4

4 に答える 4

5

inyが言うように、bashは入力にreadlineを使用します。ソースはここから入手でき、complete.cというファイルがあります。

あなたの質問に答えるために、私はそれらが実際に標準入力に印刷されているとは思いません。Readlineには、ユーザーが編集している行の内容のためのある種のバッファーが含まれており、完了がこれに出力されます。ユーザーがEnterキーを押すと、バッファーの内容が行を読み取りたいプログラムに送信され、bashの場合は標準入力に渡されます。(Readlineはこれを行いません-readlineを使用する他のプログラムは、後で使用するために値を文字列に格納するだけかもしれません。)

于 2009-10-07T17:59:21.317 に答える
4

何人かの人々はbashがreadlineを使用していると指摘していますが、それは本当ですが、あなたが本当に求めているのは、Enterキーを押す前に入力した内容をどのように確認できるかということだと思います。

答えは、ttys(つまり、ターミナル)を「rawモード」に切り替えることができるということです。このモードでは、ターミナルの入力処理が無効になり、入力されたすべての文字が表示されます。これにより、入力された文字の自動エコーも無効になります。

詳細については、ファイルまたは端末からの単一文字の読み取りに関するこのガイドを参照してください。

于 2009-10-07T18:05:15.563 に答える
1

readlineライブラリを使用して入力を処理し、readlineは履歴と完了を提供します。

実際に補完を実装するには、キーボード入力処理へのアクセスが必要です。補完は、それによって使用されるバッファーを変更できる必要があります。その後は、現在の入力を確認し、どの補完が見つかったかを確認するだけです。実際の完了ロジックはさまざまな方法で機能します。

于 2009-10-07T17:51:29.620 に答える
1

これは、readlineを介してタブ補完を実装するCスニペットです。

http://github.com/rupa/el

于 2009-10-08T08:51:42.220 に答える