답변:
를 hl-line-mode
사용 하기 위해 이것을 구현 했습니다 buffer-list-update-hook
. 코드는 다음과 같습니다.
(defface hl-line-inactive
'((t nil))
"Inactive variant of `hl-line'."
:group 'hl-line)
(defun hl-line-update-face (window)
"Update the `hl-line' face in WINDOW to indicate whether the window is selected."
(with-current-buffer (window-buffer window)
(when hl-line-mode
(if (eq (current-buffer) (window-buffer (selected-window)))
(face-remap-reset-base 'hl-line)
(face-remap-set-base 'hl-line (face-all-attributes 'hl-line-inactive))))))
(add-hook 'buffer-list-update-hook (lambda () (walk-windows #'hl-line-update-face nil t)))
이 코드가하는 일 :
hl-line-inactive
비활성 창에서 사용할 새면을 정의하십시오 . M-x customize-face
이 얼굴의 속성을 취향에 맞게 수정할 수 있습니다 .buffer-list-update-hook
호출 hl-line-update-face
에 후크를 추가하십시오 .이전 답변
위의 코드 (내 init
파일 에서 사용 중 )는 원래 게시 한 것보다 훨씬 간단합니다. 사용할 제안에 대해 @Drew에게 감사드립니다 walk-windows
. 또한 얼굴 리매핑에 대한 자세한 내용을 읽고 ( Emacs Lisp 설명서의 얼굴 리매핑 참조 ) 많은 코드를 제거 할 수 있다는 것을 깨달았습니다.
후손을 위해 내가 처음에 게시 한 내용은 다음과 같습니다.
;; Define a face for the inactive highlight line.
(defface hl-line-inactive
'((t nil))
"Inactive variant of `hl-line'."
:group 'local)
(defun toggle-active-window-highlighting ()
"Update the `hl-line' face in any visible buffers to indicate which window is active."
(let ((dups))
(mapc
(lambda (frame)
(mapc
(lambda (window)
(with-current-buffer (window-buffer window)
(when hl-line-mode
(make-local-variable 'face-remapping-alist)
(let ((inactive (rassoc '(hl-line-inactive) face-remapping-alist)))
(if (eq window (selected-window))
(progn
(setq dups (get-buffer-window-list nil nil 'visible))
(setq face-remapping-alist (delq inactive face-remapping-alist)))
(unless (or inactive (memq window dups))
(add-to-list 'face-remapping-alist '(hl-line hl-line-inactive))))))))
(window-list frame)))
(visible-frame-list))))
(add-hook 'buffer-list-update-hook #'toggle-active-window-highlighting)
walk-windows
가시 프레임 등의 창을 반복하는 데 사용할 수있는 function도 참조하십시오 . (및에 대해 +1 buffer-list-update-hook
은으로 호출됩니다 select-window
.)
global-hl-line-mode
. 각 버퍼마다 global-hl-line-mode
로드되지 않는 것 같습니다 hl-line-mode
. hl-line
얼굴 을 사용하는 대신 오버레이를 사용합니다 . 나는 운이없이 잠시 동안 그것을 다루고 있었다. 어떤 제안? 별도의 질문을 열어야합니까?