Ccを別のキーバインディングでグローバルに置き換えるにはどうすればよいですか?


7

キーの組み合わせC-cは、私が使用するキーボードレイアウトで入力するのに不便で、グローバルに変更しようとしています。目標は、のすべての出現C-cを別のバインディングで置き換えることです。これにより<apps> d、Gnusでのメッセージの送信はになります<apps> d <apps> d。auxtexでのコンパイルは同じになり、ユーザープレフィックスキーC-cも常にになります<apps> d。キー<apps><f19>キーボードにあります。

マニュアルを読んで、使用する必要があるようkey-translation mapです。<f19>to の翻訳でうまく機能します<apps>

(define-key key-translation-map (kbd "<f19>") (kbd "<apps>"))
(global-set-key (kbd "<apps> s") 'save-buffer)

残念ながら、でこれを実行したい場合は機能しませんC-c

(define-key key-translation-map (kbd "<apps> d") (kbd "C-c"))

使ってみると

<apps> d is undefined

調べてみると(C-h k)見える

<apps> d (translated from <f19> d) is undefined

これを機能させる方法はありますか?


推測では、同様のマップ(input-decode-map)のドキュメントに次のように記載されています。考えれば、これは理にかなっています。これは、無限の翻訳を防ぐ方法です。
wvxvw 2015年

回答:


2

あなたの試みの問題は、をapps介した翻訳に起因するものkey-translation-mapであり、この出力はkey-translation-map再帰的に検索されません。apps完全に省略してf19直接作業する場合は、機能します。

(global-set-key (kbd "<f19> s") 'save-buffer)
(define-key key-translation-map (kbd "<f19> d") (kbd "C-c"))

appsエイリアスを使用する場合は、2つの類似した変換マップがあることを利用できます:input-decode-mapkey-translation-mapinput-decode-mapからf19への変換など、キーボードから送信されるキーシーケンスに対応する仮想ファンクションキーを宣言するために使用しますappskey-translation-mapEmacsで内部変換を行うために使用します(例:from apps dから)C-c

(define-key input-decode-map (kbd "<f19>") (kbd "<apps>"))
(global-set-key (kbd "<apps> s") 'save-buffer)
(define-key key-translation-map (kbd "<apps> d") (kbd "C-c"))

ありがとう、これはうまくいきます。使ってみたところlocal-function-key-map動作します。どちらか一方を使用する理由はありますか?
ブラブ

との違いlocal-function-key-maplocal-function-key-map、のグローバルまたはローカルバインディングでオーバーライドできることですapps d。それはバグではなく機能であると考えるようになります。
Gilles「SO-邪悪なことをやめよ」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.