私はmacosでemacsを使用しています。モディファイア(Meta、Control、...)を単純なキーにマップしたいと思います。基本的に、これが私に必要なものです。(global-set-key (kbd "a") 'hyper)
ここで、aは単なるキーであり、Control-aなどではなく、修飾子なしで「a」だけです。たとえば、「a」をハイパーにしたいのですが、これに対する解決策が見つかりません。
誰かが手がかりを持っていますか?
私はmacosでemacsを使用しています。モディファイア(Meta、Control、...)を単純なキーにマップしたいと思います。基本的に、これが私に必要なものです。(global-set-key (kbd "a") 'hyper)
ここで、aは単なるキーであり、Control-aなどではなく、修飾子なしで「a」だけです。たとえば、「a」をハイパーにしたいのですが、これに対する解決策が見つかりません。
誰かが手がかりを持っていますか?
このアプローチでは、修飾子を押したまま別のキーを押すという意味では修飾キーは作成されませんが、それでもハイパーバインディングを使用できます。
デフォルトでは、C-x@プレフィックスを介して追加の修飾キーを利用できます。完全なリストについてはを参照C-x@C-hしてください。
これらのバインディングはにfunction-key-map
あり、同じ方法を使用して、OSに依存しない独自のバインディングを取得できます。例えば:
(define-key function-key-map (kbd "C-c H") 'event-apply-hyper-modifier)
function-key-map
local-function-key-map
すべてのインスタンスの親です。注意してください:
`local-function-key-map'のエントリは、マイナーモード、ローカル、またはグローバルキーマップで作成されたバインディングと競合する場合は無視されます。つまり、再マッピングは、元のキーシーケンスにバインディングがない場合にのみ適用されます。
C-hig (elisp) Translation Keymaps
RET
したがって、既存のバインディングのないキーシーケンスを使用するようにしてください。(理論的にはかなり制限がありますが、YMMVです。)
編集:明確にするために、これにより、ハイパー修飾キーのないマシンを使用しているときに既存の「ハイパー」バインディングにアクセスする方法が提供されますが、実際には新しい修飾キーは作成されません。アクセスする既存のバインディングがない場合、この手法には通常のプレフィックスバインディングに勝る利点はありません。
Peterがコメントしたように、本物の修飾キーを作成することはOSレベルのタスクであると私は信じています。AFAIKは、修飾子キーを単独で押すと、Emacsは入力を受け取りません。また、修飾子のある非修飾子を押すと、Emacsは(変更された)入力を受け取ります。逆に、修飾キー以外のキーを押し続けると、Emacsは入力をすぐに受け取り、その入力を他の入力と組み合わせて、すべてを単一の(変更された)イベントとして扱う方法がありません。
IIRCはxmodmap
、Unixシステムでこれを実現するための典型的なメカニズムであるため、OSXの場合もそうです。次のリンクが役立つ場合があります。