hl-line-mode arka planı gizle, nasıl önlemek için?


10

İle:

(when window-system
  (set-face-background 'hl-line "light yellow")
  (global-hl-line-mode 1))

geçerli satır sarı arka planla vurgulanır, ancak metnin arka plan özellikleri varsa üzerine de yazılır (fark modu, gökkuşağı modu gibi).

Yalnızca uygun özellikleri olmayan parçalar için arka plan ayarlamak mümkün müdür?

GÜNCELLEME Denemeye başladım, noktalarla arka planla çakışmıyor gibi görünüyor:

(set-face-stipple 'hl-line '(4 4 "\x01\x00\x00\x00"))
(set-face-attribute 'hl-line nil :inherit nil)

Ancak noktalarla maalesef metin görünümüne zarar ...


1
Dikkate almak isteyebileceğiniz diğer bir olasılık, her satır satır komut döngüsünün arka ucuna yerleştirilen bir kaldırma işlevidir, böylece geçerli satırın başlangıcından geçerli satırın sonuna (veya geçerli görsel çizgi (varsa) ve hl-çizgi kaplama yüzü daha sonra farklı bir arka plan rengine sahip diğer metinlerin bulunduğu yerden kaldırılabilir. Yazı tipi kilidi ile yerleştirilmiş vurgulamayı da aramış olursunuz, ancak diğer kaplamalarla (örneğin, sinek yazım hataları / kopyaları) vurgulama da olabilir.
hukukçu

@lawlist Uygulanması ile ilgileniyorum; lütfen tam çözümü aşağıda ekleyebilir misiniz?
Kaushal Modi

@kaushalmodi - Bunu, belirli nokta veya ham metin için nasıl yapacağımı biliyorum, ancak noktadaki belirli metin özellikleri / yazı tipi kilidi vurgulaması için değil. Bu soruyu doğru bir şekilde cevaplamak için bu son iki olayı nasıl test edeceğimi araştırmam gerektiğinden, bunun yerine bir yorum yapmayı seçtim. (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))
Noktadaki

Yanıtlar:


5

Sorun bazen metin özelliğinin facevurgulama için kullanılması ve hl-line-modebir kaplama kullanmasıdır. Ve yer paylaşımları her zaman metin özelliği facevurgulamasının "üstünde" görünür .

diff-mode, örneğin, yer paylaşımını değil, text özelliğini kullanır. Yani bu gibi durumlar için şansınız kalmadı.

Ancak bir bindirme tarafından üretilen vurgulama için yalnızca hl-line bindirmenin bindirme önceliğini azaltabilirsiniz: ya hl-line-overlayda global-hl-line-overlay, bindirmenin diğer bindirme vurgulamasının "altında" görünmesi.

Kitaplık hl-line+.elkullanıyorsanız hl-line-overlay-priority, bindirme önceliğini ayarlamak için seçeneği kullanabilirsiniz . Ayrıca bkz. Emacs Wiki sayfası Geçerli Satırı Vurgula . (Ancak, diğer vurgulamanın bir kaplamadan gelmemesi durumunda kaplama önceliğinin değiştirilmesinin bir etkisi yoktur.)


Cevap için teşekkürler. Yüzler ve bindirmeler arasındaki fark hakkında
endişelenmiyorum

Bu hl-line-overlaymülke nasıl erişebilirim ? Örneğin görünmez customize-variable.
9000

@ 9000: Cevabın dediği gibi, kütüphane kullanırsanız hl-line+.elseçeneği özelleştirebilirsiniz hl-line-overlay-priority. Aksi takdirde, (önceden sağlanan işlevleri yeniden tanımlamak veya önermek dışında) yapamazsınız. Bu kullanıcı seçeneğini sunmanın amacı budur.
Drew

3

Kısmi çözümle bitiyorum - sadece satırın sonundan vurgulayın:

(defun my-hl-line-range-function ()
  (cons (line-end-position) (line-beginning-position 2)))
(setq hl-line-range-function #'my-hl-line-range-function)

(when window-system
  (require 'hl-line)
  (set-face-attribute 'hl-line nil :inherit nil :background "light yellow")
  (setq global-hl-line-sticky-flag t)
  (global-hl-line-mode 1))

2

hl-lineArka planı geçersiz kılmamaya çalışırken bu soruda tökezlendi (bu durumda girinti kılavuzları olmasına rağmen):

Girintiden sonra vurgu çizgisini çizmeye başlayan buna karar verdim :

(defun my-hl-line-range-function ()
  (cons
   (+ (line-beginning-position 1) (current-indentation))
   (line-beginning-position 2)))
(setq hl-line-range-function #'my-hl-line-range-function)

Değiştirmek (+ (line-beginning-position 1) (current-indentation))de (point)işe yarar, (imleçten başlayarak)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.