Etkin olmayan minibuffer'ın arka plan rengini değiştirebilir miyim?


9

Etkin Olmayan Minibuffer

Aşağıdaki ayarlarla denedim:

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

ancak yalnızca etkin minibuffer'ı etkilediler:

Aktif Minibuffer


1
Buna yankı alanı da deniyor.
Malabarba

1
@Malabarba: Yalnızca yankı alanı olarak adlandırılır ( minibuffer devre dışı olduğunda).
Drew

Yanıtlar:


6

minibuffer-setup-hook yalnızca minibuffer ayarlandığında, yani etkinleştirildiğinde, devre dışı bırakıldığında kullanılmaz.

minibuffer-exit-hookminibufferdan çıkıldığında etkili olur. Ayrıca var minibuffer-inactive-mode-hook.

Ancak bunlar renk değişikliğini başlatmasına rağmen ( (debug)kanca işlevinin başına ekleyerek ve ardından hata ayıklayıcıdan adım adım geçerek gösterildiği dgibi), kill-local-variablesbir noktada eklenen rengi kaldırdığı görülmektedir . Şimdi daha fazla kontrol etmek için zamanım yok, ama belki yapabilirsin, ya da belki başka birinin hızlı bir çözümü var. Yalnızca eksik bilgi sağladığım için üzgünüm.

Şimdi gitmeliyim - ama çabucak, belki de kancalarla uğraşmanıza gerek olmadığını tahmin ediyorum ve sadece isim eşleşmeleri ile tüm tamponlar için yüz yeniden eşleme yapabilirsiniz \` \*Minibuf-[0-9]+\*\'.


FWIW, ayrı bir minibuffer çerçeve kullanıyorum ve bunu minibuffer-exit-hookçerçeve arka planını renklendirmek için taktım :

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

Analiziniz göz önüne alındığında, face-remapping-alist kalıcı hale getirmek işe yarayacaktı? Kod işaretlemedeki backquotes için bu cevaba bakınız .
Gilles 'SO- şeytan olmayı bırak'


@ComproPrasad: Düzeltildi. Teşekkür.
Drew

3

Deneyebilirsiniz:

(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")))))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.