Чи можна змінити колір тла неактивного мінібуфера?


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: Це називається лише зоною ехо (коли minibuffer неактивний).
Дрю

Відповіді:


6

minibuffer-setup-hook використовується лише тоді, коли мінібуфер встановлений, тобто активований, а не тоді, коли він відключений.

minibuffer-exit-hookнабуває чинності при виході мінібуфера. Є також minibuffer-inactive-mode-hook.

Але хоча вони ініціюють зміну кольору (як показано, додавши (debug)на початку функції гачка, а потім перейшовши через налагоджувач з d), здається, що kill-local-variablesвидаляє доданий колір у якийсь момент. Зараз у мене немає часу, щоб перевірити далі, але, можливо, ви можете, чи, можливо, хтось інший має швидке рішення. Вибачте за надання лише неповної інформації.

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


FWIW, я використовую окремий кадр мінібуфера , і я надягаю це, 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 постійне спрацює? Про зворотні котирування в розмітці коду див. Цю відповідь .
Жил 'SO- перестань бути злим'

Посилання, яке ви надали, дає результат у 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")))))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.