Posso cambiare il colore di sfondo del minibuffer inattivo?


9

Minibuffer inattivo

L'ho provato con le seguenti impostazioni:

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

ma hanno interessato solo il minibuffer attivo:

Minibuffer attivo


1
Credo che sia anche chiamata la zona dell'eco.
Malabarba,

1
@Malabarba: viene chiamata solo area dell'eco (quando il minibuffer è inattivo).
Disegnò il

Risposte:


6

minibuffer-setup-hook viene utilizzato solo quando è installato il minibuffer, ovvero attivato, non quando è disattivato.

minibuffer-exit-hookdiventa effettivo all'uscita dal minibuffer. C'è anche minibuffer-inactive-mode-hook.

Ma sebbene quelli inizino il cambio di colore (come mostrato aggiungendo (debug)all'inizio della funzione hook e quindi passando attraverso il debugger con d), sembra che kill-local-variablesrimuova il colore aggiunto ad un certo punto. Non ho tempo di controllare ulteriormente, ma forse puoi, o forse qualcun altro ha una soluzione rapida. Ci scusiamo per aver fornito solo informazioni incomplete.

Devo andare ora - ma velocemente, immagino che forse non hai bisogno di giocherellare con gli uncini, e puoi semplicemente fare il remapping del viso per tutti i buffer con nomi corrispondenti \` \*Minibuf-[0-9]+\*\'.


FWIW, utilizzo un telaio per minibuffer separato e lo inserisco minibuffer-exit-hookper colorare lo sfondo del telaio:

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

Data la tua analisi, immagino che rendere face-remapping-alist permanente avrebbe funzionato? Per i backquotes nel markup del codice, vedi questa risposta .
Gilles 'SO- smetti di essere malvagio' il

Il link che hai fornito risulta in un 404.
Compro Prasad

@ComproPrasad: risolto. Grazie.
Estratto il

3

Potresti provare:

(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")))))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.