Eu li a documentação sobre como fazer chamadas interativas no Elisp, mas ainda não consigo descobrir como passar o argumento universal ao usar call-interactively
um comando que reconheça o argumento universal.
Mais especificamente, quero implementar uma função que, sob certas condições, chame o shell
comando interativamente com o argumento universal , para que, como resultado, o prompt
Shell buffer (default *shell*):
ficará visível no minibuffer e, assim que esse prompt obtiver uma resposta, o buffer especificado será criado (se já não existir) e o buffer atual será criado.
FWIW, tentei o seguinte:
(universal-argument)
(call-interactively 'shell)
e
(setq prefix-arg (list 4))
(call-interactively 'shell)
... mas eu nunca vi o prompt Shell buffer (default *shell*):
; em vez disso, em todos os casos, o shell
comando foi executado exatamente como se tivesse sido chamado sem o argumento universal. (Eu realmente não sei o que estou fazendo aqui, por isso minhas tentativas cegas acima foram feitas com desconsideração consciente dos conselhos prescientes da documentação .)
(let ((current-prefix-arg 4)) (call-interactively 'shell))
Respostas:
De acordo com
shell
a forma interativa, contanto quecurrent-prefix-arg
seja nulo,shell
solicitará ao usuário um buffer para usar, para que você possa definircurrent-prefix-arg
como nulo (4 é usado a seguir como exemplo):ou simule a execução
shell
com um prefixo 4 ( M-4 M-x shell):fonte
t
verdade que não seja velho , não deveria ser(list 4)
(ou'(4)
se você preferir)? Percebo que a versão atual deshell
não se importa com a diferença entre4
e(list 4)
(importa apenas que o valor seja nãonil
), mas versões futuras podem.4
simulaM-4 M-x shell
,'(4)
simulaC-u M-x shell