Emacs Tastenkürzel zwischen Emacs 23 und Emacs 24

8

Ich habe vor kurzem ein Upgrade auf Emacs24 durchgeführt, und einige meiner benutzerdefinierten Tastatureingaben sind infolgedessen kaputt gegangen.

Nach dem feinen Handbuch ist es möglich um Emacs dazu zu bringen, Funktionsschlüssel nicht mehr mit ihren ASCII-Steuercodes zu verbinden (zB ist es möglich, C-m und RET an verschiedene Dinge gebunden zu haben, oder C-i und TAB , und so weiter). Das war schon immer ein großes Ärgernis von mir mit Emacs, dass solche wertvollen "First Level" Tastaturkürzel für Dinge verschwendet werden, für die ich bereits spezielle Tasten auf meiner Tastatur habe. Ich möchte sie an verschiedene Dinge binden, in meinem Fall, um die Tastaturbelegungen zu modernisieren, indem ich Gedit nachahmt. In Emacs23 funktionierte das wunderbar:

%Vor%

Dann habe ich auf Emacs24 aufgerüstet und es ist irgendwie kaputt gegangen. Es funktioniert immer noch in dem Sinne, dass C-m sicherlich eine Sache macht und RET eine andere, aber das Problem ist, dass sich die Return-Taste im Terminal-Modus oder im Minipuffer nicht mehr richtig verhält. Anstatt den Befehl, den ich gerade eingegeben habe, zu aktivieren, bewegt sich in beiden Fällen die Return-Taste einfach in die nächste Zeile und ich habe keine Möglichkeit, die Befehle zu aktivieren, die ich in den Minibuffer oder das Terminal eintippe.

Ironischerweise hat Emacs24 eine Menge Änderungen am Löschverhalten vorgenommen und dabei C-d von DEL entkoppelt, so dass es nun tatsächlich möglich ist, C-d an etwas zu binden, ohne dass DEL gebunden werden muss. Zurück zum erwarteten Verhalten, also wäre es großartig, wenn ich für meinen Return-Schlüssel ein ähnliches "Es funktioniert einfach" -Verhalten erzielen könnte, während C-m an etwas anderes gebunden ist.

Ich kann mir also zwei mögliche Lösungen für dieses Problem vorstellen. Man könnte so aussehen:

%Vor%

ODER, so etwas wäre noch schöner:

%Vor%

Aber mir ist keine solche Variable oder Funktion bekannt, die mir in diesem Szenario helfen würde.

Ich habe mehrere erfolglose Versuche unternommen, Modus-Hooks zu verwenden, um die korrekten Bindungen im Terminal- und Minibuffer-Modus wiederherzustellen, aber ich kann einfach nichts zum Laufen bringen. Hilfe!

Danke.

    
robru 11.09.2012, 02:42
quelle

2 Antworten

3
___ tag123emacs ___ GNU Emacs ist ein erweiterbarer, anpassbarer, selbstdokumentierender Texteditor, der mit Lisp-Code erweitert werden kann. Obwohl Emacs ein Editor für allgemeine Zwecke ist, können Fragen hier zum Thema gehören, wenn es darum geht, Emacs selbst zu erweitern (normalerweise durch Schreiben von Emacs-Lisp-Funktionen) oder über bestimmte Programmiermodi. Andernfalls (und vielleicht auch in diesen Fällen) sollten Sie Ihre Frage zu Emacs Stack Exchange stellen. ___ qstnhdr ___ Emacs Tastenkürzel zwischen Emacs 23 und Emacs 24 ___ tag123keybindings ___ Alles im Zusammenhang mit Tastenbelegungen (auch "Tastenkombinationen", "Tastenkombinationen" usw.), d. h. die Assoziationen zwischen Tastenkombinationen und den entsprechenden Aktionen, die ausgelöst werden, wenn der Benutzer solche Kombinationen drückt. ___ antwort12393620 ___

Die Art und Weise, wie diese "Schwester-Schlüssel" standardmäßig in Emacs gehandhabt werden, besteht darin, die speziellen Schlüssel (wie tab und return ) in ihre ASCII-Entsprechung umzuleiten (nur über function-key-map) und dann nur hinzuzufügen Tastenanbindungen an die ASCII-Version. So können Sie der Nicht-ASCII-Version mit etwas wie

leicht neue Bedeutungen hinzufügen %Vor%

Aber in Ihrem Fall möchten Sie das Gegenteil tun, indem Sie return so verhalten wie zuvor, während Sie C-m ändern. Die zuverlässigste Art und Weise, dies zu tun (zuverlässig in dem Sinne, dass es mit den meisten Major / Minor Modes Bindings funktionieren sollte), ist es, C-m früh und bedingungslos auf ein neues Event zu mappen, wie in:

%Vor%

Dies hat keinen Einfluss auf die Behandlung von return und tab , da input-decode-map vor function-key-map angewendet wird, d. h. bevor diese Schlüssel in ASCII-Steuerschlüssel umgewandelt werden. So können Sie dann tun:

%Vor%

