Comment puis-je emacsclient -a '' -n
créer un nouveau cadre uniquement s'il n'y en a pas déjà un?
Le problème avec le -c
drapeau est qu'il crée un nouveau cadre à chaque fois. Le problème sans cela est que s'il n'y a pas de cadre ouvert, il s'ouvrira dans la ligne de commande.
Si je peux vérifier s'il y a un cadre Emacs ouvert à partir du shell, je peux appeler avec ou sans en -c
fonction de cela pour obtenir le comportement que je veux. J'ai essayé:
$ emacsclient -a '' --eval '(frames-on-display-list)'
(#<frame F1 0xba2740>)
J'obtiens toujours le même résultat.
Je pourrais utiliser des fichiers temporaires ou pgrep, mais ces approches sont très sujettes aux erreurs.
C'est similaire à cette question , mais ce n'est pas un doublon, car l'OP y était satisfait d'avoir à avoir une trame ouverte avant d'appeler emacsclient
.
frames
emacsclient
x11
spelufo
la source
la source
elisp
,bash
et dessh
réponses.Réponses:
J'ai fini par faire ce script basé sur ça
S'il n'y a pas d'affichage, il s'ouvre avec
-nw
. Si$DISPLAY
est défini, il recherche des cadres dans cet affichage pour voir s'il doit en créer un nouveau.Edit: je l'ai modifié pour que vous puissiez spécifier manuellement
-nw
si vous souhaitez ouvrir dans un terminal même s'il y a un affichage.la source
$@
doit être citée .Vous pouvez utiliser:
pour vérifier si le serveur Emacs
"server_name"
est déjà en cours d'exécution. Si la commande renvoie le code de sortie 0, elle est en cours d'exécution. Si oui, utilisez simplement laemacsclient
commande:S'il ne fonctionne pas, vous pouvez ouvrir un nouveau serveur Emacs avec par exemple:
la source
emacsclient -a ''
démarreemacs --daemon
si nécessaire, qui persiste même si vous fermez la coque.&
à la fin de la commande; cela signifie exécuter le serveur en tant que processus d'arrière-plan ..C-d
).server-start
le serveur démarre en tant que processus démon. Qu'obtenez-vous si vous démarrez emacs de cette façon, puis fermez tous les emacs et terminaux, puis ouvrez un nouveau terminal et exécutezpgrep emacs
?C-d
. J'ai essayé ceci en utilisant maintenantgnome-terminal
sur Ubuntu 14.10 .. Je pense que vous faites référence à une instance en cours d'exécution après avoir fermé tous les cadres Emacs? Alors, cela nécessiterait un processus démon oui ..