Dengan:
(when window-system
(set-face-background 'hl-line "light yellow")
(global-hl-line-mode 1))
baris saat ini disorot oleh latar belakang kuning, tetapi jika teks memiliki properti latar belakang juga ditimpa (seperti mode-diff, mode pelangi).
Apakah mungkin untuk menetapkan latar belakang hanya untuk bagian yang tidak memiliki properti yang sesuai?
PEMBARUAN Saya mulai bereksperimen, sepertinya stipple tidak bertentangan dengan latar belakang:
(set-face-stipple 'hl-line '(4 4 "\x01\x00\x00\x00"))
(set-face-attribute 'hl-line nil :inherit nil)
Namun sayangnya, kerusakan tampilan teks ...
elisp
syntax-highlighting
hl-line-mode
gavenkoa
sumber
sumber
(when (memq NAME-OF-FACE (mapcar (function (lambda (ovr) (overlay-get ovr 'face))) (overlays-at (point)))) (remove-overlays BEGINNING-POINT ENDING-POINT 'face hl-line))
Jawaban:
Masalahnya adalah bahwa terkadang properti teks
face
digunakan untuk menyorot, danhl-line-mode
menggunakan overlay. Dan overlay selalu muncul "di atas"face
menyoroti properti teks .diff-mode
, misalnya, menggunakan properti teks, bukan overlay. Jadi untuk kasus seperti ini Anda kurang beruntung.Tetapi untuk sorotan yang dihasilkan oleh overlay, Anda bisa mengurangi prioritas overlay dari over-line hl: salah satu
hl-line-overlay
atauglobal-hl-line-overlay
, sehingga overlay tersebut tampak "di bawah" penyorotan overlay lainnya.Jika Anda menggunakan perpustakaan
hl-line+.el
maka Anda dapat menggunakan opsihl-line-overlay-priority
untuk mengatur prioritas overlay. Lihat juga halaman Wiki Emacs Sorot Baris Saat Ini . (Tetapi sekali lagi, mengubah prioritas overlay tidak berpengaruh jika sorotan lainnya bukan dari overlay.)sumber
hl-line-overlay
properti itu? Misalnya tidak muncul dicustomize-variable
.hl-line+.el
maka Anda cukup menyesuaikan opsihl-line-overlay-priority
. Jika tidak, Anda tidak dapat (kecuali dengan mendefinisikan ulang atau menyarankan fungsi yang sudah disiapkan sebelumnya). Itulah gunanya menyediakan opsi pengguna ini.Saya akhiri dengan solusi parsial - sorot hanya dari ujung baris:
sumber
Tersandung pada pertanyaan ini ketika mencoba untuk tidak membuat
hl-line
menimpa latar belakang (meskipun itu panduan lekukan dalam kasus ini):Saya menyelesaikan ini, yang mulai menggambar garis sorot setelah lekukan:
Mengganti
(+ (line-beginning-position 1) (current-indentation))
dengan(point)
bekerja juga, (mulai dari kursor).sumber