it-swarm.com.de

Wie kann ich dafür sorgen, dass das Ausführen von emacsclient über den Unity Launcher ein vorhandenes Emacs-Fenster wiederverwendet

Wenn Sie einen Emacsclient-Launcher durch Kopieren einer .desktop-Datei (z. B. der Emacs-Datei) erstellen, verhält sich dieser nicht wie der Standard-Unity-Launcher. Es wird immer ein neues Fenster geöffnet. Es wird nicht erkannt, dass vorhandene Emacsclient-Fenster vorhanden sind, um zu ihnen zu springen. Wie kann ich dafür sorgen, dass es sich verhält?

Als Hintergrund ist dies ein sehr nützlicher Verwendungsmodus für Emacs, in dem Sie es als Daemon ausführen: emacs --daemon, und dann rufen Sie mit emacsclient ein Emacs-Fenster auf. Eine gute Möglichkeit, dies für gewohnheitsmäßige Emacs-Benutzer zu tun, besteht darin, emacs --daemon in Ihre Startup-Anwendungen einzufügen.

12
james.ferguson

Die Lösung besteht darin, eine emacsclient.desktop -Datei zu erstellen, die eine Direktive zu der Klasse des Fensters enthält, wobei die StartupWMClass-Einstellungen verwendet werden. Ohne sie kann Unity nicht feststellen, dass dieses Fenster von Emacsclient stammt. Dadurch wird eine erstellt, die auf dem Inhalt des Emacs basiert (/usr/share/applications/emacs23.desktop):

mkdir -p ~/.local/share/applications
cat > !$/emacsclient.desktop <<EOF
[Desktop Entry]
Version=1.0
Name=Emacsclient
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 %F
Icon=/usr/share/icons/hicolor/scalable/apps/emacs23.svg
Type=Application
Terminal=false
Categories=Utility;Development;TextEditor;
StartupWMClass=Emacs
EOF

Platzieren Sie den Emacsclient im Launcher (z. B. tippen Sie auf Super, geben Sie "emacsclient" ein, ziehen Sie ihn auf) und melden Sie sich ab/an.

16
james.ferguson

Lösung von james.ferguson funktioniert gut. Was ich wollte, war die Verknüpfung von emacsclient mit einigen Dateitypen als "bevorzugte Anwendung". Dafür habe ich James 'Skript mit einer neuen "Exec" -Zeile gefunden

Exec=/usr/bin/emacsclient --alternate-editor emacs24 --no-wait %F

funktioniert besser für mich: es wird ein neuer Emac ausgeführt, wenn keiner ausgeführt wird, es wird kein neues Fenster geöffnet und es wird nicht dafür gesorgt, dass sich Emacs über Clients beschwert, die immer noch darauf warten, dass etwas passiert.

Jetzt kann ich auf Dateien klicken und sie werden in einem laufenden Emacs geöffnet, falls einer existiert, ansonsten startet Emacs.

2
user127094

Eine andere Möglichkeit ist die Verwendung eines Skript :

if [ "$(pidof emacs)" ] ; then
    emacsclient "[email protected]" &
else
    emacs -mm "[email protected]" &
fi

Sie rufen also immer den gleichen Befehl auf.

1
yPhil