Aktif pencerenin saçak rengini değiştirmenin bir yolu var mı?


16

Odaklanmamış pencere ile dinlenme olmayanları daha iyi ayırt edebilmek için bu pencerenin saçak rengini değiştirmek isterim. Fringe anahtar kelimesi ile özelleştirmeyi keşfetme Aktif ve aktif olmayanlar için farklı renkler ayarlama yeteneği olmadan sadece bg rengini nasıl değiştirebileceğimi buldum. Bütün bunlar mümkün mü? Teşekkür.


Saçaktan emin değilim, ancak etkin olmayan pencerelerin mod satırını değiştirebilirsiniz. deneyin M-x customize-face mode-line-inactive.
Tyler

3
Çerçeve yerel gibi görünüyor, bu yüzden cevap hayır gibi görünüyor. (face-remap-add-relative 'fringe '((:background "yellow")))Tampon-yerel kullanım için hangi diğer yüzler için yeterli olduğunu denedim , ancak fringeilgili olduğu sürece çerçevedeki tüm pencereleri etkiler . @Tyler önerisine ek olarak, imleci yalnızca etkin pencerelerde görünecek şekilde özelleştirebilirsiniz - değişkene bakıncursor-in-non-selected-windows
kanun listesi


Modelini biliyorum, teşekkürler. Sadece benim için daha açık hale getirmek istedim.
sandric

Aktif pencerenin daha fazla görsel dikkat çekmesine yardımcı olacak birkaç ek fikir: (1) etkin olmayan pencerelerin mod çizgisi arka planının tampon rengiyle eşleşmesi, böylece etkin olmayan mod çizgisinin daha az farkedilir hale gelmesi: stackoverflow.com/ a / 20936397/2112489 ve (2) mode-line-formatetkin ve etkin olmayan pencerelerdeki belirli metin bileşenlerinin rengini değiştirme : emacs.stackexchange.com/a/22682/2287
kanun listesi

Yanıtlar:


7

"Odaklanmış pencereyi daha iyi ayırt etmek" istediğiniz için, etkin pencerenin saçak rengini değiştirmek yerine bunu yapmanın diğer yollarını kullanabilirsiniz.

Aktif ve aktif olmayan pencereleri daha iyi ayırt etmek için üç yolu birleştiriyorum.

  1. Etkin ve etkin olmayan pencereler için farklı renk modu çizgileri kullanın.
  2. Noktanın etkin pencerede olduğu geçerli satırı vurgulayın.
  3. Etkin ve etkin olmayan pencereler için farklı arka plan renkleri kullanın.

Yukarıda belirtilen tüm seçilen renklerin Emacs temanızla iyi çalışması gerektiğini unutmayın.

İşte üç yol da:

  1. Etkin ve etkin olmayan pencereler için farklı renk modu çizgileri kullanın:

    (custom-set-faces
     '(mode-line ((t (:background "dim gray" :foreground "white"))))
     '(mode-line-inactive ((t (:background nil)))))
    
  2. Noktanın etkin pencerede olduğu geçerli satırı vurgulayın:

    (global-hl-line-mode 1)
    ;; underline the current line
    (set-face-attribute hl-line-face nil :underline t)
    
  3. Etkin ve etkin olmayan pencereler için farklı arka plan renkleri kullanın:

    (defun highlight-selected-window ()
      "Highlight selected window with a different background color."
      (walk-windows (lambda (w)
                      (unless (eq w (selected-window))
                        (with-current-buffer (window-buffer w)
                          (buffer-face-set '(:background "#111"))))))
      (buffer-face-set 'default))
    (add-hook 'buffer-list-update-hook 'highlight-selected-window)
    

Emacs temanızla iyi çalışacak şekilde kod snippet'lerindeki renkleri değiştirebilirsiniz.

Bu son ekran görüntüsü:

Birlikte üç yolun ekran görüntüsü

Etkin pencereyi flaşlamak için manuel olarak kullanabileceğiniz başka bir işlev daha vardır:

(global-set-key (kbd "<f12>") 'flash-active-buffer)
(make-face 'flash-active-buffer-face)
(set-face-attribute 'flash-active-buffer-face nil
                    :background "blue" :foreground nil)
(defun flash-active-buffer ()
  (interactive)
  (run-at-time "100 millisec" nil
               (lambda (remap-cookie)
                 (face-remap-remove-relative remap-cookie))
               (face-remap-add-relative 'default 'flash-active-buffer-face)))

Kod pasajındaki tuş takımını değiştirebilirsiniz, etkin pencereyi göstermek istediğinizde, tuşa basın, etkin pencere mavi olur, işaret ettiğinizde renk kaybolur.


0

Ben de aynı problemi yaşadım. Akıllı hat modunu kullanmaya başvurdum ve aktif pencerede çok farklı renkler elde ettim. İşte örnek bir çerçeve. Aktif pencere, altın harflerle siyah mod çizgisine sahip olan penceredir.

resim açıklamasını buraya girin

Bu kodu kullanmadan önce akıllı mod hattına ihtiyacınız olduğundan emin olun. İhtiyacınız olan renklere göre özelleştirmenizi öneririz:

(deftheme smart-mode-line-dmg "dmg theme for smart-mode-line.")
(custom-theme-set-faces
 'smart-mode-line-dmg
                                        ; '(mode-line-inactive ((t :inverse-video nil)))
                                        ; '(mode-line     ((t :inverse-video nil)))
 '(mode-line     ((t :foreground "grey70" :background "black" :inverse-video nil)))
 '(mode-line-inactive  ((t :foreground "black" :background "white" :inverse-video nil)))
 '(sml/global    ((t :inherit font-lock-preprocessor-face)))
 '(sml/filename  ((t :inherit sml/global :foreground "gold" :weight bold)))
 '(sml/prefix    ((t :inherit (font-lock-variable-name-face sml/global))))
 '(sml/read-only ((t :inherit (font-lock-type-face sml/not-modified))))
 '(sml/modes     ((t :foreground nil :inherit sml/filename :weight normal))))

(sml/setup)

0

Seçili olan pencereyi vurgulamak için aşağıdakine benzer bir şey yapmayı deneyebilirsiniz. Birden çok penceredeki arabellekler aynıysa bunun çalışmadığına dikkat edin. Bu, seçilen pencere dışındaki tüm diğer pencereleri karartır.

(defvar dim-window-face
  '((t  (:background "grey40")))
  "Face for a dimmed window in the current frame.")

(defvar current-window-face
  '((t  (:background "black")))
  "Face for a dimmed window in the current frame.")

(defvar window->overlay (make-hash-table)
  "A hash table of window to dimmed overlay.")

(defun dim-windows ()
  "Dim all windows except the `selected-window' in current frame."
  (interactive)
  (walk-windows (lambda (w)
                  ;; Delete existing overlay on window W
                  (when-let ((ol (gethash w window->overlay)))
                    (delete-overlay ol))
                  (let ((ol (make-overlay (window-start w)
                                          (window-end w)
                                          (window-buffer w))))
                    (overlay-put ol 'face (if (eql (selected-window) w)
                                              current-window-face
                                            dim-window-face))
                    (puthash w ol window->overlay)))))
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.