Ich habe die Dokumentation zum Tätigen interaktiver Aufrufe in Elisp gelesen, kann aber immer noch nicht herausfinden, wie das universelle Argument übergeben wird, wenn call-interactively
ein Befehl verwendet wird, der das universelle Argument erkennt.
Insbesondere möchte ich eine Funktion implementieren, die unter bestimmten Bedingungen den shell
Befehl interaktiv mit dem universellen Argument aufrufen sollte , sodass als Ergebnis die Eingabeaufforderung angezeigt wird
Shell buffer (default *shell*):
wird im Minibuffer angezeigt. Sobald diese Eingabeaufforderung eine Antwort erhält, wird der angegebene Puffer erstellt (sofern er noch nicht vorhanden ist) und der aktuelle Puffer erstellt.
FWIW, ich habe folgendes versucht:
(universal-argument)
(call-interactively 'shell)
und
(setq prefix-arg (list 4))
(call-interactively 'shell)
... aber ich habe die Aufforderung nie gesehen Shell buffer (default *shell*):
; Stattdessen wurde der shell
Befehl in allen Fällen genau so ausgeführt, als wäre er ohne das universelle Argument aufgerufen worden . (Ich weiß wirklich nicht, was ich hier mache, daher wurden meine obigen blinden Versuche unter bewusster Missachtung der vorsichtigen Ratschläge der Dokumentation unternommen .)
(let ((current-prefix-arg 4)) (call-interactively 'shell))
Antworten:
Laut dem
shell
interaktiven Formular wird der Benutzer , solange ercurrent-prefix-arg
nicht Null ist,shell
aufgefordert, einen Puffer zu verwenden, damit Sie ihncurrent-prefix-arg
auf Null setzen können (4 wird im Folgenden als Beispiel verwendet):oder simulieren Sie die Ausführung
shell
mit einem Präfix 4 ( M-4 M-x shell):quelle
t
, sollte das nicht so sein(list 4)
(oder'(4)
wenn Sie es vorziehen)? Mir ist klar, dass sich die aktuelle Version vonshell
nicht um den Unterschied zwischen4
und(list 4)
kümmert (es ist nur wichtig, dass der Wert nicht istnil
), aber zukünftige Versionen könnten.4
simuliertM-4 M-x shell
,'(4)
simuliertC-u M-x shell