Jak mogę emacsclient -a '' -n
utworzyć nową ramkę, tylko jeśli jeszcze jej nie ma?
Problem z -c
flagą polega na tym, że za każdym razem tworzy nową ramkę. Problem bez tego polega na tym, że jeśli nie ma otwartej ramki, otworzy się w wierszu poleceń.
Jeśli mogę sprawdzić, czy z powłoki jest otwarta ramka Emacsa, mogę zadzwonić z tym lub bez niego -c
, aby uzyskać pożądane zachowanie. Próbowałem:
$ emacsclient -a '' --eval '(frames-on-display-list)'
(#<frame F1 0xba2740>)
Zawsze otrzymuję ten sam wynik.
Mógłbym użyć plików tymczasowych lub pgrep, ale te podejścia są bardzo podatne na błędy.
Jest to podobne do tego pytania , ale nie jest to duplikat, ponieważ OP był zadowolony z konieczności otwarcia ramki przed wywołaniem emacsclient
.
frames
emacsclient
x11
spelufo
źródło
źródło
elisp
,bash
ish
odpowiedzi.Odpowiedzi:
Skończyło się na co ten skrypt w oparciu o ten
Jeśli nie ma wyświetlacza, otwiera się za pomocą
-nw
. Jeśli$DISPLAY
jest ustawiony, to szuka ramek na tym ekranie, aby sprawdzić, czy musi utworzyć nową.Edycja: Zmodyfikowałem go, abyś mógł ręcznie określić,
-nw
czy chcesz otwierać w terminalu, nawet jeśli jest wyświetlacz.źródło
$@
należy zacytować .Możesz użyć:
aby sprawdzić, czy serwer Emacs
"server_name"
już działa. Jeśli polecenie zwraca kod wyjścia 0, jest uruchomione. Jeśli tak, po prostu użyjemacsclient
polecenia:Jeśli nie jest uruchomiony, możesz otworzyć nowy serwer Emacs, na przykład:
źródło
emacsclient -a ''
rozpoczynaemacs --daemon
razie potrzeby, która utrzymuje się nawet po zamknięciu osłony.&
na końcu polecenia; oznacza to uruchomienie serwera jako procesu w tle.C-d
).server-start
serwer jako proces demona. Co otrzymasz, jeśli uruchomisz emacsa w ten sposób, a następnie zamkniesz wszystkie emacsy i terminale, a następnie otworzysz nowy terminal i uruchomiszpgrep emacs
?C-d
. Próbowałem tego terazgnome-terminal
na Ubuntu 14.10 .. Myślę, że masz na myśli działającą instancję po zamknięciu wszystkich ramek Emacsa? W takim przypadku wymagałoby to procesu demona tak ..