Impostazione di emacsclient su MS Windows


13

Sto cercando di configurare il demone del server emacs e utilizzare emacsclient su MS Windows in modo che i file possano essere aperti rapidamente senza il ritardo e l'overhead associati all'avvio di istanze aggiuntive di emacs per ogni file aperto. Sto seguendo le istruzioni specifiche fornite in emacswiki per MS Windows che prevede:

  1. Eseguendo emacs come demone, runemacs.exe --daemon
  2. Seguito invocando emacsclientw.execon le opzioni appropriate.

L'avvio del daemon ha esito positivo (vedo emacs.exe nell'elenco dei processi), ma invocare emacsclient produce errori. Il wiki dice di creare una scorciatoia per emacsclientw.exee cambiare l'obiettivo in

X:\path\to\emacs\bin\emacsclientw.exe -na "X:\path\to\emacs\bin\emacsclientw.exe" -c -n

È corretto? Sembra che il client sia invocato due volte. L'uso del target come mostrato non esegue il programma e produce l'errore "nome file o argomento richiesto". Utilizzando solo la prima parte del target mostrato sopra

X:\path\to\emacs\bin\emacsclientw.exe -na

produce un errore generico. Utilizzando solo la seconda parte

X:\path\to\emacs\bin\emacsclientw.exe -c -n

produce l'errore "Nessun socket o editor alternativo." (Le opzioni ufficiali di emacsclient sono descritte qui. )

Eventuali suggerimenti? Emacs funziona bene in modalità standard, cioè non in modalità demone. Versione 25.1. Preferirei eseguire il demone piuttosto che avviare il server nel mio file di inizializzazione.

Risposte:


6

Non sono così sicuro del consiglio nella pagina emacswiki. Quello che vuoi fare è il seguente:

  • Avvia un client emacs connesso al server emacs in esecuzione.
  • Se il server emacs non è in esecuzione, avviarlo e quindi connettere il client emacs.
  • Non aspettare che il client finisca (se stai iniziando da una riga di comando).

Il comando che uso è

C:\emacs\bin\emacsclientw.exe -n -c -a ""

I -n mezzi non aspettano il cliente alla fine quando si sta lanciando da linea di comando. Il -a consente di specificare un editor alternativo se il server emacs non è in esecuzione , ma se si dà una stringa vuota, si cercherà di avviare il server emacs e connettersi ad esso. Infine, se lo metti in un collegamento di Windows, vuoi anche aggiungere un -c che aprirà un nuovo frame ( vedi le opzioni di emacsclient ).

Ecco la mia scorciatoia, funziona per me (su Windows 7, Emacs 25.3). Non so perché la pagina di emacswiki metta un'altra invocazione di emacsclientw come editor alternativo che non ha senso.

Dovrei aggiungere che quando provo a omettere l' opzione -c quando corro come scorciatoia , dà un errore.

scorciatoia emacsclientw


La configurazione del collegamento emacsclientw.exe nel modo mostrato produce: Error: Cannot connect even after starting the Emacs daemonConfermato questo collegamento avvia il processo daemon, ma i file si aprono ancora nella propria istanza di emacs. Testato con e senza privilegi di amministratore. Emacs 25.1, Windows 7.
Snelephant

@Snelephant, hmm, non so cosa potrebbe esserci di sbagliato. Ho persino effettuato il downgrade a emacs 25.1 e il mio collegamento funzionava ancora. Come si aprono i file tramite un menu di scelta rapida o con il comando nel collegamento seguito dal nome file?
Angelo,

L'errore si verifica sia quando faccio clic sul collegamento a emacsclientw.exe stesso senza alcun file specificato, sia quando faccio clic su un collegamento a un file di testo con emacsclientw.exe e il nome file specificato nel campo Destinazione. In realtà, non sono chiaro sul metodo previsto per aprire i file nel client su Windows? Vorrei semplicemente fare clic sul file in Esplora risorse. Fare clic su un file in OSX sembra aprire il file in un'istanza esistente, ma facendo clic su un file in Windows si crea un'istanza separata. Nota Ho configurato Windows per aprire i file di testo usando runemacs.exe fornito con emacs.
Snelephant,

Se hai configurato Windows per aprire i file di testo con runemacs.exe, si apriranno in processi Emacs separati. Vorresti cambiare quell'associazione per usare invece emacsclientw.
glucas,

@glucas Modificate le associazioni dei file di testo con il collegamento a emacsclientw.exe come descritto da Angelo. Fare clic su un file di testo produce lo stesso Error: Cannot connect even after starting the Emacs daemon.
Snelephant,

2

Il comando che uso è:

emacsclientw.exe --create-frame --no-wait --alternate-editor runemacs.exe --server-file %APPDATA%\.emacs.d\server\server

(Se la cartella del cestino di Emacs non è nella tua PATH, usa i percorsi completi per emacsclientw.exee runemacs.exe.)

o con i nomi delle opzioni brevi e il trucco della stringa vuota,

emacsclientw.exe -c -n -a "" -f %APPDATA%\.emacs.d\server\server

Nota che il trucco della stringa vuota -aavvierà il demone se non è in esecuzione, ma questo non dovrebbe funzionare fino a Emacs 26 (sono ancora su 25). Prima del 26 devi specificare esplicitamente l'editor alternativo. Ho usato runemacs.exe, ma il mio Emacs è configurato per avviare il server e lasciarlo in esecuzione.

Poiché a Windows mancano i socket di dominio Unix locali emacsclientnormalmente utilizzati per connettersi al server, è necessario ricorrere all'utilizzo di un socket TCP di rete. Per ovvi motivi di sicurezza, non vuoi che chiunque sulla tua rete acceda all'intero file system tramite il server Emacs. Pertanto, è emacsclientnecessario conoscere la porta (effimera) e il token di sicurezza corretti scritti nel file del server prima che il server gli consenta la connessione.

Se il server è già in esecuzione, non dovresti aver bisogno di -a(ma non fa male). È possibile impostare la ALTERNATE_EDITORvariabile di ambiente invece di utilizzare -a.

Se si imposta la EMACS_SERVER_FILEvariabile di ambiente, non è necessario specificarla di nuovo con -f.


0

Per Emacs 26.3 e Windows 10 funziona:

Demone : C:\YOUR_EMACS\emacs-26.3\bin\emacs.exe "--daemon"

Cliente : ad es .:C:\YOUR_EMACS\emacs-26.3\bin\emacsclientw.exe "temp.org"

Quando aggiungi l'eseguibile Emacs in PATH, puoi facilmente aprirlo emacsclientw.exeda qualsiasi luogo. Inoltre puoi aggiungere un demone nella cartella di avvio: C:\Windows\System32\cmd.exe /c start /high emacs.exe "--daemon"

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.