Czy mogę zmienić kolor tła nieaktywnego minibufora?

9

Nieaktywny minibufor

Próbowałem z następującymi ustawieniami:

(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")

ale wpłynęły tylko na aktywny minibufor:

Aktywny minibufor

Lenar Hoyt
źródło
1
Uważam, że jest to również nazywane obszarem echa.
Malabarba
1
@Malabarba: Nazywa się to tylko obszarem echa (gdy minibufor jest nieaktywny).
Drew

Odpowiedzi:

6

minibuffer-setup-hook jest używany tylko wtedy, gdy minibufor jest skonfigurowany, tj. aktywowany, a nie gdy jest dezaktywowany.

minibuffer-exit-hookdziała po wyjściu minibufora. Jest też minibuffer-inactive-mode-hook.

Ale chociaż te inicjują zmianę koloru (jak pokazano przez dodanie (debug)na początku funkcji przechwytywania, a następnie przejście przez debugger za pomocą d), wydaje się, że kill-local-variablesw pewnym momencie usuwa dodany kolor. Nie mam teraz czasu na dalsze sprawdzanie, ale być może możesz, a może ktoś inny ma szybkie rozwiązanie. Przepraszamy za podanie niepełnych informacji.

Muszę już iść - ale szybko zgaduję, że może wcale nie musisz majstrować przy hakach i możesz po prostu odwzorować twarz dla wszystkich buforów z pasującymi nazwami \` \*Minibuf-[0-9]+\*\'.


FWIW, używam osobnej ramki minibufora i nakładam ją, minibuffer-exit-hookaby pokolorować tło ramki:

(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)))))))
Rysował
źródło
Biorąc pod uwagę twoją analizę, myślę, że uczynienie face-remapping-alist trwałym działałoby? W przypadku cudzysłowów w znacznikach kodu zobacz tę odpowiedź .
Gilles „SO- przestań być zły”
Podany przez Ciebie link daje wynik 404.
Compro Prasad
@ComproPrasad: Naprawiono. Dzięki.
Drew
3

Możesz spróbować:

(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")))))
Stefan
źródło