(Si noti che, al contrario, questa domanda non è la stessa di Come iniziare in modalità demone e sopprimere le finestre di dialogo interattive?, Poiché quella domanda è stata "risposta" dal mittente eliminando ciò che stava causando la visualizzazione di un particolare prompt.)
Vorrei sapere se esiste un modo generale per evitare di rimanere emacs --daemon
in sospeso per sempre in attesa di una risposta a un prompt visualizzato in un minibuffer che non esiste ancora.
È impossibile connettersi con un emacsclient per rispondere a questi prompt, perché il server non si avvia fino a quando Emacs non completa la sequenza di avvio. (Ciò significa che se ALTERNATE_EDITOR è impostato su una stringa vuota, il che fa sì emacsclient
che un server che non trova un server possa avviare un nuovo demone, puoi finire con più demoni Emacs tutti bloccati e in attesa.) Devo killall emacs
e risolvere il problema prima di continuare.
Posso giocare a squarciagola con ogni cosa che provoca un prompt all'avvio quando lo identifico (avviando Emacs in modalità non demone e vedendo quello che sta chiedendo), ma non è una soluzione perché non può fermare il demone successivo dall'attesa all'avvio per un nuovo motivo.
Per fare un esempio: un motivo comune per cui si bloccava era dopo un riavvio del sistema o un arresto anomalo di Emacs, quando il primo post-riavvio di Emacs voleva sapere se andava bene rubare i file di blocco dai defunti Emacs. Potrei risolverlo creando consigli per fare in modo che quel prompt risponda sempre "sì" senza interazione. Ma poi, uno dei file che era stato aperto durante il salvataggio della sessione precedente era un file TRAMP che richiedeva una password sudo o SSH, quindi il demone era bloccato in attesa di una richiesta di password. Quindi lo risolvo modificando manualmente il file di sessione (con vi
o emacs -q
!) Per rimuovere i file offensivi, ma ciò non impedisce che accada la prossima volta.
Quindi, posso interrompere il caricamento automatico della mia sessione all'avvio e cambiarlo in un comando che devo eseguire manualmente dal mio primo emacsclient. Ma se non sta caricando la mia sessione in background, quindi è pronta quando sono pronto per usarla, l'intero scopo del demone è perso!
Quindi quello che mi piacerebbe è:
- (Migliore) In qualche modo per rinviare le istruzioni del minibuffer fino a quando apro un emacsclient, pur continuando il resto dell'inizializzazione.
- (OK) In qualche modo per eseguire tutte le istruzioni relative al minibuffer non ho già avvisato altrimenti, come descritto sopra, è sufficiente tornare a
no
meno che non sia in esecuzione un emacsclient. Posso vivere con i miei buffer TRAMP in errore fino a quando funziona principalmente.
C'è un modo per raggiungere uno di questi obiettivi?
(read-desktop)
, quindi, prima di eseguire emacs --daemon
, creare un file di blocco fasullo mettendo un intero in .emacs.desktop.lock (dove mettere quel file, purtroppo, dipende dalla configurazione , ma probabilmente o il tuo homedir o ~ / .emacs.d / .