答え1
バラよりキーボード入力とテキスト出力はどのように機能しますか?このトピックの概要を見てください。これは、アプリケーションが端末で実行されているのか、GUI環境と直接通信しているのかによって異なります。
端末では、端末ソフトウェア(通常は今世紀の端末エミュレータ)が文字エンコードを決定します。設定で文字エンコーディングを渡します。 (入力と出力同じ)ロケール環境LC_CTYPE
変数この変数が設定されていないか設定されている場合、C
端末は情報を提供しないため、アプリケーションはエンコードが何であるかを知ることができません。端末では、文字は文字としてアプリケーションに送信されます。文字以外の入力(ファンクションキー、カーソルキー、修飾子付きキーAltなど)は、次のように送信されます。エスケープシーケンス(一部は似ています。制御文字代わりに)。
X11アプリケーションは次の形式で入力を受け取ります。主なイベント。 KeyPresss イベントには、keycode
おおよそのキーの物理的な位置に対応し、アクティブなstate
修飾子をエンコードする低レベルの表示が含まれています。アプリケーションは次のことを呼び出すことができます。XLookupString
(従来の機能、Latin-1のみ)またはXmbLookupString
(他のシングルバイトエンコーディングをサポートする関数)またはXwcLookupString
(マルチバイトエンコーディングをサポートする機能)またはXutf8LookupString
(最新のUTF-8関数)この生情報を文字列に変換します。
キーから文字へのマッピングはさまざまなレベルで変更できます。キーボード入力とテキスト出力はどのように機能しますか?概要を見てください。
答え2
キーボードは文字を送信せずにスキャンコードを送信します。たとえば、一般的なアメリカのキーボードで「e」とマークされたキーを押すと、本質的に「メイングループの英数字キーの2行目の左側にある3番目のキー」であるスキャンコードが送信されます。このスキャンコードは、カーネル(またはオペレーティングシステムの他のコンポーネント)によって文字(またはしばしば「Print Screen」などのキーなどのキーシンボル)に変換されます。特にLinuxでは、グラフィックサブシステムを介して可能です。
一般に、オペレーティングシステムまたはグラフィックサブシステムは、変換テーブルを制御するための1つ以上のユーティリティを提供します。たとえば、WindowsとLinuxの両方で、必要な数のキーボードレイアウトをインストールして簡単に切り替えることができます。
アプリケーションが取得する内容は、オペレーティングシステムの規則によって異なります。 Windowsでは、コンソールアプリケーションはコマンドで設定されている現在のコンソールコードページに基づいてエンコードされた文字を取得しますchcp
。グラフィカルアプリケーションは通常、UTF-16エンコーディング文字に変換されるキーシンボルを取得します。 Linuxでは、アプリケーションは通常UTF-8でエンコードされた文字を取得します。たとえば、ă
キーボードレイアウトが正しく設定された状態で(LATIN SMALL LETTER A WITH BREVE、U + 0103)と表示されたキーを押すと、
- Windowsのコンソールアプリケーションは1バイト(10進数227)
chcp 1250
を取得します。'\xE3'
- Windowsのコンソールアプリケーションは
chcp 852
1バイト(10進数199)を取得します'\xC7'
。 '\x03'
'\x01'
Windowsのグラフィックアプリケーションは通常、2バイト(または短い整数)で0x103
保存/処理される適切なキーシンボルを取得します。'\xC4'
'\x83'
Linuxのターミナルアプリケーションは2バイト(UTF-8エンコーディングの<U + 0103>)を取得します。'\xC4'
'\x83'
Linuxのグラフィックアプリケーションは通常、2バイト(UTF-8エンコーディングの<U + 0103>)で保存/処理される適切なキーシンボルを取得します。
(Windowsとは、Windows NTとWindows XP、Windows Vista、7または10などの後続の製品を意味します。Windows 95などは、幸いにも廃止されたまったく異なるオペレーティングシステムスイートでした。)
Vimには2つの新しい翻訳レイヤーがあります。
次のコマンドを使用してキーボード翻訳マッピングをインストールできます
set keymap
。これは、オペレーティングシステムレベルでキーボードレイアウトをインストールできないシステムで目的の言語でテキストを入力するのに役立ちます。:help 'keymap'
:help mbyte-keymap
このコマンドを使用してマッピングを定義できます
:map
。望むより:help :map
。