Configure Emacs en Windows para iniciar una sola instancia y abrir archivos en la instancia existente


18

Estoy particularmente interesado en la experiencia completa de Windows que incluye:

  • Iniciar automáticamente un servidor si aún no se ha iniciado
  • Cómo llamar a emacs para que utilice el servidor (por ejemplo, desde la línea de comandos o herramientas de terceros)
  • Soporte de menú contextual (por ejemplo, haga clic derecho en un archivo y permita que se envíe a emacs para su visualización y edición)

¿Existe tal soporte disponible en cualquier lugar?

Respuestas:


21

Iniciar automáticamente un servidor si aún no se ha iniciado

Esto debería ser igual para cualquier compilación de Emacs. Agregue este fragmento a su .emacso .emacs.d/init.el.

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

Y luego simplemente inicie emacs ejecutando el runemacs.exeejecutable que viene con la compilación.

Cómo llamar a emacs para que utilice el servidor (por ejemplo, desde la línea de comandos o herramientas de terceros)

La compilación de Windows de Emacs viene con un emacsclientw.exeejecutable en el bin/directorio. Use la ruta completa a ese ejecutable como su editor de elección en cualquier herramienta de terceros que necesite configurar.

Soporte de menú contextual (por ejemplo, haga clic derecho en un archivo y permita que se envíe a emacs para su visualización y edición)

  1. Haga clic derecho en un archivo, seleccione Open With -> Select Default Program.
  2. En la ventana emergente, navegue hasta el emacsclientw.exeejecutable mencionado anteriormente y elíjalo.
  3. Si no desea que Emacs sea el predeterminado, realice los pasos 1 y 2 nuevamente, eligiendo un programa diferente como predeterminado.

emacsclientw.exe ahora siempre será una opción en el menú contextual.


Gracias, gran punto sobre el servidor, no estaba pensando.
cristobalito

Con respecto al emacsclient.exe, ¿no debería ser emacsclientw.exe? Además, pensé que tenía que ejecutar esto con el indicador -a para especificar un editor alternativo si el servidor no se estaba ejecutando.
cristobalito

Para que el servidor funcione correctamente con mi configuración, también tuve que agregar una variable de entorno EMACS_SERVER_FILEque apuntara a mi .emacs.d\serverdirectorio.
Ryan

@Ryan Pude hacer que esto funcionara sin la necesidad de la variable de entorno, solo necesitaba asegurarme de que el servidor estaba funcionando.
cristobalito

Hmm, para mí evaluar los (server-running-p)retornos :otheren Windows (incluso después de intentar configurar esa EMACS_SERVER_FILEvariable de entorno .
Kaushal Modi

5

Iniciar automáticamente un servidor si aún no se ha iniciado

Le recomiendo establecer una variable de entorno para ALTERNATE_EDITORa runemacs.exe. De esta manera, siempre puede llamar a emacsclient incluso si no hay un servidor. Simplemente agregue (inicio de servidor) a su archivo de inicio. Cuando no existe un servidor, emacsclient llama al ALTERNATE_EDITORque es emacs en nuestro caso. Dado que emace inicia un servidor en el archivo init, cualquier llamada nueva a emacsclient será instantánea.

Cómo llamar a emacs para que utilice el servidor (por ejemplo, desde la línea de comandos o herramientas de terceros)

Use emacsclientw.exe -c -n "your_file"para abrir su_archivo. El -cargumento crea un nuevo marco gráfico y le -npermite cerrar el marco sin perder el estado del servidor. Incluso puede llamarlo sin un nombre de archivo para abrir el *Scratch*búfer. Funciona desde un acceso directo de escritorio también. Si usa emacsclient.exe(tenga en cuenta la w que falta), aparecerá un símbolo del sistema durante unos segundos cada vez que lo llame.

Agregar al menú contextual

Emacswiki tiene una buena página sobre cómo agregar Emacs al menú contextual aquí . Implica editar el nodo del registro HKEY_CLASSES_ROOT\*para agregar una acción para abrir con emacs.


5

Otros han respondido la parte del servidor. Esto es lo que hago, para obtener utilidades similares a UNIX / GNU / Linux como grepy diff:

  1. Instale Cygwin (operación única).
  2. Carga cygwin-mount.el.
  3. Carga setup-cygwin.el.

Sin embargo, tenga en cuenta que hay diferentes versiones de Cygwin. Yo uso una versión anterior (no sé cuál, difícil de decir, AFAICT). No sé si tendrá problemas con las versiones recientes.

Ver también:


Nota: No use el cygwin EMACS. Instale la compilación GNU desde ftp.gnu.org/gnu/emacs/windows
M Smith

No recomiendo instalar Cygwin, ya que puede haber efectos secundarios no deseados (como romper otros puertos de ventanas gnu como emacs, gcc, ...), solo por tener algunas herramientas gnu. En su lugar, instale puertos GnuWin32 . Puede instalar el paquete completo o las herramientas seleccionadas de su elección.
Seki

@Seki: Sí, Eli Zaretskii dice lo mismo que tú. Todo lo que puedo decir es que no he tenido ningún problema (y tengo serias dudas sobre su reclamo de que rompa Emacs ). Pero (a) estoy usando una versión anterior de Cygwin y (b) no uso la mayoría de las utilidades UNIX / GNU Linux proporcionadas por Cygwin.
Dibujó el

@drew: quizás excesivo por hablar de "romper" emacs, "causar un comportamiento extraño" hubiera sido mejor. Por ejemplo, Cygwin Make frenará la cadena de herramientas MinGW si no verifica cuidadosamente su ruta para que las herramientas Cygwin no se tengan en cuenta o se tomen por defecto si no existen otras. No se limita a Make, muchas otras herramientas no se pueden mezclar y, a veces, es sutil señalar el problema. En resumen, o tiene un puerto nativo de Emacs y es mejor tener herramientas GNU nativas, o puede usar toda la distribución de Cygwin, incluidos sus emacs.
Seki

@Seki: Parece que tu punto principal es que Cygwin y MingGW no juegan bien juntos. Eso no me sorprende. (FWIW, no tengo nada en contra de usar MingGW en lugar de Cygwin. Para mí fue simple instalar Cygwin, y no uso suficiente para haber encontrado problemas.)
Drew
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.