サーバーでzkbd(zshキーバインディング)を設定するには?

サーバーでzkbd(zshキーバインディング)を設定するには?

Linuxサーバーにzshシェルがあり、他のシステムのスクリーンセッションでサーバーに接続します。コントロールキー(たとえば、homeやend)が正しく機能するようにします。

zsh は GNU Readline ライブラリを使用しないため、端末シーケンスを zsh コマンドにマップすることを担当します。まず、zkbdを使用して各キーストロークが送信された順序を見つけ、それを正しいコマンドにマップしました。これが.zshrcにあるものです:

autoload zkbd
[ ! -f "${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}" ] && zkbd
source "${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}"

[ -n "${key[Backspace]}" ] && bindkey "${key[Backspace]}" backward-delete-char
[ -n "${key[Home]}" ] && bindkey "${key[Home]}" beginning-of-line
...

今、2つの質問があります。

  1. 通常、サーバーに接続すると、$ DISPLAY環境変数のシリアル番号が新しい値を取得します。だからzkbdが起動し始め、すべてのコントロールキーを押す必要があります。キーシーケンスは必ず$ DISPLAYに依存しますか?
  2. スクリーンセッションでサーバーに接続すると、$ TERM環境変数がに設定されますscreen。ただし、接続しているシステムによっては、一部のキーの順序が異なります(例:F1またはF1 ^[[11~^[OP。異なるマッピングを区別するには、zkbdファイル名をどのように指定する必要がありますか?

答え1

TERM=screenスクリーンプログラムには、単に使用するのではなく、設定で使用できる機能があります。その他TERM。これは、完全なncursesターミナルデータベースをインストールし、次のものを使用したと仮定します。TERM 外部実際の端末に対応する画面です。

指定されたものに対してTERM端末データベースに対応する "screen.$TERM" エントリがある場合、screen は以下を使用します。それ。 ncursesターミナルデータベースには、ターミナルセットの実際の動作と一致するさまざまなものがありますTERM=xterm画面.EtermスクリーンGNOMEスクリーンコンソールscreen.konsole-256colorscreen.linuxフィルタ.mltermscreen.mlterm-256colorスクリーン.mrxvtスクリーンパテscreen.putty-256colorスクリーン.rxvtscreen.teratermscreen.vtescreen.vte-256colorscreen.xterm-256colorscreen.xterm-newscreen.xterm-r6screen.xterm-xfree86

ターミナルデータベースを有効にした後は、特別な/魔法の設定ファイルは必要ありません。また、どのファイルを使用するかをサーバーにどのように通知できますか?実際の情報は顧客に関するものです。知る実際にどの端末エミュレータを使用していますか?

zshこの情報はアレイで直接使用できます$terminfo

追加資料:

関連情報