Wie kann ich Cc global durch eine andere Schlüsselbindung ersetzen?

7

Die Tastenkombination C-cist nicht bequem, um das von mir verwendete Tastaturlayout einzugeben, und ich versuche, es global zu ändern. Das Ziel ist es, jedes Vorkommen von C-cdurch eine andere Bindung zu ersetzen <apps> d, so dass das Senden einer Nachricht in Gnus <apps> d <apps> d, das Kompilieren in auxtex dasselbe wäre und der Benutzerpräfixschlüssel C-cauch immer wäre <apps> d. Die Taste <apps>befindet sich <f19>auf meiner Tastatur.

Beim Lesen des Handbuchs scheint es, dass ich verwenden muss key-translation map. Es funktioniert gut mit der Übersetzung von <f19>nach<apps>

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

Leider funktioniert es nicht, wenn ich das machen möchte C-c.

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

Wenn ich versuche, es zu benutzen, bekomme ich

<apps> d is undefined

und wenn ich es nachschlage ( C-h k), sehe ich

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

Gibt es eine Möglichkeit, diese Arbeit zu machen?

brab
quelle
Eine Vermutung, eine ähnliche map ( input-decode-map) hat dies in ihrer Dokumentation: "Die Ereignisse, die von Bindungen in" input-decode-map "stammen, werden selbst nicht in" input-decode-map "nachgeschlagen." Was Sinn macht, wenn Sie darüber nachdenken: Dies wäre ein Weg, um unendliche Übersetzungen zu verhindern.
wvxvw

Antworten:

2

Das Problem bei Ihrem Versuch ist, dass es sich appsum eine Übersetzung über key-translation-maphandelt und diese Ausgabe nicht key-translation-maprekursiv durchsucht wird . Wenn Sie appsganz weglassen und f19direkt damit arbeiten, funktioniert es.

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

Wenn Sie den appsAlias ​​verwenden möchten , können Sie die Tatsache nutzen, dass es zwei ähnliche Übersetzungskarten gibt: input-decode-mapund key-translation-map. Verwenden Sie input-decode-mapdiese Option, um virtuelle Funktionstasten zu deklarieren, die den von Ihrer Tastatur gesendeten Tastenfolgen entsprechen, z. B. der Übersetzung von f19nach apps. Verwenden Sie key-translation-mapdiese Option , um eine interne Übersetzung in Emacs zu erstellen, z . B. von apps dbis 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"))
Gilles 'SO - hör auf böse zu sein'
quelle
Danke, das funktioniert super. Ich habe es versucht local-function-key-mapund es funktioniert auch. Gibt es einen Grund, einen über den anderen zu verwenden?
Brab
Der Unterschied zu local-function-key-mapist, dass local-function-key-mapmit einer globalen oder lokalen Bindung für überschrieben werden kann apps d. Was man sich vorstellen kann, könnte eher eine Funktion als ein Fehler sein.
Gilles 'SO - hör auf böse zu sein'