@MadhavanKumar 덕분에에 기반한 솔루션을 도출하는 데 집중했습니다 defface
.
기존을 재정의 할 수는 없지만 defface
항상 고유 한 배경색을 만들 수 있음을 깨달았습니다 defface
. 그런 다음 유일한 질문은 원본 대신 내 사용자 정의 defface를 사용하는 방법이었습니다.
stripe-hl-line
솔루션을 안내하기 위해 면을 재정의하는 동일한 예제를 사용합니다 . 이면은 패키지에 정의되어 stripe-buffer
있습니다.
단계는 다음과 같습니다.
1 단계. 자신을 정의하십시오 defface
(defface my/stripe-hl-line
'((((background dark)) (:overline "gray" :underline "gray" :foreground "dodger blue"))
(t (:overline "gray" :underline "gray" :foreground "red")))
"Bold face for highlighting the current line in Hl-Line mode."
:group 'stripe-buffer)
그러면 어두운 배경 에서는 my/stripe-hl-line
얼굴 의 전경색 이 파란색으로 , 밝은 배경에서는 빨간색 으로 표시됩니다.
2 단계.면을 다시 매핑하는 함수 만들기
이 face-remap-add-relative
기능은 기존면을 새면에 다시 매핑하는 데 사용됩니다. 이 경우 stripe-hl-line
얼굴을에 다시 매핑합니다 my/stripe-hl-line
.
(defun my/stripe-hl-line-face-remap ()
(face-remap-add-relative 'stripe-hl-line 'my/stripe-hl-line))
3 단계. 적절한 위치에서 다시 매핑
로부터 stripe-buffer
소스, 내가 볼 hl-line
얼굴에 매핑되는 stripe-hl-line
얼굴. 따라서 리매핑이 발생한 후 ( stripe-listify-buffer
함수 정의에 있음) 리매핑을 수행해야합니다 .
콤비 네이터를 stripe-listify-buffer
사용하여 조언함으로써 리매핑 을합니다 .:after
advice
(advice-add 'stripe-listify-buffer :after #'my/stripe-hl-line-face-remap)
끝난!
즉 set-face-attribute
, 배경 어둠을 기반으로 얼굴을 설정 하는 것과 같은 것을 직접 사용하는 것이 좋을 것 입니다.