Satır numarası çubuğunun tamamını özel bir arka plan rengiyle nasıl doldurabilirim?


9

Aşağıdaki ekran görüntüsünde, linumyüzün arka planını bazı renklere ayarladım , ancak arabellek sonunda boş bir bölge var ve satır kaydırma ( global-visual-line-mode) etkinleştirildiğinde satırlar arasında boşluklar var :

Çizgi şal ile kırık linum arka plan.

İdeal olarak, sol tarafın tamamı aynı renkte olmalıdır. Mümkün mü? Bazı Elisp'leri biliyorum, bu yüzden mümkünse, bazı talimatlarla kendim bir düzeltme yazabilirim.


Tema değiştirirken bunu fark ettim. Benim için geçici çözüm varsayılan temaya geri dönmek ve sonra belirli temayı yeniden etkinleştirmekti. Bu genellikle arka plan renklerini sıfırlar. Düzeltmek için bir işlevin nasıl yazılacağına dair bir ipucu verebilecek belirli yüzlerle daha çalışkan olup olmadığını görmek için varsayılan tema ayarlarına göz atmak faydalı olabilir.
elarson

"Arasında" rengini düzeltmek uygun olabilir (bir deneyeceğim). Tampon bittikten sonra rengi sabitlemek, üzülerek değil - renklendirilecek hiçbir şey yok.
Malabarba

Aslında, bunun sık sık sorduğunu gördüm, muhtemelen değerli bir özellik isteği.
Malabarba

@Malabarba Neden tamponun altındaki alana genişletmek mümkün değil? Ne de olsa saçak bunu yapıyor.
Lenar Hoyt

1
@mcb Şimdi ne demek istediğini biraz daha iyi anlıyorum. Saçakın kendi yüzü vardır (arka planı ekranın altına uzatılır), kenar boşluğu yoktur (sadece varsayılan yüzü ödünç alır).
Malabarba

Yanıtlar:


6

Sorun

Buradaki sorun, kenar boşluklarının görünümünü kontrol edecek bir yüzün olmamasıdır. Bindirmeleri kullanarak kenar boşluğunda metin görüntüleyebilirsiniz (işte budur linum-mode), ancak Emacs'daki herhangi bir metin gibi, arabellek sınırlarıyla sınırlıdır. Dolayısıyla, ara belleğin son satırının ötesinde kenar boşluğu ekranı üzerinde herhangi bir kontrole sahip olamazsınız.

Ne olabilir yapmak, aradaki bu hatalı satırları düzeltmektir.

Ne koymalı

Bu değişken, iki mantıksal çizgi arasında “görsel” olan bu satırlarda ne görüntülemek istediğinizi kontrol eder. Önemli olan 'face 'linum, bu çizgilerin görünümünü takip etmesini sağlayan kısımdır linum-mode. "-----"Bölüm boşluk ya da her neyse istediğiniz değiştirebilirsiniz, demonstrasyon olduğunu.

(defvar endless/margin-display
  `((margin left-margin) ,(propertize "-----" 'face 'linum))
  "String used on the margin.")

Nasıl yapılır

Aşağıdaki kod tampondan geçer ve linum-modeher satıra “gerçek” olmayan bindirmeler (kullanımlara benzer ) yerleştirir.

(defvar-local endless/margin-overlays nil
  "List of overlays in current buffer.")

(defun endless/setup-margin-overlays ()
  "Put overlays on each line which is visually wrapped."
  (interactive)
  (let ((ww (- (window-width)
               (if (= 0 (or (cdr fringe-mode) 1)) 1 0)))
        ov)
    (mapc #'delete-overlay endless/margin-overlays)
    (save-excursion
      (goto-char (point-min))
      (while (null (eobp))
        ;; On each logical line
        (forward-line 1)
        (save-excursion
          (forward-char -1)
          ;; Check if it has multiple visual lines.
          (while (>= (current-column) ww)
            (endles/make-overlay-at (point))
            (forward-char (- ww))))))))

(defun endles/make-overlay-at (p)
  "Create a margin overlay at position P."
  (push (make-overlay p (1+ p)) endless/margin-overlays)
  (overlay-put
   (car endless/margin-overlays) 'before-string
   (propertize " "  'display endless/margin-display)))

Ve linum-modesatır numaralarını her güncellediğinde çalışmasını istiyoruz .

(add-hook 'linum-before-numbering-hook #'endless/setup-margin-overlays)

Ben sadece test ettim org-modeve kaydırma sırasında bazı gecikme tanıtmak gibi görünüyor ve uyarlamalı şal açık ile belirgin bir sebep olmadan boşlukları özlüyor. Ekran görüntüsü.
Lenar Hoyt

@mcb Evet, performans burada bir sorundur, ancak bunu geliştirmek uzun ve karmaşık bir konudur. Kuruluş modu sorununa gelince, kuruluş katmanları yoğun bir şekilde kullanır, bu nedenle çatışma olacağı mantıklıdır. Bunu düzeltmenin herhangi bir yolunun farkında değilim, ama biraz düşüneceğim.
Malabarba

-1

Bunu yapılandırmanıza koyabilirsiniz:

(set-face-background 'fringe "#f4a460")

... renk kodunu istediğiniz şekilde değiştirin.


2
Bu, saçak rengini değiştirir, saçak üzerinde satır numaraları görüntülenmez. (deneyin ve farkı göreceksiniz)
Malabarba

1
Sorudaki ekran görüntüsünde de görülebilir: "satır numaraları sütunu" arabellekle aynı arka plan rengidir, oysa saçak satır numaraları sütunu ve tampon arasındaki küçük alan gri renktedir.
T. Verron

Evet haklısın. Ben önce numaralandırma kanca linum bir functon çalıştırmak yeni bir bindirme tanıtmak ve ayarlamak için bir yüz vermek şüpheli.
tealeg
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.