Чи є спосіб змінити колір бахроми активного вікна?


15

Щоб краще розрізнити зосереджене вікно та відпочинок, які не є, я б хотів змінити колір бахроми цього вікна. Розкриваючи налаштування за ключовим словом fringe, я з’ясував лише те, як змінити його bg колір без можливості встановлення різних кольорів для активних та неактивних. Чи можливо це взагалі? Дякую.


Я не впевнений у межі, але ви можете змінити лінію режиму для неактивних вікон. спробуйте M-x customize-face mode-line-inactive.
Тайлер

3
Схоже, це кадр локальний, тому здається, що відповідь - ні. Я спробував, (face-remap-add-relative 'fringe '((:background "yellow")))що для інших облич достатньо для локального використання буфера, але це стосується всіх вікон у кадрі, наскільки fringeце стосується. Окрім пропозиції @Tyler, ви також можете налаштувати курсор так, щоб він відображався лише в активних вікнах - див. Зміннуcursor-in-non-selected-windows
список законів


Я знаю про моделін, THX. Я просто хотів зробити це більш зрозумілим для мене.
сандрик

Ось декілька додаткових ідей, які допоможуть зробити активне вікно привернути більше візуальної уваги: ​​(1) приведення фону ліній в режимі неактивних вікон збігається з кольором буфера, щоб неактивна лінія режиму стала менш помітною: stackoverflow.com/ a / 20936397/2112489 та (2) зміна кольору певних текстових компонентів mode-line-formatактивних та неактивних вікон: emacs.stackexchange.com/a/22682/2287
законник

Відповіді:


6

Оскільки ви хочете "Краще розрізнити зосереджене вікно", ви можете використовувати інші способи зробити це замість того, щоб просто змінити колір бахроми активного вікна.

Я поєдную три способи, щоб краще розрізнити активні та неактивні вікна.

  1. Використовуйте різні кольори лінії режиму для активних та неактивних вікон.
  2. Виділіть поточну лінію, де точка знаходиться в активному вікні.
  3. Використовуйте різні кольори фону для активних та неактивних вікон.

Зауважте, що всі обрані вище кольори повинні добре співпрацювати з вашою темою Emacs.

Ось усі три способи:

  1. Використовуйте різні кольори рядка режиму для активних та неактивних вікон:

    (custom-set-faces
     '(mode-line ((t (:background "dim gray" :foreground "white"))))
     '(mode-line-inactive ((t (:background nil)))))
    
  2. Виділіть поточну лінію, де точка знаходиться в активному вікні:

    (global-hl-line-mode 1)
    ;; underline the current line
    (set-face-attribute hl-line-face nil :underline t)
    
  3. Використовуйте різні кольори фону для активних та неактивних вікон:

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

Це заключний скріншот:

Скріншот трьох способів разом

І є ще одна функція, яку ви можете вручну використовувати для спалаху активного вікна:

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

Ви можете змінити прив'язку клавіш у фрагменті коду, коли ви хочете показати активне вікно, натисніть клавішу, активне вікно стане синім, після переміщення вказівника колір зникне.


0

У мене була така ж проблема. Я вдався до використання інтелектуального лінійного режиму та налаштувати його, щоб отримати активні кольори в активному вікні. Ось зразок кадру. Активне вікно - це чорна лінія режиму із золотими літерами.

введіть тут опис зображення

Переконайтеся, що вам потрібна лінія розумного режиму, перш ніж використовувати цей код. Рекомендую налаштувати його під потрібні кольори:

(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

Ви можете спробувати зробити щось на зразок наступного, щоб виділити поточне вибране вікно. Слідкуйте за тим, що це не працює, якщо буфери у кількох вікнах однакові. Це затемнює всі інші вікна, крім вибраного.

(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)))))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.