He leído la documentación sobre cómo hacer llamadas interactivas desde Elisp, pero todavía no puedo entender cómo pasar el argumento universal cuando lo uso call-interactivelyen un comando que reconoce el argumento universal.
Más específicamente, quiero implementar una función que, bajo ciertas condiciones, debería llamar al shellcomando interactivamente con el argumento universal , de modo que, como resultado, la solicitud
Shell buffer (default *shell*):
será visible en el minibúfer y, una vez que este mensaje reciba una respuesta, se creará el búfer especificado (si aún no existe) y se convertirá en el búfer actual.
FWIW, probé lo siguiente:
(universal-argument)
(call-interactively 'shell)
y
(setq prefix-arg (list 4))
(call-interactively 'shell)
... pero nunca vi el aviso Shell buffer (default *shell*):; en cambio, en todos los casos, el shellcomando se ejecutó exactamente como si se hubiera llamado sin el argumento universal. (Realmente no sé lo que estoy haciendo aquí, por lo que mis intentos a ciegas anteriores se hicieron sin tener en cuenta los consejos proféticos de la documentación ).

(let ((current-prefix-arg 4)) (call-interactively 'shell))Respuestas:
De acuerdo con
shellel formulario interactivo, siempre quecurrent-prefix-argno sea nulo,shellle pedirá al usuario un búfer para usar, por lo que puede establecerlocurrent-prefix-argen no nulo (se usa 4 como ejemplo a continuación):o simule la ejecución
shellcon un prefijo 4 ( M-4 M-x shell):fuente
t, ¿no debería ser eso(list 4)(o'(4)si lo prefiere)? Me doy cuenta de que a la versión actual deshellno le importa la diferencia entre4y(list 4)(solo le importa que el valor sea nonil), pero las versiones futuras sí.4simulaM-4 M-x shell,'(4)simulaC-u M-x shell