In meinem Setup werden auf meinem lokalen Computer mehrere (GNU) Emacs-Instanzen gleichzeitig ausgeführt, eine für jedes Projekt oder jede Aufgabe, an der ich gerade arbeite.
Ich möchte in der Lage sein, Puffer in einer bereits laufenden Emacs-Instanz zu öffnen, beispielsweise durch einen Befehl wie
$ emacs file.txt
Die normalerweise vorgeschlagene Lösung besteht darin, Emacs im Servermodus auszuführen. Dies steht jedoch im Widerspruch zu meiner Verwendung mehrerer Emacs-Instanzen, da ich verstehe, dass standardmäßig immer nur ein einziger Emacsclient aktiv sein kann.
Wie kann ich Dateien als Puffer in vorhandenen (möglicherweise mehreren) Emacs-Instanzen öffnen? Das endgültige Ziel besteht darin, die Datei in der Emacs-Instanz zu öffnen, die sich im aktuellen Arbeitsbereich (Compiz) befindet, oder eine solche Instanz zu erstellen, falls sie noch nicht vorhanden ist.
quelle
Antworten:
Diese Antwort hat die allgemeine Methode, obwohl die Frage anders war als Ihre.
Sie können
emacs --daemon=workspaceN
kombiniert mit verwendenemacsclient -s workspaceN
, um einen Emacs-Daemon im Arbeitsbereich N zu haben. Wenn Sie mehrere benötigen, führen Sie einfach Arbeitsbereich1, Arbeitsbereich2 usw. aus. Beachten Sie, dass der Name des Dämons völlig willkürlich ist und Sie ein beliebiges Benennungsschema verwenden können.Es wird wahrscheinlich schwieriger sein, festzustellen, in welchem Arbeitsbereich Sie sich befinden, und ich weiß nicht, wie ich es bestimmen soll. Wenn Sie eine Umgebungsvariable haben, reicht wahrscheinlich ein Shell-Alias oder eine Shell-Funktion aus (wenn Sie Dinge nur über die Shell öffnen möchten).
quelle
server-name
dasselbe tun, ohne einen Emacs-Daemon verwenden zu müssen. Stellen Sie es einfach vor dem Laufen ein(server-start)
. Es ist möglich, einen Wert festzulegen, der vom Wert voncommand-line-args
abhängt, um etwas Ähnliches wie den--daemon
Aufruf zu simulieren--daemon
Lösung im Prinzip funktioniert, habe ich jetzt Probleme mit dem letzten Teil meiner Frage: "... oder eine solche Instanz zu erstellen, wenn sie noch nicht existiert." Ich kann entweder passieren-c
zuemacsclient
oder nicht, aber es scheint nicht etwas dazwischen zu sein (was ich brauchen würde). Könnten Sie Ihre Lösung erläutern? Wie kann ichserver-name
vor dem Ausführenserver-start
festlegen (set-variable reicht nicht aus, da die Variable noch nicht vorhanden ist). Eine init.el-Lösung, dieserver-name
von den Befehlszeilenargumenten abhängt, ist genau das, wonach ich suche.(set-variable 'server-name "foo")
arbeitete für mich. Hast du daran gedacht zu zitierenserver-name
? Außerdem: Sie könnenserver-running-p
damit überprüfen, ob der Server bereits ausgeführt wird.Soweit ich weiß, können Sie Emacs im Servermodus verwenden, um das zu erhalten, wonach Sie suchen. Ich habe oft mehrere Emacsclient-Instanzen in verschiedenen Arbeitsbereichen, wodurch ich beispielsweise problemlos Puffer zwischen ihnen austauschen kann.
Folgendes mache ich:
emacs --daemon
in meinem an.xinitrc
emacsclient -c
im Arbeitsbereich 2 ausführenemacsclient -t
in Arbeitsbereich 1 ausführen (wenn ich normalerweise einen Vollbild-tmux behalte)Ich kann in jedem Fall Puffer bearbeiten und schnell von Begriff zu GUI und umgekehrt wechseln.
Weitere Ansätze finden Sie unter Starten Sie zwei separate Emacs-Daemons für Konsole und GUI
quelle