Posso alterar a cor de fundo do minibuffer inativo?

9

Minibuffer inativo

Eu tentei com as seguintes configurações:

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

mas eles afetaram apenas o minibuffer ativo:

Minibuffer ativo

Lenar Hoyt
fonte
11
Eu acredito que isso também é chamado de área de eco.
Malabarba 18/10/2014
11
@ Malabarba: É chamada apenas de área de eco (quando o minibuffer está inativo).
Tirou

Respostas:

6

minibuffer-setup-hook é usado somente quando o minibuffer está configurado, ou seja, ativado, não quando está desativado.

minibuffer-exit-hookentra em vigor quando o minibuffer é encerrado. Há também minibuffer-inactive-mode-hook.

Mas, embora eles iniciem a mudança de cor (conforme mostrado ao adicionar (debug)no início da função de gancho e depois passar pelo depurador d), parece que isso kill-local-variablesremove a cor adicionada em algum momento. Agora não tenho tempo para checar mais, mas talvez você possa, ou talvez alguém tenha uma solução rápida. Desculpe por fornecer apenas informações incompletas.

Tenho que ir agora - mas rapidamente, acho que talvez você não precise mexer em ganchos, e você pode simplesmente fazer o remapeamento de rosto para todos os buffers com nomes correspondentes \` \*Minibuf-[0-9]+\*\'.


FWIW, eu uso um quadro minibuffer separado e o coloco minibuffer-exit-hookpara colorir o fundo do quadro:

(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)))))))
Desenhou
fonte
Dada a sua análise, acho que tornar face-remapping-alist permanente funcionaria? Para as aspas posteriores na marcação de código, consulte esta resposta .
Gilles 'SO- stop be evil'
O link que você forneceu resulta em um erro 404.
Compro Prasad
@ComproPrasad: Fixed. THX.
Drew
3

Você pode tentar:

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