मैंने इसका 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
फ़ाइल में उपयोग कर रहा हूं ) मूल रूप से जो मैंने पोस्ट किया है, उससे बहुत सरल है। धन्यवाद @ सुझाव का उपयोग करने के लिए आकर्षित किया walk-windows
। मैंने फेस रीमैपिंग के बारे में और अधिक पढ़ा ( इमैक लिस्प मैनुअल में फेस रीमैपिंग देखें ) और महसूस किया कि मैं बहुत सारे कोड निकाल सकता हूं।
पोस्टरिटी के लिए, यहां मैं मूल रूप से क्या पोस्ट कर रहा हूं:
;; 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)