Ist es möglich, gnus
in einer separaten Emacs-Instanz zu laufen oder andere Dinge, die häufig blockieren, und die Puffer an die Haupt-Emacs-Instanz weiterzuleiten? Ich denke, allgemein frage ich mich, welche Art von Kommunikation zwischen Emacs-Instanzen möglich ist.
7
frame-bufs
github.com/alpaker/Frame-Bufs oder einer Vielzahl anderer Organisationsbibliotheken (z. B. Projekte) , usw.). Kurz gesagt, es gibt viele Möglichkeiten, eine enorme Menge aktiver Puffer innerhalb einer Emacs-Instanz effektiv zu organisieren.el-screen
für die Pufferorganisation zu verwenden , aber ein projektorientierter Ansatz könnte sinnvoller sein. Ich stelle mir eher einen Master-Emacs und ein paar kopflose Arbeiter-Emacses vor, die Dinge wie blockierengnus
. Einfachste mögliche Lösung Die Emacses kommunizieren über Sockets oder die Master-Emacs erzeugen einen kurzlebigen Worker und die gesamte Kommunikation erfolgt über stdin und stdout, aber dann müsste ich mir große Mühe geben, um emacs-spezifische Objekte zu serialisieren und zu deserialisieren (das ist das harte Arbeit versuche ich zu vermeiden).Antworten:
Stellen Sie sicher, dass auf jeder Emacs-Instanz ein Daemon mit einem eindeutigen Namen ausgeführt wird. Stellen Sie die Variable ein
server-start
, um beispielsweise den Servernamen auszuwählenVon einer Instanz aus können Sie mit der Funktion Code in einer anderen Instanz ausführen
server-eval-at
. Der Wert des Ausdrucks wird an die lokale Instanz zurückgegeben. Es muss ein Wert sein, der zurückgelesen werden kann: Ganzzahlen, Zeichenfolgen, Listen und andere „transparente“ Datenstrukturen sind in Ordnung, aber Sie können Puffer, Frames usw. auf diese Weise übertragen.Mit dieser Funktion können Sie einer anderen Instanz anweisen, einen Frame zu öffnen, die Puffernamen in einer anderen Instanz aufzulisten usw. Beachten Sie, dass Ihr Code blockiert, wenn die andere Instanz ausgelastet ist, bis er auf den Dämon antwortet.
Es gibt nicht viel Code, der diese Funktion verwendet: Die meisten Emacs-Benutzer führen eine einzelne Instanz aus. Was auch immer Sie tun möchten, Sie müssten wahrscheinlich einige Codierungsarbeiten durchführen.
quelle
emacs --daemon=gnus
stattemacs --daemon --eval '(setq server-name "gnus")'
Emacsclient
Verwenden Sie anstelle von Emacs den Emacsclient. Zuerst müssen Sie a
(server-start)
in Ihrem Emacs (en) ausführen und dann den Client in einem eigenen Frame mit ausführenemacsclient -c test.mac
.Sie können auch verschiedene Serverdateien anhand der Optionen
-f ServerFile
(unter Windows) oder Servernamen unterscheiden-s ServerName
. Bitte schauen Sie unter http://www.gnu.org/software/emacs/manual/html_node/emacs/emacsclient-Options.html nach . Zu diesem Zweck müssen Sie unterschiedliche Servernamen für die verschiedenen Emacsen:(setq server-name "Server1")
usw. festlegen .quelle