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つの質問があります。
- 通常、サーバーに接続すると、$ DISPLAY環境変数のシリアル番号が新しい値を取得します。だからzkbdが起動し始め、すべてのコントロールキーを押す必要があります。キーシーケンスは必ず$ DISPLAYに依存しますか?
- スクリーンセッションでサーバーに接続すると、$ TERM環境変数がに設定されます
screen
。ただし、接続しているシステムによっては、一部のキーの順序が異なります(例:F1またはF1^[[11~
)^[OP
。異なるマッピングを区別するには、zkbdファイル名をどのように指定する必要がありますか?
答え1
TERM=screen
スクリーンプログラムには、単に使用するのではなく、設定で使用できる機能があります。その他値TERM
。これは、完全なncursesターミナルデータベースをインストールし、次のものを使用したと仮定します。TERM
外部実際の端末に対応する画面です。
指定されたものに対してTERM
端末データベースに対応する "screen.$TERM" エントリがある場合、screen は以下を使用します。それ。 ncursesターミナルデータベースには、ターミナルセットの実際の動作と一致するさまざまなものがありますTERM=xterm
。
画面.Eterm、
スクリーンGNOME、
スクリーンコンソール、
screen.konsole-256color、
screen.linux、
フィルタ.mlterm、
screen.mlterm-256color、
スクリーン.mrxvt、
スクリーンパテ、
screen.putty-256color、
スクリーン.rxvt、
screen.teraterm、
screen.vte、
screen.vte-256color、
screen.xterm-256color、
screen.xterm-new、
screen.xterm-r6、
screen.xterm-xfree86。
ターミナルデータベースを有効にした後は、特別な/魔法の設定ファイルは必要ありません。また、どのファイルを使用するかをサーバーにどのように通知できますか?実際の情報は顧客に関するものです。知る実際にどの端末エミュレータを使用していますか?
zsh
この情報はアレイで直接使用できます$terminfo
。
追加資料:
- なぜ「xterm」に設定されたTERMを使用しないのですか?
- キーバインディング(議論を参照
$terminfo[]
)