Emacs: установить цвет фона для определенного окна

Можно ли установить цвет фона определенного окна emacs?

Я использую функцию «выделенное окно», чтобы прикрепить буфер emacs к фрейму. Однако я также хочу, чтобы это окно можно было распознать как отдельное окно.

В настоящее время я использую buffer-face-mode для установки шрифта по умолчанию для конкретного буфера с немного более темным цветом фона. Однако это форматирование также применяется к окнам, просматривающим один и тот же буфер, но не выделенным для этого буфера. Возможность установить шрифт для каждого окна решила бы эту проблему.


person kdb    schedule 03.06.2013    source источник


Ответы (3)


Emacs сейчас не поддерживает выполнение этого для одного конкретного окна. OTOH, вы можете сделать это для определенного фрейма, поэтому, если ваше окно находится внутри фрейма с одним окном (как это часто бывает с выделенными окнами), вы определенно можете установить параметр фрейма background-color (и должен иметь возможность установите его непосредственно из display-buffer-alist или special-display-regexps.

person Stefan    schedule 03.06.2013
comment
Спасибо, это помогает. Но могу ли я тогда запретить этому фрейму отображать какие-либо другие окна? - person kdb; 04.06.2013
comment
Вы также можете сделать его неразделяемым (найдите splittable в руководстве). - person Stefan; 05.06.2013
comment
Я предполагаю, что вы действительно не заботитесь о том, чтобы предотвратить отображение любых других окон, то есть сделать его неразделимым. Я предполагаю, что вы просто не хотите, чтобы он отображал какие-либо другие буферы, что также означает, что новые окна не будут появляться в кадре (например, разбивая его). Об этом уже позаботились, объявив его специальным дисплеем --- IOW, не проблема. Если вы действительно хотите помешать себе использовать C-x 2 или что-то в этом роде, тогда да, сделайте его неразделимым. - person Drew; 12.08.2013

Что вы хотите, так это указать буфер как «специальный дисплей». Это делает именно то, что вы хотите.

Вы можете настроить одну или обе эти опции (переменные):

  • special-display-regexps
  • special-display-buffer-names

Это простой способ. Emacs любит считать эти опции устаревшими с версии 24.3 и рекомендует вместо них использовать невероятно сложную опцию display-buffer-alist.

Это все, что я делаю, чтобы все буферы с именами, начинающимися и заканчивающимися на *, отображались в своих собственных выделенных фреймах:

(setq special-display-regexps '("[ ]?[*][^*]+[*]"))

Чтобы кадры специального дисплея имели разные свойства (т. е. параметры кадра), например фон другого цвета, настройте параметр special-display-frame-alist.

По сути, это определение, которое я использую:

(setq special-display-alist
      '((font . "-*-Lucida Console-normal-r-*-*-14-*-*-*-c-*-iso8859-1")
        (width . 80)
        (height . 14)
        (mouse-color . "Yellow")
        (cursor-color . "Yellow")
        (menu-bar-lines . 1)
        (foreground-color . "Black")
        (background-color . "LightSteelBlue")
        (top . 0)
        (left . 0)
        (unsplittable . t)
        (user-position . t)
        (vertical-scroll-bars . right)))

Но я рекомендую вам использовать Customize, чтобы установить значение всех таких параметров.

person Drew    schedule 11.08.2013

Метод, который работал у меня в Emacs 25.1.1, заключался в использовании переменной face-remapping-alist. Когда буфер инициализирован, измените атрибут :background грани default на нужный цвет. Например, я делаю цвет фона моего буфера Treemacs отличным от всего остального, добавляя что-то вроде этого в мой файл .emacs:

(defun treemacs-mode-handler()
  (set (make-local-variable 'face-remapping-alist)
       '((default :background "#303030"))))

(add-hook 'treemacs-mode-hook 'treemacs-mode-handler)
person jplein    schedule 02.03.2018
comment
Если вы отобразите этот буфер более чем в одном окне в одном и том же кадре или в другом кадре, вы увидите, что затрагивается буфер, а не обязательно окно. . Кроме того, в руководстве по Emacs предлагается использовать встроенную функцию face-remap-add-relative для управления переменной face-remapping-alist. [Однако я также предпочитаю управлять face-remapping-alist напрямую, не используя face-remap-add-relative. Но, поскольку эти темы будут читать другие, принято всегда стараться упоминать способ работы Emacs в дополнение к любой выбранной его вариации.] - person lawlist; 04.03.2018