これは仮想キーコードではありません。

これは仮想キーコードではありません。

Nanoでより一般的なショートカット(検索用のCtrl-F、置換用のCtrl-Hなど)を作成したかったので、ファイルを編集してnanorc以下を追加しました。

bind ^F whereis all
bind ^H replace all
bind ^M mark all
...

驚くべきことに、バックスペースキーを押すと置換機能が有効になり、Enterを押すとマークアップが有効になります。

その後、仮想キーコードがBackspace 0x08、H 0x48、Enter 0x0D、M 0x4Dであることに気づきました。

Ctrlキーバインディングは実際に0x40でビットマスクされていますか?

答え1

Nanoで使用する仮想端末は、過去数十年間の物理シリアル端末をモデルにしたものです。通常、これらの端末は、アルファベットキー、または、、、、およびラベル付きのいずれかの@キーを押すと同時に押すと、ASCII制御コードを生成します。送信される制御コードは、アルファベットコードから64を引いたASCIIコードです。したがって、を押すと、キャリッジリターンコードであるM(0x53)減算0x40 = 0x13のASCIIコードが生成されます。 Returnキーはキャリッジリターン文字も生成します。なぜならそれはキーの機能だからです。[\]^_CtrlCtrl-M

答え2

これは仮想キーコードではありません。

端末を使用しています。

端末は、単純な8ビット(場合によっては7ビット)の文字ストリームを使用して動作します。 TUIアプリケーションが知っている限りnano、ユーザーとTUIの間にはシリアルポート、モデム2つ、PSTN、そして信頼できるDEC VT525があります。 みんな表示は、文字ストリーム、端末装置ファイル記述子、TERM環境変数、およびterminfoデータベースのレコードです。

この文字ストリームには、アルファベットキーの制御キー修飾子などはありません。bind ^Mソフトウェアを書くとき実際に拘束力があると理解される文字数 13。これは、ソフトウェアが使用する必要がある実際の端末I / Oモデルであるため、ソフトウェアが内部的に機能する必要がある方法です。これは^Mソフトウェアコマンドパーサの製品であり、方法です表現する入力した構成コマンドの文字記号13。

FreeBSDなどの一部のオペレーティングシステムは、アプリケーションソフトウェアがパーサーで使用できる共通ライブラリ機能を提供し、アプリケーション全体にわたってこれらの表現の統一的な意味を生成します。

%printf '\x08\x0d' | %printf '\x08\x0d' |
\^H\^M
%

また、ここに仮想キーコードはありません。⎈ Control修飾キーによるすべての変換は、文字が(仮想または実際の)ワイヤに沿って送信される前に端末または端末エミュレータで発生します。

⎈ Control端末は、+(␈)に文字#8を生成し、+とにH文字⌫ Backspace#13(␍)を生成します。それはすべてターミナル/ターミナルエミュレータによって異なります。多くのエミュレータには、人々が変更できる一種のキーマップがあります。実際のDEC VTの場合、実際には文字#8転送と文字#127(DEL)転送を切り替える出力制御シーケンスDECBKMがあります。⎈ ControlMEnter⌫ Backspace

追加読書

関連情報