Ein Nachteil ist, dass dies nicht nur für Bindungen für C-i gilt, sondern auch für Bindungen für C-c C-i , die jetzt nur als C-c TAB funktionieren (was manchmal gut ist, aber gelegentlich weniger mnemonisch sein kann) .

Ein weiterer Nachteil ist, dass, wenn es eine Bindung für tab gibt, tab nicht verwendbar ist, um eine C-i -Bindung zu erreichen. Aber wir können diese beiden Probleme beheben, indem wir Folgendes hinzufügen:

%Vor%

, wodurch das neue C-i -Ereignis wieder in ein normales C-i umgewandelt wird, wenn keine Bindung vorhanden ist, die das neue Ereignis verwendet.

    
___ tag123emacs23 ___ Version 23 des GNU Emacs Texteditors. ___ tag123emacs24 ___ Version 24 des GNU Emacs-Texteditors. ___ answer12376563 ___

Das scheint zu funktionieren:

%Vor%

Die Idee hier ist, dass, anstatt mit dem Return-Schlüssel global zu basteln (was die Terminal- und Minibuffer-Puffer bricht), wir diese Keybindungen nur pro Puffer festlegen, außer dass wir das bedingungslos für alle Puffer tun Dateien auf der Festplatte darstellen.

Es ist ein wenig ineffizient, jedes Mal, wenn ich eine Datei öffne, laufen zu müssen, aber es ist insofern nett, als ich nicht jeden möglichen Modus zum "Reparieren" denken muss, es bricht einfach nicht Terminal / Minibuffer / etc Modi an erster Stelle.

    
___ qstntxt ___

Ich habe vor kurzem ein Upgrade auf Emacs24 durchgeführt, und einige meiner benutzerdefinierten Tastatureingaben sind infolgedessen kaputt gegangen.

Nach dem feinen Handbuch ist es möglich um Emacs dazu zu bringen, Funktionsschlüssel nicht mehr mit ihren ASCII-Steuercodes zu verbinden (zB ist es möglich, %code% und %code% an verschiedene Dinge gebunden zu haben, oder %code% und %code% , und so weiter). Das war schon immer ein großes Ärgernis von mir mit Emacs, dass solche wertvollen "First Level" Tastaturkürzel für Dinge verschwendet werden, für die ich bereits spezielle Tasten auf meiner Tastatur habe. Ich möchte sie an verschiedene Dinge binden, in meinem Fall, um die Tastaturbelegungen zu modernisieren, indem ich Gedit nachahmt. In Emacs23 funktionierte das wunderbar:

%Vor%

Dann habe ich auf Emacs24 aufgerüstet und es ist irgendwie kaputt gegangen. Es funktioniert immer noch in dem Sinne, dass %code% sicherlich eine Sache macht und %code% eine andere, aber das Problem ist, dass sich die Return-Taste im Terminal-Modus oder im Minipuffer nicht mehr richtig verhält. Anstatt den Befehl, den ich gerade eingegeben habe, zu aktivieren, bewegt sich in beiden Fällen die Return-Taste einfach in die nächste Zeile und ich habe keine Möglichkeit, die Befehle zu aktivieren, die ich in den Minibuffer oder das Terminal eintippe.

Ironischerweise hat Emacs24 eine Menge Änderungen am Löschverhalten vorgenommen und dabei %code% von %code% entkoppelt, so dass es nun tatsächlich möglich ist, %code% an etwas zu binden, ohne dass %code% gebunden werden muss. Zurück zum erwarteten Verhalten, also wäre es großartig, wenn ich für meinen Return-Schlüssel ein ähnliches "Es funktioniert einfach" -Verhalten erzielen könnte, während %code% an etwas anderes gebunden ist.

Ich kann mir also zwei mögliche Lösungen für dieses Problem vorstellen. Man könnte so aussehen:

%Vor%

ODER, so etwas wäre noch schöner:

%Vor%

Aber mir ist keine solche Variable oder Funktion bekannt, die mir in diesem Szenario helfen würde.

Ich habe mehrere erfolglose Versuche unternommen, Modus-Hooks zu verwenden, um die korrekten Bindungen im Terminal- und Minibuffer-Modus wiederherzustellen, aber ich kann einfach nichts zum Laufen bringen. Hilfe!

Danke.

    
___
Stefan 12.09.2012, 17:42
quelle
5

Das scheint zu funktionieren:

%Vor%

Die Idee hier ist, dass, anstatt mit dem Return-Schlüssel global zu basteln (was die Terminal- und Minibuffer-Puffer bricht), wir diese Keybindungen nur pro Puffer festlegen, außer dass wir das bedingungslos für alle Puffer tun Dateien auf der Festplatte darstellen.

Es ist ein wenig ineffizient, jedes Mal, wenn ich eine Datei öffne, laufen zu müssen, aber es ist insofern nett, als ich nicht jeden möglichen Modus zum "Reparieren" denken muss, es bricht einfach nicht Terminal / Minibuffer / etc Modi an erster Stelle.

    
robru 11.09.2012 19:26
quelle