無駄なハッキングの終わりに、私はこれに気づきました。 。 。さまざまなメタキーを使用できるように、HHKキーボードを正しくマッピングする必要があります。そしてそう私の地獄旅行は始まった。
ダグ・パルマー、信頼できないXKB構成ガイド
アプリケーションのキーボードモードが有効になっている場合(例:を介して)、echoti smkx
数字キーパッドからVT220スタイルのエスケープシーケンスをエクスポートするようにKonsoleを設定しようとしています。特に説明した条件では、次の制御シーケンスを出力する必要があります。
http://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-VT220-Style-Function-Keys
TERM
環境変数を変更することは、端末機能に対してシェルに横たわっているのと同じであるため、一般的に避けるべきであることを認識することが重要です。簡単な設定ではTERM=xterm-vt220
十分ではなく、予期しない動作が発生する可能性があります。
単純だが部分的な解決策があります。 Konsoleを使用すると、ターミナルキーバインディングをファイルに整理できます.keytab
。次の追加は有効で、次の場所に保存されます.local/share/konsole/VT220.keytab
。
keyboard "VT220"
key 0+KeyPad+AppCursorKeys : "\EOp"
key 1+KeyPad+AppCursorKeys : "\EOq"
key 2+KeyPad+AppCursorKeys : "\EOr"
key 3+KeyPad+AppCursorKeys : "\EOs"
key 4+KeyPad+AppCursorKeys : "\EOt"
key 5+KeyPad+AppCursorKeys : "\EOu"
key 6+KeyPad+AppCursorKeys : "\EOv"
key 7+KeyPad+AppCursorKeys : "\EOw"
key 8+KeyPad+AppCursorKeys : "\EOx"
key 9+KeyPad+AppCursorKeys : "\EOy"
key ++KeyPad+AppCursorKeys : "\EOk"
key *+KeyPad+AppCursorKeys : "\EOj"
key .+KeyPad+AppCursorKeys : "\EOn"
key -+KeyPad+AppCursorKeys : "\EOm"
key Enter+KeyPad : "\EOM"
これらのキーバインディング(および存在する可能性がある他のキーバインディング)が適用されると、アプリケーションキーボードモードが有効になり、NumLockがオンになっているときとkonsole
同じ制御シーケンスが生成されます。xterm
これらのシーケンスは、数値キーパッドのキー入力を一意に識別して任意の機能をバインドできるため、VT220エミュレーションが必要なアプリケーションに役立ちます。
/
私の設定に共通のキーボードキー(Qt :: Key_Slash)がありません。 Konsoleグラフィックキーバインディングエディタは、名前でもテキストでもこのキーへの参照を認識しないようです。.keytab
ファイルに手動で書き込むと、Konsoleはそれを無視し、その行はGUIエディタに表示されません。これにより、キーボードに1つのキーだけを強くプログラムできない非常に面倒な穴が生まれました。
xkb
私は友達と一緒に泥沼に落ちたくありません。もちろん、バニラはxterm
基本的に提供されています。これは、この場合、低レベルでキーバインディングを操作する必要がないことを意味します。代わりに、Konsole(またはQT)は、Xの上にユニークで雪の結晶のように見えることをするようです。
質問:Konsoleで数字キーパッドキーを/
別の制御シーケンスに再バインドできますか?それとも、別のレベル(たとえばterminfo
、xkb
またはxterm-keys
でtmux
)で動作する方が効率的である可能性がありますか?私が狂ったのではないでしょうか?
他の勇敢なコンソール司令官の洞察力を高く評価します。
答え1
Konsoleは次のように依存するため、これを無視します。マッピングできないハードコーディングされたキーのリスト:
// 次のショートカットのいずれかをオーバーライドします。なぜなら // 端末に必要です。 int keyCode = keyEvent->key() | int keyCode = keyEvent->key() |修飾子; スイッチ(キーコード){ //リストはQLineEdit :: event()コードから取得されます。 ケース Qt::Key_Tab: ケース Qt::Key_Delete: ケース Qt::Key_Home: ケース Qt::Key_End: ケース Qt::Key_Backspace: ケース Qt::Key_Left: ケース Qt::Key_Right: ケース Qt::Key_Slash: ケース Qt::Key_Period: ケース Qt::Key_Space: keyEvent->accept(); 事実を返します。 } 偽を返します。