Verwendung des Daemon-Modus in Gnome 3

13

Ich habe den Emacs-Daemon dazu gebracht, über die EmacsWiki-Seite über die Befehlszeile zu arbeiten , aber ich weiß nicht , wie der Client über den Gnome 3-Launcher ausgeführt werden kann. Wie kann ich eine Gnome-Desktop-Datei einrichten , die ein GUI-Fenster öffnet, das eine Verbindung zum Emacs-Dämon herstellt?

tbekolay
quelle

Antworten:

16

Ich verwende Ubuntu, daher kann der Speicherort der Desktop-Datei unterschiedlich sein, aber ich denke, der Inhalt sollte ähnlich sein.

$ 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

Der wichtige Teil ist:

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

Zur Verdeutlichung sollte das wohl sein:

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

In der Dokumentation zu emacsclient gehen diese Schalter folgendermaßen vor:

-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

Also macht es einen neuen Frame mit -cund startet einen neuen Emacs-Daemon mit, wenn Emacs noch nicht daemonisiert ist -a "". Schließlich wird es %Fbehoben, so dass Sie eine Textdatei auf das Symbol ziehen können, und es wird geöffnet.

Nebenbei könnten Sie sich auch mit dem Einbeziehen -F "((fullscreen . maximized))"befassen, um zu erzwingen, dass der Frame beim Start maximiert wird. Leider kann ich mich nicht erinnern, welche Emacs-Version dafür benötigt wird.

dgtized
quelle
1
Das funktioniert ansonsten prima, aber es öffnet sich immer ein neues Emacs-Fenster. Bei anderen Startsymbolen wird ein vorhandenes Fenster fokussiert. Gibt es eine Möglichkeit, dasselbe Verhalten zu erzielen?
Akaihola
2

Ich optimiere gerade die Antwort von dgtized, um den Kommentar von akaihola anzusprechen. Dh was wir wollen, ist zu

  • Nutzen Sie die Daemon-Funktionalität von Emacs
  • Beschwöre einen bestehenden Rahmen oder erstelle einen, falls nötig.

Ich finde, dass das Erstellen einer emacs25.desktopDatei eher als emacsclient.desktopmagisch funktioniert (ehrlich gesagt, ich weiß nicht warum).

So tat ich:

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

(Abhängig von Ihrem System ist dies möglicherweise nicht der Fall. emacs25)

Dann habe ~/.local/share/applications/emacs25.desktopich in meinem die Exec-Zeile geändert, um zu sein:

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

Die Bash-Login-Shell stellt sicher, dass der Daemon über meine vollständige Login-Umgebung verfügt.

Und ich habe die TryExecLinie entfernt.

Schließlich bearbeitete Nameich, damit ich es im Launcher erkennen konnte, tippte auf Super und klickte mit der rechten Maustaste, um meinen neuen Artikel zu den Favoriten hinzuzufügen. Ich habe immer den ersten Emacs-Gegenstand für mich, also ruft Super + 1 ihn herbei.

Name=GNU Emacs client

Und alles scheint gut zu sein.

James Ferguson
quelle