(Observe que, título pelo contrário, esta pergunta não é a mesma que Como iniciar no modo daemon e suprimir diálogos interativos?, Pois essa pergunta foi "respondida" pelo remetente, eliminando o que estava causando o aparecimento de um prompt específico.)
Gostaria de saber se existe uma maneira geral de impedir que você fique emacs --daemon
sempre esperando uma resposta para um prompt exibido em um minibuffer que ainda não existe.
É impossível conectar-se a um emacsclient para responder a essas solicitações, porque o servidor não inicia até o Emacs concluir a sequência de inicialização. (Isso significa que, se você tiver ALTERNATE_EDITOR definido como uma string vazia, o que faz com emacsclient
que um servidor que não consegue encontrar um servidor inicie um novo daemon, você pode acabar com vários daemons do Emacs todos presos e aguardando.) Tenho que killall emacs
resolver o problema antes de continuar.
Eu posso jogar whack-a-mole com cada coisa causando um prompt na inicialização quando eu o identifico (iniciando o Emacs no modo não daemon e vendo o que ele está pedindo), mas não é uma solução porque não pode parar o próximo daemon pendurado na inicialização por um novo motivo.
Para dar um exemplo: um motivo comum para travar foi após uma reinicialização do sistema ou uma falha no Emacs, quando o primeiro Emacs pós-reinicialização quis saber se era bom roubar arquivos de bloqueio do Emacs desativado. Eu poderia consertar isso criando conselhos para que esse prompt sempre respondesse "sim" sem interação. Porém, um dos arquivos que foram abertos na sessão anterior foi salvo, um arquivo TRAMP que requer uma senha sudo ou SSH; portanto, o daemon fica parado aguardando um prompt de senha. Portanto, corrijo isso editando manualmente o arquivo da sessão (com vi
ou emacs -q
!) Para remover os arquivos incorretos - mas isso não impede que isso aconteça na próxima vez.
Portanto, posso parar de carregar minha sessão automaticamente na inicialização e alterá-la para um comando que devo executar manualmente no meu primeiro emacsclient. Mas se ela não estiver carregando minha sessão em segundo plano, estará pronta quando eu estiver pronta para usá-la, todo o objetivo do daemon será perdido!
Então, o que eu gostaria é:
- (Melhor) Alguma maneira de adiar os prompts do minibuffer até eu abrir um emacsclient, enquanto ainda concluo o restante da inicialização.
- (OK) Alguma maneira de fazer todos os prompts do minibuffer que eu ainda não
no
avisei, como descrito acima, retornará, a menos que um emacsclient esteja em execução. Eu posso viver com meus buffers TRAMP em erro desde que funcione principalmente.
Existe alguma maneira de alcançar um desses objetivos?
(read-desktop)
, antes de executar emacs --daemon
, crie um arquivo de bloqueio falso colocando um número inteiro em .emacs.desktop.lock (onde colocar esse arquivo, infelizmente, depende da sua configuração , mas provavelmente seja seu diretório de usuário ou ~ / .emacs.d / .