回答:
を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
あなたが目に見えるフレームの窓を反復するために使用できる、などの(そして1のためbuffer-list-update-hook
により呼び出されます、select-window
。)
global-hl-line-mode
です。バッファごとにglobal-hl-line-mode
読み込まhl-line-mode
れないようです。hl-line
顔を使用する代わりにオーバーレイを使用します。私はしばらく運が悪かった。助言がありますか?別の質問を開く必要がありますか?