Utiliser le mode démon dans Gnome 3

14

J'ai réussi à faire fonctionner le démon Emacs via la ligne de commande à l'aide de la page EmacsWiki , mais je ne sais pas comment faire exécuter le client via le lanceur Gnome 3. Comment puis-je configurer un fichier de bureau Gnome qui lance une fenêtre GUI qui se connecte au démon Emacs?

tbekolay
la source

Réponses:

17

J'utilise Ubuntu, donc l'emplacement du fichier de bureau peut être différent mais je pense que le contenu devrait être similaire.

$ 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 partie importante est:

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

Pour clarifier cela devrait probablement être:

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

À partir de la documentation sur emacsclient, ces commutateurs procèdent comme suit:

-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

Donc, il crée un nouveau cadre en utilisant -cpuis si emacs n'est pas déjà démonisé il démarre un nouveau démon emacs avec -a "". Enfin, le %Fcorrige pour que vous puissiez faire glisser un fichier texte sur l'icône et il l'ouvrira.

Juste à côté, vous pouvez également envisager d'inclure -F "((fullscreen . maximized))"pour forcer le cadre à maximiser au lancement. Malheureusement, je ne me souviens pas quelle version d'emacs est requise pour que cela fonctionne.

dgtized
la source
1
Cela fonctionne autrement, mais ouvre toujours une nouvelle fenêtre Emacs. Pour les autres icônes du lanceur, une fenêtre existante est mise au point. Existe-t-il un moyen d'obtenir le même comportement?
akaihola
2

Je suis vraiment en train de peaufiner la réponse de dgtized pour répondre au commentaire d'Akaihola. C'est à dire ce que nous voulons c'est

  • utiliser la fonctionnalité démon d'Emacs
  • invoquer un cadre existant ou en créer un si nécessaire.

Je trouve que la création d'un emacs25.desktopfichier plutôt que emacsclient.desktoppar magie a fonctionné (franchement, je ne sais pas pourquoi).

J'ai donc fait:

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

(selon votre système, il se peut que ce ne soit pas le cas emacs25)

Ensuite, dans mon ~/.local/share/applications/emacs25.desktopj'ai changé la ligne Exec pour être:

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

Le shell de connexion bash s'assure que le démon dispose de mon environnement de connexion complet.

Et j'ai supprimé la TryExecligne.

Enfin, j'ai édité Nameafin que je puisse le reconnaître dans le lanceur, appuyez sur Super et cliquez avec le bouton droit pour ajouter mon nouvel élément aux favoris. J'ai toujours Emacs le premier élément pour moi, alors Super + 1 l'invoque.

Name=GNU Emacs client

Et tout semble aller bien.

James Ferguson
la source