Viele Emacs-Befehle ändern ihr Verhalten, wenn sie mit einem oder mehreren C-uPräfixen aufgerufen werden. In einigen Fällen ist das Standardverhalten eines Befehls für mich weniger nützlich als das Verhalten, das ich beim Präfixieren erhalte C-u. Gleichzeitig möchte ich das Standardverhalten nicht vollständig beseitigen.
Um ein konkretes Beispiel zu geben, beendet der quit-window
Befehl (an q
in gebunden help-mode
) das aktuelle Fenster und vergräbt den darin standardmäßig angezeigten Puffer. Wenn es damit aufgerufen wird, wird C-ustattdessen der Puffer gelöscht. Ich möchte, dass der Befehl den Puffer standardmäßig beendet und ihn vergräbt, wenn er mit einem C-uPräfix aufgerufen wird .
F: Wie kann ich Emacs anweisen, dass sich ein Befehl so verhält, als würde er C-u standardmäßig mit einem Präfix aufgerufen, während das Standardverhalten in das C-u Präfix verschoben wird ?
Ich weiß, dass ich dies beheben kann, indem ich den ursprünglichen Befehl neu definiere oder ihn in einen benutzerdefinierten Befehl einbinde, der Präfixargumente gemäß meinen Einstellungen übergibt. Aber ich würde lieber so etwas machen:
(swap-args 'quit-window)
quelle
:filter-args
statt:around
, denke ich.swap-args
funktioniert so, dass dasC-u
Verhalten zum Standard wird, wenn es auf einen Befehl angewendet wird. Wenn ich jedoch den Befehl mitC-u
aufrufe, erhalte ich nicht das ursprüngliche Verhalten. Vielleichtcalled-interactively-p
ist schuld? Nach meinem Verständnis wird'any
diese Funktion mit einem Argument von nur zurückgegeben,nil
wenn der enthaltende Befehl von Lisp aufgerufen wird. Wenn Sie also den empfohlenen Befehl über eine Schlüsselbindung aufrufen, kann der Zweig else nicht erreicht werden.'any
war in Ordnung, ich habefuncall
stattapply
versehentlich verwendet.org-insert-subheading
) buchstäblich nach dem rohen universellen Argument (anscheinend(4)
) anstelle einer Wahrheitsüberprüfung.Eine andere Methode, die auf der Tatsache basiert, dass eine
interactive-form
Eigenschaft in der Liste der Funktion die im Code angegebene Form überschreibt: ( ref )Mit
(interactive-form 'function)
, um die aktuelle Spezifikation abzurufen, können auch komplexere Spezifikationen verarbeitet werden.Ich denke , die beste Lösung (wenn möglich) ist die Funktion wickeln mit
(let ((prefix-arg (not current-prefix-arg)))
obwohlquelle
Nicht so einfach wie gedacht. Da es jedoch trivial ist, den getauschten Befehl zu haben:
quelle
quit-window
Befehl spezifischen Wrapper .C-u
Verhalten auszutauschen , und ich bin sicher, dass andere, die auf Ihren Beitrag stoßen, davon unterstützt werden! Persönlich werde ich es nicht verwenden, da ich mehrere Befehle habe, deren Verhalten ich ändern möchte, und ich möchte vermeiden, dass mehrere Wrapper definiert werden müssen.