Bisakah saya mengubah warna latar belakang minibuffer yang tidak aktif?

9

Minibuffer tidak aktif

Saya mencobanya dengan pengaturan berikut:

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

tetapi mereka hanya mempengaruhi minibuffer aktif:

Minibuffer aktif

Lenar Hoyt
sumber
1
Saya percaya itu juga disebut area gema.
Malabarba
1
@ Malabarba: Ini hanya disebut area gema (ketika minibuffer tidak aktif).
Drew

Jawaban:

6

minibuffer-setup-hook digunakan hanya ketika minibuffer diatur, yaitu diaktifkan, bukan saat dinonaktifkan.

minibuffer-exit-hookberlaku saat minibuffer keluar. Ada juga minibuffer-inactive-mode-hook.

Tetapi meskipun mereka melakukan perubahan warna (seperti yang ditunjukkan dengan menambahkan (debug)di awal fungsi hook, dan kemudian melangkah melalui debugger dengan d), tampaknya kill-local-variablesmenghapus warna yang ditambahkan di beberapa titik. Saya tidak punya waktu sekarang untuk memeriksa lebih lanjut, tetapi mungkin Anda bisa, atau mungkin orang lain punya solusi cepat. Maaf karena hanya memberikan info yang tidak lengkap.

Harus pergi sekarang - tetapi dengan cepat, saya kira mungkin Anda tidak perlu bermain-main dengan kait sama sekali, dan Anda bisa melakukan remapping wajah untuk semua buffer dengan nama yang cocok \` \*Minibuf-[0-9]+\*\'.


FWIW, saya menggunakan frame minibuffer terpisah , dan saya gunakan ini minibuffer-exit-hookuntuk mewarnai latar belakang frame:

(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
sumber
Mengingat analisis Anda, saya kira membuat face-remapping-alist permanen akan berhasil? Untuk backquotes dalam markup kode, lihat jawaban ini .
Gilles 'SANGAT berhenti menjadi jahat'
Tautan yang Anda berikan menghasilkan 404.
Compro Prasad
@ ComproPrasad: Tetap. Terima kasih.
Drew
3

Anda mungkin mencoba:

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