Я пытаюсь добиться следующего поведения в Emacs24:
Мне нравится использовать другую тему (соляризованная темнота или соляризованная подсветка) в зависимости от того, подключаюсь ли я к работающему серверу с рамкой терминала
% emacsclient -t
или с рамкой GTK
% emacsclient -c
Кажется, это работало в более старых Emacs, но в текущем Emacs я не мог найти способ. Я уже проверял SO (например, /programming//q/18904529/152439 и ответы) и списки рассылки (например, https://lists.gnu.org/archive/html/help-gnu-emacs/ 2012-02 / msg00227.html и https://lists.gnu.org/archive/html/help-gnu-emacs/2012-02/msg00237.html ).
Моя текущая настройка выглядит так:
(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)
)
Проблема в том, что если у меня есть открытая графическая рамка, а затем открываю рамку терминала emacsclient -t
, тема solarized-dark применяется как к новой рамке терминала (что правильно), так и к уже открытой графической рамке (которую следует оставить нетронутый, в идеале). Эквивалент происходит, когда оконечная рамка уже открыта, и я открываю новую графическую рамку с помощью emacsclient -c
.
РЕДАКТИРОВАТЬ: Если это невозможно с текущей Emacs24, есть ли планы сделать это снова?
color-theme.el
какие IIRC имели настройки цвета, зависящие от кадра. Нет большого преимущества в использовании встроенных возможностей тем, кроме повсеместности.color-theme
систем тем Emacs 24, так и для них. Моя версия соляризованной темы также поддерживает обе системы, если вы решите пойти по этому пути.Ответы:
Вы не можете сделать это, используя разные темы. Решение состоит в том, чтобы создать тему с различными определениями лиц в зависимости от терминала. Если вы посмотрите на пример как
font-lock-comment-face
, вы увидите, как он работает. Вместо того, чтобы указывать,((class color) (min-colors 88) (background dark))
вы также можете указать(type tty)
или(type graphic)
др. В руководстве есть больше информации .Я полагаю, вы могли бы написать функцию, которая берет две темы и создает объединенную тему с назначением лиц из одной темы и назначений
(type tty)
лиц из другой темы,(type graphic)
где используются обе исходные темыt
.источник
color-theme-buffer-local обеспечивает поддержку буфера локальной темы как для color-theme, так и для систем тем Emacs 24. Моя версия соляризованной темы также поддерживает обе системы, если вы решите пойти по этому пути.
источник
Вы можете определить условия для настройки лица, такие как «режим терминала» или «минимальные цвета» в редакторе настроек:
При настройке лица нажмите кнопку [State] и выберите «Показать все характеристики дисплея». Тогда вы сможете настроить условия для дальнейшей специализации лица.
Вот минимальный вариант для установки цвета фона на черный, если рамка имеет тип tty:
источник