Configurar emacsclient en MS windows

13

Estoy tratando de configurar el demonio del servidor emacs y usar emacsclient en MS Windows para que los archivos se puedan abrir rápidamente sin el retraso y la sobrecarga asociados con el inicio de instancias adicionales de emacs para cada archivo abierto. Estoy siguiendo las instrucciones específicas proporcionadas en emacswiki para MS Windows que implica:

  1. Ejecutando emacs como demonio, runemacs.exe --daemon
  2. Seguido invocando emacsclientw.execon las opciones apropiadas.

El inicio del daemon tiene éxito (veo emacs.exe en la lista de procesos), pero invocar emacsclient produce errores. La wiki dice crear un atajo emacsclientw.exey cambiar el objetivo a

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

¿Es esto correcto? Parece que el cliente se invoca dos veces. El uso del destino como se muestra no ejecuta el programa y produce el error "nombre de archivo o argumento requerido". Usando solo la primera parte del objetivo que se muestra arriba

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

produce un error genérico Usando solo la segunda parte

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

produce el error "Sin socket o editor alternativo". (Las opciones oficiales de emacsclient se describen aquí ) .

¿Alguna sugerencia? Emacs funciona bien en modo estándar, es decir, no en modo demonio. Versión 25.1. Preferiría ejecutar el daemon en lugar de iniciar el servidor en mi archivo de inicialización.

Snelephant
fuente

Respuestas:

6

No estoy tan seguro sobre el consejo en la página de emacswiki. Lo que quieres hacer es lo siguiente:

  • Inicie un cliente emacs conectado al servidor emacs en ejecución.
  • Si el servidor emacs no se está ejecutando, inícielo y luego conecte el cliente emacs.
  • No espere a que el cliente termine (si está comenzando desde una línea de comando).

El comando que uso es

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

El -n significa que no espere a que el cliente termine cuando inicie desde la línea de comandos. El -a le permite especificar un editor alternativo si el servidor emacs no se está ejecutando , pero si le da una cadena vacía, intentará iniciar el servidor emacs y conectarse a él. Finalmente, si está poniendo esto en un acceso directo de Windows, también desea agregar un -c que abrirá un nuevo marco ( vea las opciones de emacsclient ).

Aquí está mi acceso directo, funciona para mí (en Windows 7, emacs 25.3). No sé por qué la página de emacswiki puso otra invocación de emacsclientw como el editor alternativo que no tiene sentido.

Debo agregar que cuando intento omitir la opción -c cuando se ejecuta como acceso directo , se produce un error.

acceso directo de emacsclientw

Angelo
fuente
La configuración del acceso directo emacsclientw.exe de la manera que se muestra produce: Error: Cannot connect even after starting the Emacs daemonConfirmado que este acceso directo inicia el proceso del demonio, pero los archivos aún se abren en su propia instancia de emacs. Probado con y sin privilegios de administrador. Emacs 25.1, Windows 7.
Snelephant
@Snelephant, hmm, no sé qué podría estar mal. Incluso bajé a emacs 25.1 y mi acceso directo aún funcionaba. ¿Cómo está abriendo archivos a través de un menú contextual o con el comando en el acceso directo seguido del nombre del archivo?
Angelo
El error ocurre cuando hago clic en el acceso directo a emacsclientw.exe sin ningún archivo especificado y cuando hago clic en un acceso directo a un archivo de texto con emacsclientw.exe y el nombre de archivo especificado en el campo Destino. En realidad, no tengo claro el método previsto para abrir archivos en el cliente en Windows. Me gustaría hacer clic en el archivo en el Explorador de Windows. Al hacer clic en un archivo en OSX parece abrir el archivo en una instancia existente, pero al hacer clic en un archivo en Windows se crea una instancia separada. Tenga en cuenta que he configurado Windows para abrir archivos de texto usando runemacs.exe provisto con emacs.
Snelephant
Si ha configurado Windows para abrir archivos de texto con runemacs.exe, se abrirán en procesos Emacs separados. Desea cambiar esa asociación para usar emacsclientw en su lugar.
glucas 01 de
@glucas Cambió las asociaciones de archivos de texto al acceso directo a emacsclientw.exe como describió Angelo. Al hacer clic en un archivo de texto se produce lo mismo Error: Cannot connect even after starting the Emacs daemon.
Snelephant
2

El comando que uso es:

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

(Si la carpeta bin Emacs no está en su PATH, use las rutas completas para emacsclientw.exey runemacs.exe.)

o con los nombres cortos de las opciones y el truco de la cadena vacía,

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

Tenga en cuenta que el truco de la cadena vacía para -ainiciará el demonio si no se está ejecutando, pero se supone que esto no funcionará hasta Emacs 26 (todavía estoy en 25). Antes del 26 debe especificar el editor alternativo explícitamente. Solía runemacs.exe, pero mi Emacs está configurado para iniciar el servidor y dejarlo en funcionamiento.

Debido a que Windows carece de los sockets de dominio de Unix locales que emacsclientnormalmente se habrían utilizado para conectarse al servidor, tiene que recurrir al uso de un socket TCP de red. Por razones obvias de seguridad, no desea que cualquiera en su red acceda a todo su sistema de archivos a través del servidor Emacs. Por lo tanto, emacsclientdebe conocer el puerto correcto (efímero) y el token de seguridad escrito en el archivo del servidor antes de que el servidor le permita conectarse.

Si el servidor ya se está ejecutando, entonces no debería necesitar el -a(pero no hace daño). Puede establecer la ALTERNATE_EDITORvariable de entorno en lugar de usar -a.

Si configura la EMACS_SERVER_FILEvariable de entorno, no necesita especificarla nuevamente con -f.

gilch
fuente
0

Para Emacs 26.3 y Windows 10 funciona:

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

Cliente : por ejemplo:C:\YOUR_EMACS\emacs-26.3\bin\emacsclientw.exe "temp.org"

Cuando agrega el ejecutable de Emacs PATH, puede abrirlo fácilmente emacsclientw.exedesde cualquier lugar. También puede agregar daemon en la carpeta de inicio: C:\Windows\System32\cmd.exe /c start /high emacs.exe "--daemon"

Michal
fuente