Zazwyczaj uruchamiam emacsa za pomocą GUI i od razu uruchamiam serwer (server-start)
. Teraz mogę łatwo otwierać dokumenty do mojej istniejącej sesji emacs z terminala za pośrednictwem emacsclient -n <file>
lub z przeglądarki plików.
Jednak od czasu do czasu chcę uruchamiać emacsa w moim terminalu za pomocą emacsclient -t
. Dzieje się tak najczęściej podczas pisania dzienników git commit lub wykonywania innych bardzo małych zadań. W takich przypadkach fakt, że mój plik init został załadowany do instancji GUI emacsa, oznacza, że nie otrzymuję żadnych dostosowań, które są specyficzne dla emacsa TTY.
Wiem, że umiem biegać
emacs -nw -q -l "some-custom-init-file.el"
ale to za każdym razem przeładuje wszystkie pakiety. Czy mogę mieć to, co najlepsze z obu światów? Czy istnieje sposób skonfigurowania „demona TTY”, aby można było używać osobnych dostosowań do uruchamiania w terminalu w porównaniu do odwiedzania pliku w istniejącym oknie emacsa?
(setq linum-format "%d ")
pomocą pliku dostosowywania TTY. Ponadto mój motyw koloru zawsze wygląda dziwnie w trybie TTY, więc na pewno wybiorę inny motyw dla TTY. Obecnie nie mam tak wielu różnic, ale teraz, gdy wiem, że mogę mieć różne serwery, lista może się powiększać.M-x report-emacs-bug
i poprosić o nowe funkcje, takie jak możliwość posiadania różnych motywów twarzy w ramkach TTY i GUI (w rzeczywistości motyw może określać zupełnie różne kolory dla różnych rodzajów ramek, więc możesz również dostosować swój motyw) . Użycie kilku demonów dla tych osobnych przypadków jest tylko obejściem braku odpowiedniej funkcjonalności w Emacsie.Odpowiedzi:
Użyj,
emacs --daemon=your-server-name -l "custom-init-file"
aby uruchomić nowy serwer iemacsclient -nw -s your-server-name
połączyć się z nim z samego terminala. W rozdziale dotyczącym używania Emacsa jako serwera w podręczniku jest więcej opcji inicjalizacji.źródło
-q
przełącznik, aby moje domyślneinit.el
uruchamianie przed niestandardowego pliku inicjującego.)emacsclient -s your-server-name -e "(kill-emacs)"
robisz co chcesz? Powyższe po prostu nazywa emacsclient i evals(kill-emacs)
. Można wymienić(kill-emacs)
z(save-buffers-kill-emacs)
również.-q
Oprócz odpowiedzi @ Vamsi, możesz uzyskać wiele takich samych korzyści, uruchamiając tylko jeden serwer, dołączając porady do
make-frame-command
.Na przykład podczas pracy w terminalu chcę, aby kolor tła był
black
(który odwzorowuje#202020
), ale chcę używać#202020
w trybie graficznym. Zaimplementowałem to z:Możesz uzyskać z tego wiele kilometrów, używając
make-variable-frame-local
(set-background-color
w powyższym przypadku jest już lokalne).Nie wiem, czy jest to najlepszy wzorzec, ale jeśli masz stosunkowo niewiele różnic między trybem TTY a emacsem w trybie X, może to ułatwić zarządzanie konfiguracją.
Powyższy kod został pobrany z mojego .emacs.d .
źródło
(display-graphic-p)
daje,t
jeśli bieżąca ramka jest graficzna, wnil
przeciwnym razie. Ponieważ ramki nie mogą być przenoszone między grafiką a nie (afaik), dołączenie porady do tworzenia ramek gwarantuje osiągnięcie pożądanego stanu dla danej ramki.Nie potrzebujesz porady, aby zmienić ustawienia różnych ramek działających w tym samym demonie emacs. Po prostu użyj haka
after-make-frame-functions
sposóbZdefiniowanie go w ten sposób ma dodatkową zaletę, że ustawia pożądaną konfigurację ramki, nawet jeśli nie uruchamiasz się w trybie demona.
Niestety
load-theme
nie jest to ramka lokalna, więc inne ramki również się pokolorują, jeśli naprawdę używasz różnych motywów dla ramek tekstowych i graficznych.Informacje o bonusie: skonfiguruj terminale w co najmniej 256 kolorach, aby uzyskać prawdziwy efekt wybranego motywu. Użyj takiego ustawienia w jednym z plików startowych powłoki:
źródło