Control以外のキーはSIG *を送信できますか?

Control以外のキーはSIG *を送信できますか?

コピー/貼り付け/すべて選択/検索/などに物理スーパー/メタキーを使用できるようにCtrlとSuperを変更したいと思います。通常、存在しないアプリケーション固有の構成はありません。

ただし、物理制御キーにはSIGINT、EOF、一時停止などを維持したいと思います。

私は私が知っている限り、URxvt.keysym.M-c: ^C修飾キーを別のキー記号に変更したり、キーコードに直接変更したりすることはできません。stty^K

可能ですか?

答え1

いくつかのキー入力 - 信号変換は非常に低いレベルで行われます。これは、ターミナルエミュレータプロセスまたは物理ターミナルハードウェアとターミナルで実行されているプログラムとの間を中継するときに、カーネルの通常のターミナルドライバによって実行されます。ドライバは文字だけを理解します(文字はバイトを意味します。これらのインタフェースを設計するときは、マルチバイト文字セットは重要ではありません)。

ファンクションキー以外の修飾子を含むか、ファンクションキーShiftを含むほとんどのキーストロークには対応する文字がないため、端末は複数文字のエスケープシーケンス(ASCIIで始まる)を送信する必要があります。エスケープ文字)。バラよりbash - Ctrl + Alt + Spaceを使用したキーシーケンスバインディングエラーそしてキーボード入力とテキスト出力はどのように機能しますか?このトピックに関する追加の背景情報です。

Ctrl+ letter(ASCII)に対応する文字があります。制御文字)、しかしSuper+ではありませんletterMeta+はC2文字のシーケンスを送信し、ESC C+はSuperほとんどの端末でデフォルトでC送信されます。したがってC、+(および一部の句読点)の信号をシングルバイト印刷可能文字に再バインドできます(ASCII以外のバイトにもバインドされますが、UTF-8では大きな混乱を招く可能性があります)。Ctrlletter

唯一の解決策は、CtrlSIGINTをトリガしたいキーストロークに対して+を送信するように端末エミュレータを設定することです。CRxvtの場合、正しい方向に進んでいますが、^C2文字^とを挿入するには、C8進エスケープを使用して指定できるcontrol-c文字が必要です。また、+と実行の場合は+ではなく+M-cです。たとえば、throughでSuperが何であるかを確認し、その数を修飾子として使用します。MetaCSuperCSuperCxmodmap -pmmod1mod5

URxvt.keysym.5-c: \003

関連情報