パテでGNUスクリーンコントロールキーの組み合わせを有効にするには?

パテでGNUスクリーンコントロールキーの組み合わせを有効にするには?

sshを使用してLinuxボックスにアクセスしていますputty

走っていないときは、キーの組み合わせが正しく機能しますscreen。ただし、セッションではCtrlキーの組み合わせは機能しませんscreen。実際、a-Ctrlany key組み合わせなしの同じキー登録と同じですCtrl

Ctrl自分の端末に送信された文字を見つけるために組み合わせを入力し、入力してそれを知ることができVますCtrlkey

たとえば、Ctrl- (左矢印)を入力すると^[[Dscreenscreen256カラー用語)が表示されます。私に同じ結果を与えた。

奇妙なことに、Altこのkey組み合わせはうまく機能します。

特に"前方の単語"と"後方の単語"キーバインディングをscreen

さまざまな端末を使用できるように修正してみました.inputrc。だから私の.inputrc外観は次のとおりです。

$if term=xterm
    'xxx' : forward-word # xxx key gotten from Ctrl-V
    'xxx' : backward-word
$endif
$if term=screen-256color
...
...

TERMbashまた、プロファイル設定TERMとキーボード端末マッピングを設定して、.screenrcさまざまな端末を試してみましたPutty。明らかなlinuxxtermは動作しません。しかし、明らかな理由で、私は設定のすべての置換を試みませんでした。

追加情報:

修正しましたが、方向キーの組み合わせが唯一動作しませんでした。展開バージョンはRHEL 6です。

.screenrc:

term xterm # tried other terms as well
shell -$SHELL # login shell to reload configs
caption string "%w"
hardstatus alwayslastline "%{b kw}%H %{r}%1` %{w}| %{g}%c %{w}| %{y}%d.%m.%Y %{w}| %{g}%l %{w}| %{-b kw}%u %-Lw%{= rW}%50> %n%f %t %{-}%+Lw%<"
vbell off
defscrollback 5000

PuttyのデフォルトのキーボードモードESC [n~

パテマニュアルでは:「基本モードでは、ESC [n〜で示されているファンクションキーはESC [11〜、ESC [12〜、etc.」)のようなシーケンスを生成します。」)これはデジタル端末の一般的な動作と一致します。

興味深いのは、実際に送信されるものですPutty(最初の答えに従って)。https://superuser.com/questions/342848/cant-get-keyboard-to-work-Corrightly-in-putty)、はい

^[0D : left-arrow
^[[D : Ctrl-{left-arrow}

お互いに違うのでputty問題にならないようですが?

FWIW、Puttyでアプリケーションカーソルキーモード設定を変更してみましたが、役に立ちませんでした。私もそれを試してみましたが、tmux同じ問題に直面しました。

ベストアンサー1

デフォルト設定では、PuTTYはカーソルキーを次に送信します。ノーマルたとえば、^[OA画面上でカーソルキーを次に設定したときのモードです。アプリケーションモード(例:^[[A

これは、キーボードを開くために画面にエスケープシーケンスを送信することによって行われます(termcap ks、terminfoから)。smkx数字キーパッドとカーソルキーの両方が機能に存在するため、そのキーのアプリケーションモードを開くと発生しますks/smkx。端末がある場合は、端末を初期化するときにこの画面機能を使用してください。 screenはまた、termcap関数(CS設定されている場合)に文字列を送信して後続のアクションを実行します。これは、元のデザインがキーボードのみの初期化された端末記述を使用することであったことを示唆していますks/smkx

キーバインディングはカーソルキーから送信された文字列を期待しているため、これらの違いがわかります。ノーマルモデル。カーソルキーを変更する部分を省略するように画面の端末記述を変更する場合は、これらのバインディングを引き続き使用できます。

たとえば、次のようにできます。

infocmp screen >foo
vi foo

割り当てを変更します。

smkx=\E[?1h\E=,

到着

smkx=\E=,

それから

tic foo

修正された説明をコンパイルします。 (rootではない)ユーザーとしてこれを行うと、ticはコンパイルされた説明を~/.terminfoディレクトリに配置します。このアプローチには欠点があり、tputキーバインディング情報を取得するのに最適です。しかし、簡単です。

追加資料:

おすすめ記事