Próbuję osiągnąć następujące zachowanie w Emacs24:
Lubię używać innego motywu (solarized-dark vs. solarized-light) w zależności od tego, czy połączę się z działającym serwerem za pomocą ramki terminala
% emacsclient -t
lub z ramką GTK
% emacsclient -c
Wydaje się, że działało to w starszych Emacsach, ale obecnego Emacsa nie mogłem znaleźć sposobu. Już raz sprawdzałem SO (np. Https://stackoverflow.com/q/18904529/152439 i odpowiedzi) oraz listy mailingowe (np. Https://lists.gnu.org/archive/html/help-gnu-emacs/ 2012-02 / msg00227.html i https://lists.gnu.org/archive/html/help-gnu-emacs/2012-02-02/msg00237.html ).
Moja obecna konfiguracja wygląda następująco:
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/solarized")
(if (daemonp)
(add-hook 'after-make-frame-functions
(lambda (frame)
(select-frame frame)
(if (display-graphic-p frame)
(load-theme 'solarized-light t)
(load-theme 'solarized-dark t)
)
)
)
(load-theme 'solarized-light t)
)
Problem polega na tym, że jeśli mam otwartą ramkę graficzną, a następnie otwieram ramkę terminala emacsclient -t
, motyw solarized-dark zostaje zastosowany zarówno do nowej ramki terminala (co jest poprawne), jak i już otwartej ramki graficznej (którą należy pozostawić idealnie nietknięte). Odpowiednik dzieje się, gdy ramka terminala jest już otwarta, a ja otwieram nową ramkę graficzną za pomocą emacsclient -c
.
EDYCJA: Jeśli nie jest to możliwe w przypadku obecnych Emacs24, czy są jakieś plany, aby to umożliwić ponownie?
color-theme.el
który IIRC miał ustawienia kolorów zależne od ramki. Korzystanie z wbudowanych funkcji tematycznych nie jest wielką zaletą oprócz wszechobecności.color-theme
systemów Emacs 24. Moja wersja motywu słonecznego obsługuje również oba systemy, jeśli zdecydujesz się wybrać tę trasę.Odpowiedzi:
Nie możesz tego zrobić przy użyciu różnych motywów. Rozwiązaniem jest stworzenie motywu, który ma różne definicje twarzy w zależności od terminala. Jeśli spojrzysz na przykład taki
font-lock-comment-face
, zobaczysz, jak to działa. Zamiast określać((class color) (min-colors 88) (background dark))
Można też specifcy(type tty)
lub(type graphic)
itd. Instrukcja zawiera więcej informacji .Wydaje mi się, że można napisać funkcję, która pobiera dwa motywy i tworzy scalony motyw, z przypisanymi ścianami z jednego motywu
(type tty)
i twarzami z drugiego motywu w(type graphic)
przypadku użycia obu oryginalnych motywówt
.źródło
color-theme-buffer-local zapewnia obsługę lokalnego bufora dla kolorów i motywów Emacsa 24. Moja wersja motywu słonecznego obsługuje również oba systemy, jeśli zdecydujesz się wybrać tę trasę.
źródło
Możesz zdefiniować warunki dostosowywania twarzy, takie jak „tryb terminala” lub „minimalne kolory” w edytorze dostosowywania:
Podczas dostosowywania twarzy kliknij przycisk [Stan] i wybierz „Pokaż wszystkie parametry wyświetlania”. Następnie możesz skonfigurować warunki do dalszej specjalizacji twarzy.
Oto minimalny wariant ustawienia koloru tła na czarny, gdy ramka jest tty:
źródło