Da emacsclient lange Ladezeiten von Paketen problemlos verarbeiten kann, möchte ich wirklich mindestens einen Emacs-Prozess und meistens nur einen Emacs-Prozess beibehalten, als Hintergrundprozess öffnen und die GUI besser ausblenden.
Im Moment habe ich die folgende Funktion in .bashrc definiert:
emc ()
{
if [[ $# -eq 0 ]]; then
emacs --eval "(suspend-frame)" &
return
fi
args=($*);
setsid emacsclient -c -e "(find-file \"${args[*]}\")"
}
Und haben Sie auch die folgende Zeile in .bashrc:
emc
Jedes Mal, wenn ich eine Shell öffne, habe ich einen neuen Emacs-Prozess.
Das Problem ist, dass ich nach dem Öffnen vieler Muscheln viele zusätzliche unnötige Emacs-Prozesse haben werde. Ich möchte jedoch immer nur einen einzigen Emacs-Prozess vom Start an beibehalten, um die GUI besser zu verbergen .
emacsclient
gui
falsche Sammlerstücke
quelle
quelle
emacs --eval "(suspend-frame)"
stattemacs --daemon
( emacswiki.org/emacs/EmacsAsDaemon ). Gibt es einen Grund, warum Sie Emacs nicht als Daemon aufrufen? Sie könnten so etwas verwenden,pgrep -U `whoami` emacs || emacs --daemon &
um sicherzustellen, dass es ausgeführt wird.Antworten:
Ich starte dazu einen Emacs-Daemon, wenn ich mich anmelde. Wo Sie diesen Befehl eingeben, hängt von Ihrem Desktop-Manager ab. Ich verwende
i3
, das so konfiguriert ist, dass beim Anmelden ein Skript ausgeführt wird, das Folgendes enthält:Damit läuft emacs immer im Hintergrund, und ich öffne einen neuen Client mit
emacsclient -c -n
, gebunden an eine bequeme Tastenkombination im Fenstermanager. Wenn Sie in einem Terminal arbeiten, benötigen Sie nur eine einfache alias wiealias emc='emacsclient'
, möglicherweise mit-n
,-c
oder-t
Argumente, je nachdem , wie Sie es verwenden.Überprüfen Sie die Optionen für emacsclient im Handbuch: ( (emacs) emacsclient-Optionen , auf die von Emacs aus zugegriffen werden kann
C-h r m emacsclient options <enter>
). Sie können das-a
Flag verwenden, um einen Emacs-Daemon automatisch zu starten, wenn er noch nicht ausgeführt wird,-c
oder-t
um einen neuen Frame oder Terminal-Client zu öffnen, anstatt einen vorhandenen (in derselben Sitzung) wiederzuverwenden:quelle
Wenn Sie ein Betriebssystem verwenden, das den systemd Service Manager verwendet (der heutzutage die meisten GNU / Linux-Distributionen enthält), ist es möglicherweise die beste Lösung, systemd zu verwenden, um Ihren Emacs-Daemon beim Booten zu starten. Sie können dies tun, indem Sie eine Datei
$HOME/.config/systemd/user/emacs.service
mit den folgenden Inhalten erstellen :Dann sollten Sie den Dienst starten und so einstellen, dass er für alle zukünftigen Starts automatisch gestartet wird:
Sie können jetzt
emacsclient
wie gewohnt verwenden. Wenn Sie normalerweise mit den laufen-n
,-c
oder-t
Optionen können Sie einen Alias in der Shell eingestellt. Möglicherweise möchten Sie auch die VariablenEDITOR
und / oderVISUAL
Umgebungsvariablen so einstellen, dass sie nach Ihren Wünschen ausgeführtemacsclient
werden. In Bash können Sie Ihrer.bashrc
Datei beispielsweise Folgendes hinzufügen :Wenn Sie den Emacs-Daemon jemals stoppen müssen, können Sie dies wie folgt tun:
Und wenn Sie dauerhaft verhindern möchten, dass es beim Booten ausgeführt wird:
quelle
Die Art und Weise, wie ich das mache, ist einer vorherigen Antwort ziemlich ähnlich, da in meiner .bashrc für einen Alias definiert ist
emacs --daemon
Abgesehen davon habe ich eine Tastenkombination
ctrl-alt-E
eingestelltemacsclient -c
. Wenn ich mit der Arbeit an Emacs beginnen möchte, öffne ich ein Terminal undds
tippe jede Emacsclient-Instanz mit meiner Verknüpfung ein und rufe sie auf.Hoffe das hilft jemandem.
quelle