Puis-je changer la couleur d'arrière-plan du mini-tampon inactif?

9

Minibuffer inactif

Je l'ai essayé avec les paramètres suivants:

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

mais ils n'ont affecté que le mini-tampon actif:

Minibuffer actif

Lenar Hoyt
la source
1
Je crois que cela s'appelle également la zone d'écho.
Malabarba
1
@Malabarba: Il est uniquement appelé zone d'écho (lorsque le mini-tampon est inactif).
Drew

Réponses:

6

minibuffer-setup-hook est utilisé uniquement lorsque le mini-tampon est configuré, c'est-à-dire activé, et non lorsqu'il est désactivé.

minibuffer-exit-hookprend effet à la sortie du mini-tampon. Il y en a aussi minibuffer-inactive-mode-hook.

Mais bien que ceux-ci initient le changement de couleur (comme indiqué en ajoutant (debug)au début de la fonction de crochet, puis en parcourant le débogueur avec d), il semble que cela kill-local-variablessupprime la couleur ajoutée à un moment donné. Je n'ai pas le temps maintenant de vérifier plus avant, mais peut-être le pouvez-vous, ou peut-être que quelqu'un d'autre a une solution rapide. Désolé de ne fournir que des informations incomplètes.

Je dois y aller maintenant - mais rapidement, je suppose que vous n'avez peut-être pas besoin de jouer du tout avec des crochets, et vous pouvez simplement faire le remappage du visage pour tous les tampons avec des noms correspondant \` \*Minibuf-[0-9]+\*\'.


FWIW, j'utilise un cadre de mini-tampon séparé , et je le mets minibuffer-exit-hookpour colorer l'arrière-plan du cadre:

(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)))))))
A dessiné
la source
Compte tenu de votre analyse, je suppose que rendre face-remapping-alist permanent fonctionnerait? Pour les backquotes dans le balisage de code, voir cette réponse .
Gilles 'SO- arrête d'être méchant'
Le lien que vous avez fourni des résultats dans un 404.
Compro Prasad
@ComproPrasad: corrigé. THX.
Drew
3

Vous pourriez essayer:

(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
la source