Eu defini algumas funções para executar o processo async-shell-command
em segundo plano assíncrono usando o meu .emacs, mas sempre que executo os comandos, uma nova janela (não o quadro) é criada e o buffer do processo é mostrado lá. Como eu poderia executar o comando sem o buffer "pop-up"?
23
start-process
para um comando sudo? Tentei encerrar minha ligaçãostart-process
,(let ((default-directory "/sudo::")) ... )
mas não funcionou para mim."program"
neste caso, é apenas o nome do programa (por exemplo, nautilus, caja, firefox) e"arg1 arg2 ..."
deve estar no quarto argumento posicional destart-process
. Eu percebi isso lendo a documentação :)Como Tikhon mencionou,
(start-process)
é o caminho a percorrer. Caso você não queira criar um buffer, mas ainda assim queira reagir ao status do processo em segundo plano, também pode empregar(set-process-sentinel)
. Aqui está um exemplo modificado que estou tirando do meuprojector
pacote:Na descrição da função Emacs:
As páginas de manual do GNU em Processos são muito boas para mais informações.
fonte
set-process-sentinel
é um pouco mais preciso? Tenho a ideia geral de ter uma função que gerencia o processo, mas não entendo completamente todos os detalhes. Obrigado!M-x describe-function
e entrar,set-process-sentinel
receberá uma resposta curta da documentação do Emacs: (set-process-sentinel PROCESS SENTINEL) Dê a PROCESS o sentinel SENTINEL; nulo por padrão. O sentinela é chamado como uma função quando o processo muda de estado. Ele recebe dois argumentos: o processo e uma string que descreve a alteração.C-h f
...Não há necessidade de alterar como você executa um comando assíncrono. O Emacs possui uma capacidade genérica de permitir que você controle onde ou se algum buffer será exibido, modificando uma única estrutura de dados, a
display-buffer-alist
.Na solução abaixo, você pode ver que a função de ação
display-buffer-no-window
(por exemplo, sem pop-up) está configurada para ser associada a qualquer buffer com um nome começando*Asynchronous Shell Command*
(o emacs adiciona um sufixo incremental quando é solicitado a criar mais de um).Para ver a lista de outras opções de exibição disponíveis, digite
C-h f display-buffer
e procure a lista de "funções de ação".fonte