2011-08-02 9 views
3

つまり、上下の矢印キーをサポートし、逆の検索を行う場合はctrl-rをサポートする必要があります。私はどこから始めるべきですか?Cでssh機能を備えたコンソールを実装するにはどうすればよいですか?

+0

SSHのすべての機能を使いたいのですか、あるいは単にコマンド履歴を持つことができますか? – Alan

+2

素敵な行編集機能が必要な場合は、表示されている多くのプログラムにこれらの機能を提供するGNU readlineライブラリを調べてください。 –

+0

これらの項目はssh機能ではなく、シェルの機能です(bash/tcsh/zsh)、おそらくreadlineを使って実装しています。 –

答えて

1

答えは、どのように低レベルになりたいかによって決まります。 readlineまたはeditlineを使用すると、高いレベルの回答です。次のレベルを下げるにはlibncursesを使用し、getch()に電話してキーボード入力を読み、それから自分自身で履歴を処理します。

最低レベル(端末用)が実際の入力ストリームのバイトを処理しています。矢印キーは、特定の端末に応じて特定の文字シーケンスを送信します。たとえば、vt100エミュレータは、^ [[上矢印]のA、^ [[下矢印]のBなど]を送信します。これらを読むためには、改行を待つのではなく、すぐに入力を返すように端末の属性を設定する必要があります。これを行うには、termios標準入力モードを無効にする関数を使用します。次に、文字を一度に読み込み、文字(27、91、65)が得られているかどうかを確認し、それが上向き矢印であることを知り、それに応じて応答します。

この低レベルは退屈で壊れやすいですし、別の端末エミュレータを使用している場合は動作しません(あなたが他の端末のための適切な入力シーケンスを取得するためにterminfoを使用することができますが。)

あなたがにいる場合ターミナル(シリアルライン、Xウィンドウ、ビットマップディスプレイなど)よりも低いレベルであれば、答えは再び変化します。

関連する問題