Kann ich die Hintergrundfarbe des inaktiven Minibuffers ändern?

9

Inaktiver Minibuffer

Ich habe es mit folgenden Einstellungen versucht:

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

Sie betrafen jedoch nur den aktiven Minibuffer:

Aktiver Minibuffer

Lenar Hoyt
quelle
1
Ich glaube, das wird auch als Echo-Bereich bezeichnet.
Malabarba
1
@ Malabarba: Es wird nur als Echo-Bereich bezeichnet (wenn der Minibuffer inaktiv ist).
Drew

Antworten:

6

minibuffer-setup-hook wird nur verwendet, wenn der Minibuffer eingerichtet, dh aktiviert ist, nicht, wenn er deaktiviert ist.

minibuffer-exit-hookwird wirksam, wenn der Minibuffer beendet wird. Es gibt auch minibuffer-inactive-mode-hook.

Obwohl diese die Farbänderung initiieren (wie durch Hinzufügen (debug)am Anfang der Hook-Funktion und anschließendes Durchlaufen des Debuggers mit gezeigt d), scheint es, dass kill-local-variablesdie hinzugefügte Farbe irgendwann entfernt wird. Ich habe jetzt keine Zeit, weiter zu prüfen, aber vielleicht können Sie es, oder vielleicht hat jemand anderes eine schnelle Lösung. Entschuldigung, dass Sie nur unvollständige Informationen angegeben haben.

Ich muss jetzt gehen - aber schnell, ich vermute, dass Sie vielleicht überhaupt nicht mit Haken herumspielen müssen, und Sie können einfach das Gesicht für alle Puffer mit passenden Namen neu zuordnen \` \*Minibuf-[0-9]+\*\'.


FWIW, ich verwende einen separaten Minibuffer-Rahmen und lege diesen an minibuffer-exit-hook, um den Rahmenhintergrund einzufärben :

(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)))))))
Drew
quelle
In Anbetracht Ihrer Analyse würde es funktionieren, wenn Sie face-remapping-alist dauerhaft arbeiten? Die Rückzitate im Code-Markup finden Sie in dieser Antwort .
Gilles 'SO - hör auf böse zu sein'
Der Link, den Sie bereitgestellt haben, führt zu einem 404.
Compro Prasad
@ComproPrasad: Behoben. Vielen Dank.
Drew
3

Sie könnten versuchen:

(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
quelle