Come applicare `call-interattivamente` a un comando interattivo che accetta l'argomento universale?


8

Ho letto la documentazione su come effettuare chiamate interattive da Elisp, ma non riesco ancora a capire come passare l'argomento universale quando si utilizza call-interactivelyun comando che riconosce l'argomento universale.

Più specificamente, voglio implementare una funzione che, in determinate condizioni, dovrebbe chiamare il shellcomando in modo interattivo con l'argomento universale , in modo che, di conseguenza, il prompt

Shell buffer (default *shell*): 

sarà visibile nel minibuffer e, una volta che questo prompt avrà una risposta, verrà creato il buffer specificato (se non esiste già) e creato il buffer corrente.


FWIW, ho provato quanto segue:

(universal-argument)
(call-interactively 'shell)

e

(setq prefix-arg (list 4))
(call-interactively 'shell)

... ma non ho mai visto il prompt Shell buffer (default *shell*):; invece, in tutti i casi, il shellcomando è stato eseguito esattamente come se fosse stato chiamato senza l'argomento universale. (Davvero non so cosa sto facendo qui, quindi i miei tentativi ciechi sopra sono stati fatti con ignorante consapevolezza del consiglio prescientifico della documentazione .)


2
Prova(let ((current-prefix-arg 4)) (call-interactively 'shell))
xuchunyang,

Grazie! Accetterò volentieri questa come risposta se ti interessa pubblicarla come tale.
kjo,

Risposte:


8

Secondo shellil modulo interattivo, purché current-prefix-argsia diverso da zero, shellchiederà all'utente un buffer da utilizzare, in modo da poter impostare current-prefix-argsu non zero (4 è usato nel seguito come esempio):

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

o simulare l'esecuzione shellcon un prefisso 4 ( M-4 M-x shell):

(execute-extended-command 4 "shell")

Solo un piccolo cavillo: se si intende utilizzare un valore di verità diverso dal semplice vecchio t, non dovrebbe essere (list 4)(o '(4)se si preferisce)? Mi rendo conto che la versione attuale di shellnon si preoccupa della differenza tra 4e (list 4)(importa solo che il valore è non- nil), ma le versioni future potrebbero.
kjo,

4simula M-4 M-x shell, '(4)simulaC-u M-x shell
npostavs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.