আমি 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)