Configura Emacs su Windows per avviare una singola istanza e aprire i file nell'istanza esistente


18

Sono particolarmente interessato all'esperienza completa di Windows, tra cui:

  • Avvio automatico di un server se non è già stato avviato
  • Come chiamare emacs in modo che utilizzi il server (ad es. Da riga di comando o strumenti di terze parti)
  • Supporto del menu contestuale (ad esempio, fare clic con il pulsante destro del mouse su un file e consentirne l'invio a emacs per la visualizzazione e la modifica)

Tale supporto è già disponibile ovunque?

Risposte:


21

Avvio automatico di un server se non è già stato avviato

Questo dovrebbe essere lo stesso per qualsiasi build di Emacs. Aggiungi questo frammento al tuo .emacso .emacs.d/init.el.

(require 'server)
(unless (server-running-p)
  (server-start)) 

Quindi avvia emacs semplicemente eseguendo l' runemacs.exeeseguibile fornito con la build.

Come chiamare emacs in modo che utilizzi il server (ad es. Da riga di comando o strumenti di terze parti)

La build di Windows di Emacs include un emacsclientw.exeeseguibile nella bin/directory. Usa il percorso completo di tale eseguibile come editor di tua scelta su tutti gli strumenti di terze parti che devi configurare.

Supporto del menu contestuale (ad esempio, fare clic con il pulsante destro del mouse su un file e consentirne l'invio a emacs per la visualizzazione e la modifica)

  1. Fare clic con il tasto destro su un file, selezionare Open With -> Select Default Program.
  2. Nella finestra che si apre, vai al tuo emacsclientw.exeeseguibile menzionato sopra e selezionalo.
  3. Se non vuoi che Emacs sia quello predefinito, esegui di nuovo i passaggi 1 e 2, scegliendo un programma diverso come predefinito.

emacsclientw.exe sarà ora sempre un'opzione nel menu di scelta rapida.


Grazie - ottimo punto sul server, non stavo pensando.
cristobalito,

Per quanto riguarda emacsclient.exe, non dovrebbe essere emacsclientw.exe? Inoltre, ho pensato che dovevi eseguirlo con il flag -a per specificare un editor alternativo se il server non era in esecuzione.
cristobalito,

Per far funzionare correttamente il server con la mia configurazione, ho anche dovuto aggiungere una variabile d'ambiente EMACS_SERVER_FILEche puntava alla mia .emacs.d\serverdirectory.
Ryan,

@Ryan Sono stato in grado di farlo funzionare senza la necessità della variabile d'ambiente - avevo solo bisogno di assicurarmi che il server fosse in esecuzione.
cristobalito,

Hmm, per me valutare i (server-running-p)ritorni :othersu Windows (anche dopo aver provato a impostare quella EMACS_SERVER_FILEvariante ambientale
Kaushal Modi

5

Avvio automatico di un server se non è già stato avviato

Mi raccomando impostare una variabile d'ambiente per ALTERNATE_EDITORa runemacs.exe. In questo modo puoi sempre chiamare emacsclient anche se non c'è un server. Aggiungi (server-start) al tuo file init. Quando un server non esiste, emacsclient chiama il ALTERNATE_EDITORche è emacs nel nostro caso. Poiché emace avvia un server nel file init, qualsiasi nuova chiamata a emacsclient sarà istantanea.

Come chiamare emacs in modo che utilizzi il server (ad es. Da riga di comando o strumenti di terze parti)

Utilizzare emacsclientw.exe -c -n "your_file"per aprire il tuo file. L' -cargomento crea un nuovo frame grafico e -nconsente di chiudere il frame senza perdere lo stato del server. Puoi persino chiamarlo senza un nome file per aprire il *Scratch*buffer. Funziona anche da un collegamento sul desktop. L'uso di emacsclient.exe(nota la w mancante) farà apparire un prompt dei comandi per alcuni secondi ogni volta che lo chiami.

Aggiunta al menu di scelta rapida

Emacswiki ha una bella pagina sull'aggiunta di Emacs al menu contestuale qui . Implica la modifica del nodo del registro HKEY_CLASSES_ROOT\*per aggiungere un'azione da aprire con emacs.


5

Altri hanno risposto alla parte del server. Ecco cosa faccio, per ottenere utility simili a UNIX / GNU / Linux come grepe diff:

  1. Installa Cygwin (operazione una tantum).
  2. Load cygwin-mount.el.
  3. Load setup-cygwin.el.

Tuttavia, tenere presente che esistono diverse versioni di Cygwin. Uso una versione precedente (non so quale - difficile da dire, AFAICT). Non so se avrai problemi con le versioni recenti.

Guarda anche:


Nota: non utilizzare cygwin EMACS. Installa la build GNU da ftp.gnu.org/gnu/emacs/windows
M Smith

Non consiglio di installare Cygwin, poiché potrebbero esserci effetti collaterali indesiderati (come rompere altre porte di gnu windows come emacs, gcc, ...), per avere solo alcuni strumenti di gnu. Installa invece le porte GnuWin32 . È possibile installare l'intero pacchetto o gli strumenti selezionati di propria scelta.
Seki,

@Seki - Sì, Eli Zaretskii dice la stessa cosa di te. Tutto quello che posso dire è che non ho avuto problemi (e ho seri dubbi sulla tua affermazione di aver rotto Emacs ). Ma (a) sto usando una vecchia versione di Cygwin e (b) non uso la maggior parte delle utility UNIX / GNU Linux fornite da Cygwin.
Disegnò il

@drew: forse eccessivo per parlare di "rompere" emacs, "causare comportamenti strani" sarebbe stato meglio. Ad esempio, Cygwin Make bloccherà la toolchain MinGW se non verifichi attentamente il tuo percorso per gli strumenti Cygwin che non vengono presi in considerazione o presi di default se non esistono altri. Non è limitato a Make, molti altri strumenti non possono mescolarsi e talvolta è sottile indicare il problema. Quindi, in breve, o hai una porta nativa di Emacs ed è meglio avere strumenti GNU nativi, oppure puoi usare l'intera distribuzione Cygwin incluso i suoi emacs.
Seki,

@Seki: Quindi il tuo punto principale è che Cygwin e MingGW non giocano bene insieme. Non è sorprendente per me. (FWIW, non ho nulla contro l'uso di MingGW invece di Cygwin. Per me è stato semplice installare Cygwin e non ne uso abbastanza per aver riscontrato problemi.)
Scritto il
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.