Usar el modo demonio en Gnome 3

14

He conseguido que el demonio Emacs trabaje a través de la línea de comandos usando la página EmacsWiki , pero no sé cómo hacer que el cliente ejecute el iniciador de Gnome 3. ¿Cómo puedo configurar un archivo de escritorio Gnome que inicia una ventana GUI que se conecta al demonio Emacs?

tbekolay
fuente

Respuestas:

17

Estoy usando Ubuntu, por lo que la ubicación del archivo de escritorio puede ser diferente, pero creo que el contenido debería ser similar.

$ cat ~/.local/share/applications/emacsclient.desktop 
#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Name=GNU Emacs 24
GenericName=Text Editor
Comment=View and edit files
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec=/usr/bin/emacsclient -c -a "" %F
Icon=/usr/share/icons/hicolor/scalable/apps/emacs-snapshot.svg
Type=Application
Terminal=false
Categories=Utility;Development;TextEditor;
StartupWMClass=Emacs
Name[en_US]=GNU Emacs 24

La parte importante es:

Exec=/usr/bin/emacsclient -c -a "" %F

Para aclarar que probablemente debería ser:

Exec=/usr/bin/emacsclient --create-frame --alternate-editor "" %F

De la documentación en emacsclient, esos conmutadores hacen lo siguiente:

-c, --create-frame      Create a new frame instead of trying to
                        use the current Emacs frame
-a EDITOR, --alternate-editor=EDITOR
                        Editor to fallback to if the server is not running
                        If EDITOR is the empty string, start Emacs in daemon
                        mode and try connecting again

Por lo tanto, -ccrea un nuevo marco utilizando y luego, si emacs aún no está demonizado, comienza un nuevo demonio con emacs -a "". Finalmente, lo %Fcorrige para que pueda arrastrar un archivo de texto al icono y lo abrirá.

Solo como un lado, también puede considerar incluir -F "((fullscreen . maximized))"para forzar que el marco se maximice en el lanzamiento. Desafortunadamente, no puedo recordar qué versión de emacs se requiere para que eso funcione.

dgtized
fuente
1
Esto funciona de otra manera genial, pero siempre abre una nueva ventana de Emacs. Para otros íconos de iniciador, se enfoca una ventana existente. ¿Hay alguna manera de obtener el mismo comportamiento?
akaihola
2

Realmente solo estoy ajustando la respuesta de dgtized para abordar el comentario de akaihola. Es decir, lo que queremos es

  • hacer uso de la funcionalidad daemon de Emacs
  • convocar un marco existente o crear uno si es necesario.

Me parece que crear un emacs25.desktoparchivo en lugar de emacsclient.desktoptrabajar mágicamente (francamente, no sé por qué).

Así que lo hice:

cp /usr/share/applications/emacs25.desktop ~/.local/share/applications

(dependiendo de su sistema, puede no serlo emacs25)

Luego en mi ~/.local/share/applications/emacs25.desktopcambié la línea Exec para ser:

Exec=/bin/bash --login -c "emacsclient --alternate-editor= --create-frame %F"

El shell de inicio de sesión bash se asegura de que el demonio tenga mi entorno de inicio de sesión completo.

Y quité la TryExeclínea.

Finalmente, edité Namepara poder reconocerlo en el iniciador, hice clic en Super e hice clic derecho para agregar mi nuevo elemento a favoritos. Siempre tengo Emacs como primer elemento para mí, entonces Super + 1 lo invoca.

Name=GNU Emacs client

Y todo parece estar bien.

James Ferguson
fuente