Ejecutar Emacs desde la barra de tareas de Windows

8

Cuando quiero cambiar entre programas en Windows, normalmente uso la tecla de Windows más una tecla numérica para ejecutar un programa desde mi barra de tareas. La mayoría de los programas comenzarán a ejecutarse o, si ya hay una instancia, póngala en primer plano y concéntrese en ella. Pero Emacs (comenzó con runemacs.exe) creará una nueva entrada en la barra de tareas, y usar el acceso directo nuevamente creará una nueva instancia. Por lo que puedo decir, ni siquiera puedo cambiar entre los diferentes cuadros usando los comandos de Emacs (probé Cx 5 o).

¿Hay alguna manera de hacerlo para que los usos posteriores de las teclas de acceso rápido de Windows solo usen la instancia existente de Emacs y, si no, puedo al menos hacerlo para que pueda navegar fácilmente entre los diferentes marcos? Probé este fragmento:

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

de la respuesta a esta pregunta , pero no hizo la diferencia.

resueman
fuente
¿Puedes especificar a qué fragmento te refieres?
nispio
Ese fragmento asegura que se crea un servidor de edición la primera vez que se ejecuta Emacs. Las llamadas posteriores a Emacs que deseen conectarse al mismo servidor de edición deben usarseemacsclientw.exe
nispio
@nispio Ah, eso explica por qué no estaba funcionando. ¿Hay alguna manera de ejecutar todo en el mismo servidor de edición sin necesidad de ejecutarlo desde diferentes ejecutables?
resueman
Esta respuesta probablemente funcionará: emacs.stackexchange.com/a/158/93 . Cuando proporciona runemacs.execomo editor alternativo, puede llamar emacsclientw.exeincluso cuando no hay ningún servidor de edición en ejecución.
nispio
1
Vea mi comentario a la respuesta de nispio sobre cómo evitar crear un nuevo marco.
Vamsi

Respuestas:

5

Agregue esto a su archivo init para asegurarse de que se crea un servidor de edición cuando se inicia emacs

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

Ahora haga que su acceso directo de Windows apunte de la emacsclientw.exesiguiente manera:

C:\path\to\emacsclientw.exe -n -e "(raise-frame)" -a "C:\path\to\runemacs.exe"

Esto debería enfocar un marco Emacs existente (si lo hay), o llamar de runemacs.exeotra manera. (Gracias a Vamsi por su ayuda con el ajuste de los parámetros del comando)

nispio
fuente
Esto funciona como quiero si le paso un archivo para que se ejecute, pero si solo uso el comando tal como está, entonces muestra un error que dice "se requiere nombre de archivo o argumento".
Resueman
@resueman ¿Una -cbandera soluciona ese problema?
nispio
2
@nispio One puede usar C:\path\to\emacsclientw.exe -n -e "(raise-frame)" -a "C:\path\to\runemacs.exe"para evitar crear un nuevo marco y elevar el marco anterior.
Vamsi
@Vamsi, pero sin el -c¿esperará también que se visite un archivo? (Si no puede decir que no estoy en una máquina con Windows en este momento.)
nispio
@Vamsi Eso funciona perfectamente. @nispio parece funcionar bien sin -ctener la -eexpresión.
Resueman
7

Hoy me topé con otra respuesta al problema en SuperUser . Parece más hack, pero el resultado es más consistente con otros programas en Windows.

  1. Ejecute runemacs.exe sin ningún icono preexistente en la barra de tareas.
  2. Haga clic derecho en el icono de Emacs en ejecución en la barra de tareas y haga clic en "anclar este programa a la barra de tareas".
  3. Cerrar Emacs
  4. Haga clic derecho en el icono de Emacs anclado en la barra de tareas, haga clic en Propiedades y cambie el objetivo de emacs.exe a runemacs.exe.
resueman
fuente
1
FWIW, eso es lo que hago. No entendí que eso era lo que querías, de tu pregunta. Pensé que querías usar emacsclient, entre otras cosas. Por cierto, Propertiestambién puede configurar el Start indirectorio y abrir Emacs a un archivo o directorio en particular. (Comienzo Emacs con Dired en el Start indirectorio. IOW, paso el mismo directorio ( "-comillado) como argumento a runemacs.)
Dibujó el
@Drew Probablemente no expliqué muy bien lo que quería. Todavía soy lo suficientemente nuevo como para que sea difícil mantener todo en orden. Gracias por los consejos.
Resueman