Wie kann man "interaktiv aufrufen" auf einen interaktiven Befehl anwenden, der das universelle Argument akzeptiert?

8

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-interactivelyein Befehl verwendet wird, der das universelle Argument erkennt.

Insbesondere möchte ich eine Funktion implementieren, die unter bestimmten Bedingungen den shellBefehl 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 shellBefehl 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 .)

kjo
quelle
2
Versuchen Sie(let ((current-prefix-arg 4)) (call-interactively 'shell))
Xuchunyang
Vielen Dank! Ich akzeptiere dies gerne als Antwort, wenn Sie es als solche veröffentlichen möchten.
Kjo

Antworten:

8

Laut dem shellinteraktiven Formular wird der Benutzer , solange er current-prefix-argnicht Null ist, shellaufgefordert, einen Puffer zu verwenden, damit Sie ihn current-prefix-argauf Null setzen können (4 wird im Folgenden als Beispiel verwendet):

(let ((current-prefix-arg 4))
  (call-interactively 'shell))

oder simulieren Sie die Ausführung shellmit einem Präfix 4 ( M-4 M-x shell):

(execute-extended-command 4 "shell")
Xuchunyang
quelle
Nur ein winziger Streitpunkt: Wenn man einen anderen Wahrheitswert als den alten verwenden will t, sollte das nicht so sein (list 4)(oder '(4)wenn Sie es vorziehen)? Mir ist klar, dass sich die aktuelle Version von shellnicht um den Unterschied zwischen 4und (list 4)kümmert (es ist nur wichtig, dass der Wert nicht ist nil), aber zukünftige Versionen könnten.
Kjo
4simuliert M-4 M-x shell, '(4)simuliertC-u M-x shell
npostavs