활성 창의 프린지 색상을 변경하는 방법이 있습니까?


15

집중되지 않은 창과 나머지 부분을 더 잘 구별하기 위해이 창의 프린지 색상을 변경하고 싶습니다. 프린지 키워드로 사용자 정의 발견 활성 및 비활성 색상에 다른 색상을 설정하지 않고 bg 색상을 변경하는 방법 만 발견했습니다. 전혀 가능합니까? 고마워.


프린지가 확실하지 않지만 비활성 창에 대한 모드 라인을 변경할 수 있습니다. 시도하십시오 M-x customize-face mode-line-inactive.
Tyler

3
프레임 로컬로 보이므로 대답이 아니요 인 것처럼 보입니다. (face-remap-add-relative 'fringe '((:background "yellow")))다른 얼굴에 버퍼 로컬 사용에 충분한 것을 시도했지만 프레임의 모든 창에 영향을 미칩니다 fringe. @Tyler의 제안 외에도 커서를 활성 창에만 표시되도록 커서를 사용자 정의 할 수 있습니다. 변수를 참조하십시오cursor-in-non-selected-windows
lawlist


나는 Modeline에 대해 알고 있습니다. 나는 단지 더 명확하게하고 싶었다.
sandric

다음은 활성 창에서보다 시각적 인주의를 끌 수있는 몇 가지 추가 아이디어입니다. (1) 비활성 창의 모드 선 배경이 버퍼 색상과 일치하여 비활성 모드 선이 눈에 띄지 않게하는 방법 : stackoverflow.com/ a / 20936397 / 2112489 및 (2) mode-line-format활성 및 비활성 창의 특정 텍스트 구성 요소 색상 변경 : emacs.stackexchange.com/a/22682/2287
lawlist

답변:


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)))))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.