Могу ли я изменить цвет фона неактивного минибуфера?

9

Неактивный минибуфер

Я попробовал это со следующими настройками:

(add-hook 'minibuffer-setup-hook
      (lambda ()
        (make-local-variable 'face-remapping-alist)
        (add-to-list 'face-remapping-alist '(default (:background "green")))))

(set-face-background 'minibuffer-prompt "blue")

но они влияли только на активный минибуфер:

Активный минибуфер

Ленар Хойт
источник
1
Я считаю, что это также называется эхо-зоной.
Малабарба
1
@Malabarba: Он называется только эхо-областью (когда минибуфер неактивен).
Дрю

Ответы:

6

minibuffer-setup-hook используется только когда минибуфер настроен, т.е. активирован, а не когда он деактивирован.

minibuffer-exit-hookвступает в силу при выходе из минибуфера. Также есть minibuffer-inactive-mode-hook.

Но хотя они действительно инициируют изменение цвета (как показано добавлением (debug)в начале функции ловушки, а затем пошаговым переходом через отладчик d), кажется, что kill-local-variablesудаляет добавленный цвет в некоторой точке. У меня нет времени, чтобы проверить дальше, но, возможно, вы можете, или, может быть, у кого-то еще есть быстрое решение. Извините за предоставление только неполной информации.

Мне нужно идти сейчас - но быстро, я предполагаю, что, возможно, вам вообще не нужно возиться с крючками, и вы можете просто сделать перераспределение лица для всех буферов с совпадающими именами \` \*Minibuf-[0-9]+\*\'.


Кстати, я использую отдельную рамку минибуфера и надеваю это, чтобы закрасить minibuffer-exit-hookфон рамки:

(defun 1on1-color-minibuffer-frame-on-exit ()
  "Change background of minibuffer frame to reflect the minibuffer depth.
Use this when reducing the minibuffer recursion depth."
  (when 1on1-minibuffer-frame
    (save-window-excursion
      (select-frame 1on1-minibuffer-frame)
      (cond ((= (minibuffer-depth) 2)
             (set-background-color 1on1-active-minibuffer-frame-background))
            ((< (minibuffer-depth) 2)
             (set-background-color 1on1-inactive-minibuffer-frame-background))
            (t
             (set-background-color (hexrgb-increment-hue ; Change bg hue slightly.
                                    (frame-parameter nil 'background-color)
                                    1on1-color-minibuffer-frame-on-exit-increment)))))))
Нарисовалась
источник
Учитывая ваш анализ, я думаю, что face-remapping-alist постоянный будет работать? Обратные кавычки в разметке кода см. В этом ответе .
Жиль "ТАК - перестань быть злым"
Ссылка, которую вы предоставили, приводит к 404.
Compro Prasad
@ComproPrasad: исправлено. Спасибо.
Дрю
3

Вы можете попробовать:

(dolist (buf '(" *Echo Area 0*" " *Echo Area 1*"))
  (with-current-buffer (get-buffer buf)
    (make-local-variable 'face-remapping-alist)
    (add-to-list 'face-remapping-alist '(default (:background "green")))))
Стефан
источник