bash/readline でターミナルの補完候補を「クリーンアップ」することは可能ですか?

bash/readline でターミナルの補完候補を「クリーンアップ」することは可能ですか?

zsh を使用していて、tabコマンド、パス名、オプションなどを補完する場合、複数の候補が一致すると、プロンプトの下に候補が表示されます。
候補を選択すると、zsh は次のようにターミナルから候補リストを削除します。

ここに画像の説明を入力してください

画像ソース

対照的に、bash が補完候補を提供する場合は、リストを出力して新しいプロンプトに戻ります。

ここに画像の説明を入力してください

画像ソース
私が使用したことのない提案は価値がなく、ターミナルに「ノイズ」を増やすだけなので、zsh の動作の方が私には好ましいです。
このように bash/readline を zsh のように動作するように設定することは可能ですか?

答え1

簡単に言うと、それは可能ですが、.inputrcバインディングとしては複雑です。

長文: コメントで示唆されているように、できたbash プロンプトと readline バインディングで次のような操作を実行します。

カーソルを保存/復元しても効果はありません。画面の残りの部分を確実にクリアできるのは、Enter選択を完了するために押すときだけだからです。

に制御を渡してしまうとaccept-line、画面の残りを消去するには遅すぎます。readline に複数の操作を実行させるために、一連の実際のキーバインディングとアドホックなキーバインディングを定義することは可能です (ただし複雑です)。たとえば、

しかし、この方法では、bashに文字を送信し、readlineにコマンドを発行することしかできません。readlineのコマンドはどれも

printf '\033[J'

クリアする残り画面の。最も近いのはreadlineの組み込みclear-screenないバインディングは次のようにする必要があります

  • beginning-of-line
  • 入れる " printf '\033[J';"
  • end-of-line
  • accept-line

これはend-of-linereadlineの奇妙な動作を回避するものです。Enter どこでもカーソルが行の途中にある場合は、入力した内容の一部だけが表示されます (ただし、bash は文字列全体を取得します)。

関連情報