C'è un modo per cambiare il colore della frangia della finestra attiva?


14

Per meglio distinguere tra finestra focalizzata e riposo che non lo sono, mi piacerebbe cambiare il colore della frangia di questa finestra. Scoprendo personalizzare con la parola chiave frangia ho trovato solo come cambiare il suo colore bg senza la possibilità di impostare colori diversi per quelli attivi e non attivi. È possibile affatto? Grazie.


Non sono sicuro della frangia, ma puoi cambiare la linea di modalità per le finestre inattive. provare M-x customize-face mode-line-inactive.
Tyler,

3
Sembra essere frame-local, quindi sembra che la risposta sia no. Ho provato (face-remap-add-relative 'fringe '((:background "yellow")))quale per altre facce è sufficiente per l'uso locale del buffer, ma influisce su tutte le finestre nel frame per quanto fringeriguarda. Oltre al suggerimento di @Tyler, puoi anche personalizzare il cursore in modo che appaia solo nelle finestre attive - vedi la variabilecursor-in-non-selected-windows
elenco delle leggi


Conosco modeline, grazie. Volevo solo renderlo più chiaro per me.
sandric,

Ecco alcune idee aggiuntive per aiutare la finestra attiva ad attirare più attenzione visiva: (1) fare in modo che lo sfondo della linea di modalità delle finestre inattive corrisponda al colore del buffer in modo che la linea di modalità inattiva diventi meno evidente: stackoverflow.com/ a / 20936397/2112489 e (2) modifica del colore di alcuni componenti testuali mode-line-formatall'interno delle finestre attive e inattive: emacs.stackexchange.com/a/22682/2287
elenco delle leggi

Risposte:


6

Dato che vuoi "Per distinguere meglio tra la finestra focalizzata", puoi usare altri modi per farlo invece di cambiare semplicemente il colore della frangia della finestra attiva.

Combino tre modi per distinguere meglio tra finestre attive e inattive.

  1. Usa diversi colori della linea di modalità per le finestre attive e inattive.
  2. Evidenzia la linea corrente in cui il punto è nella finestra attiva.
  3. Usa colori di sfondo diversi per le finestre attive e inattive.

Nota che tutti i colori scelti sopra menzionati dovrebbero funzionare bene con il tuo tema Emacs.

Ecco tutti e tre i modi:

  1. Usa diversi colori della linea di modalità per le finestre attive e inattive:

    (custom-set-faces
     '(mode-line ((t (:background "dim gray" :foreground "white"))))
     '(mode-line-inactive ((t (:background nil)))))
    
  2. Evidenzia la riga corrente in cui si trova il punto nella finestra attiva:

    (global-hl-line-mode 1)
    ;; underline the current line
    (set-face-attribute hl-line-face nil :underline t)
    
  3. Usa colori di sfondo diversi per le finestre attive e inattive:

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

Puoi cambiare i colori negli snippet di codice per lavorare bene con il tuo tema Emacs.

Questo è lo screenshot finale:

Schermata di tre modi insieme

E c'è un'altra funzione che puoi usare manualmente per eseguire il flash della finestra attiva:

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

È possibile modificare la rilegatura dei tasti nello snippet di codice, quando si desidera mostrare la finestra attiva, premere il tasto, la finestra attiva sarà blu, dopo aver spostato il punto, il colore sparirà.


0

Ho avuto lo stesso problema. Ho fatto ricorso all'utilizzo della modalità linea intelligente e la personalizzo in modo da ottenere colori molto distintivi nella finestra attiva. Ecco un esempio di frame. La finestra attiva è quella con la riga della modalità nera con lettere dorate.

inserisci qui la descrizione dell'immagine

Assicurati di aver bisogno della linea in modalità intelligente prima di utilizzare questo codice. Ti consiglio di personalizzarlo con i colori di cui hai bisogno:

(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

Puoi provare a fare qualcosa di simile al seguente per evidenziare la finestra attualmente selezionata. Attenzione che questo non funziona se i buffer in più finestre sono uguali. Questo oscura tutte le altre finestre tranne quella selezionata.

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