web-dev-qa-db-ja.com

sttyのスーパーキー表記

UbuntuボックスでCtrlキーとSuperキーを入れ替えようとしています。

Xmodmapを使用してSuperとCtrlを入れ替えることができました。今、私はsttyintrをSuper_L + Cに変更する必要があります

私は一生の間、スーパーキーの表記を見つけることができません。 (たとえば、^はコントロールキーです)

誰かがsttyを使ったスーパーの表記が何であるか知っていますか?入力できるようにしたい

stty intr Super_L + C

例えば。

または、Super + Cを割り込みにする他のさらに良い方法

そのための表記はありません。

一般に、stty(およびこれらの設定を使用するOSコンポーネント)はキー自体を認識しません–ターミナルアプリはそれらのキーをバイトシーケンスに変換しますttyレイヤーはそれらの変換されたバイトのみを認識します。sttyでは特定のbyteを設定して、ttyレイヤーに割り込み信号をトリガーさせることができます。

言い換えると、intrパラメータは、実際にenterできるシンボルに対応する1バイトの値です。 (初期のUnixシステムでは、intrは#記号に設定されていました。)

したがって、intrを^Cに設定すると、バイト0x03の場合はstty shorthand になります(比較:文字CはASCIIでは0x43です)。基本的に、ShiftとCtrlはどちらも、「ベース」バイトの一部のビットを設定およびクリアするだけです。ただし、Superに相当するものはありません。

その結果、ほとんどの端末は単にSuperを無視し、ベースレターを変更せずに送信します。一部のmightはANSI「エスケープ」シーケンス(矢印キーまたはファンクションキーから取得するものと同様)を送信しますが、とにかくsttyでそれらを使用することはできませんでしたそれでも1バイトが必要だからです。割り込みキーをマルチバイトシーケンスにバインドすることはできません。最初のバイトを取得するだけです。

したがって、できる唯一のことは、ターミナルアプリ自体をハックして、Super + Cキーが押されたときに0x03バイトを送信することです。一部のターミナルエミュレータは、一般的な「キーボードショートカット」を介してこれをサポートしますが、実際のソースコードパッチが必要な場合もあります。

1
user1686