yüzlerin tampon çevresindeki bölgelere kanamasını nasıl önleyebilirim?


20

S: Katlanmış bir başlığın sonunda org-modebağlantı yüzlerinin ...seçici ekran karakterlerine akmasını nasıl önleyebilirim?

Bu beni biraz deli eden görsel bir kene. Bir org-modebağlantı, bir satırdaki en son şey olduğunda, bağlantı yüzü ..., başlığın katlandığını gösteren bağlantıya kanar . Örneğin, bağlantıdan sonra boş bir alan varsa, kanama olmaz.

Gönderdiğim ekran görüntüsü sorunu gösteriyor. Üçüncü satır, bağlantının sonu ile satır sonu arasında karakter içermeyen sorunlu satırdır; dördüncü satır ise bir bağlantı ve ardından bir boşluk gösterir:

garip bağlantı yüz davranışı

Her şeyden önce, bu neden oluyor? İkincisi ve daha da önemlisi, nasıl durdurabilirim?

GÜNCELLEME 1: Yorumlara göre, aşağıda yayınlanan, başlıklar kapalı ve açık olarak tamponun ekran görüntüleri. Emacs'ı init dosyası (yani emacs -Q), required org modu ile açtım ve bu örnek dosyayı açtım. Yani: kurulumumda akıl almaz bir şey gibi görünmüyor.

Tüm başlıklar kapalı: garip bağlantı yüzü kapalı

Tüm başlıklar açık: garip bağlantı yüzü açık

Yukarıda kullandığım tema inkpot, ancak solarize temayı ve varsayılan temayı (yeni ekran görüntülerinde olduğu gibi) kullanırken aynı problemi yaşıyorum.

Emacs sürümü 24.3.1'dir. Org sürüm 7.9.3f (yani, bu Emacs sürümü ile birlikte gelen) ve 8.3beta kullanırken aynı sonuçları elde ediyorum.

GÜNCELLEME 2: Bir yorum isteğine yanıt olarak asgari bir çalışma örneği:

* here's a header with a [[~/somefile.txt][link at the end]]

  - This one's a problem
  - Interesting note:
    + put the cursor immediately *after* the *d* in "end" with the
      header closed/folded
      * the face no longer bleeds over into the dots
    + move the cursor anywhere else
      * the face bleeds over into the dots again

* here's another [[~/someotherfile.txt][go at it]]
  DEADLINE: <2014-10-26 Sun>

  - This one's also a problem

* here's another header with a [[~/anotherfile.txt][link followed by a space]] 

  - No bleed-over onto the dots with this one

1
Emacs 24.3.1 ve onunla birlikte gelen org modu üzerinde çoğalmakta zorlanıyorum. Bahsettiğiniz üreme adımlarında bile. Ham kuruluş modu arabelleğini gösterebilir misiniz? (Bu, org modunda bir hata olduğunu varsayıyorum dedi. Ekstra yeni satır eklemek yardımcı olur mu?)
aerique

@Aerique ile aynı, bunu burada görmüyorum. Bu, belki de Emacs sürümüne veya Org modu arabelleğinin bazı ayrıntılarına bağlıdır.
Stefan

@Dan, meraktan, hangi temayı kullanıyorsun?
Luke

1
@Lütfen test etmek için örnek bir kuruluş dosyasının kaynağını sağlayabilir misiniz?
Wilfred Hughes

2
@Dacs 24.4'te sağladığınız dosyayla yeniden oluşturabilirim.
rekado

Yanıtlar:


10

Bir böcek gibi bu görünüyor tarafından tetiklenen org-modebireyin org-activate-bracket-linksfonksiyonu.

Bu fonksiyon şöyle görünür:

(defun org-activate-bracket-links (limit)
  "Run through the buffer and add overlays to bracketed links."
  (if (and (re-search-forward org-bracket-link-regexp limit t)
       (not (org-in-src-block-p)))
      (let* ((hl (org-match-string-no-properties 1))
         (help (concat "LINK: " (save-match-data (org-link-unescape hl))))
         (ip (org-maybe-intangible
          (list 'invisible 'org-link
            'keymap org-mouse-map 'mouse-face 'highlight
            'font-lock-multiline t 'help-echo help
            'htmlize-link `(:uri ,hl))))
         (Vp (list 'keymap org-mouse-map 'mouse-face 'highlight
               'font-lock-multiline t 'help-echo help
               'htmlize-link `(:uri ,hl))))
    ;; We need to remove the invisible property here.  Table narrowing
    ;; may have made some of this invisible.
    (org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
    (remove-text-properties (match-beginning 0) (match-end 0)
                '(invisible nil))
    (if (match-end 3)
        (progn
          (add-text-properties (match-beginning 0) (match-beginning 3) ip)
          (org-rear-nonsticky-at (match-beginning 3))
          (add-text-properties (match-beginning 3) (match-end 3) vp)
          (org-rear-nonsticky-at (match-end 3))
          (add-text-properties (match-end 3) (match-end 0) ip)
          (org-rear-nonsticky-at (match-end 0)))
      (add-text-properties (match-beginning 0) (match-beginning 1) ip)
      (org-rear-nonsticky-at (match-beginning 1))
      (add-text-properties (match-beginning 1) (match-end 1) vp)
      (org-rear-nonsticky-at (match-end 1))
      (add-text-properties (match-end 1) (match-end 0) ip)
      (org-rear-nonsticky-at (match-end 0)))
    t)))

Bir parantez bağlantı için bir maç için arar (örneğin [[target][label]], gizler [[target][ekleyerek bölümünü ipmetin özelliklerine, daha sonra linkifies labelekleyerek vpmetin özelliklerine ve son olarak sondaki kaldırır ]]ekleyerek iptekrar metin özelliklerine.

Hepsi doğru görünüyor. org-rear-nonsticky-atmülkiyet kanamasına dikkat etmelidir.

Bu davranış, (add-text-properties (match-end 3) (match-end 0) ip)izleyen gizleyen tarafından tetiklenir ]]. Yalnızca 'invisible 'org-linközellik bu davranışı tetikler, diğer özellikler masum gibi görünür.

Sen üzerine yazabilirsiniz org-activate-bracket-linksöyle ki ipartık setleri 'invisibleancak 'display ""aynı etkiye sahiptir:

(defun org-activate-bracket-links (limit)
  "Run through the buffer and add overlays to bracketed links."
  (if (and (re-search-forward org-bracket-link-regexp limit t)
       (not (org-in-src-block-p)))
      (let* ((hl (org-match-string-no-properties 1))
         (help (concat "LINK: " (save-match-data (org-link-unescape hl))))
         (ip (org-maybe-intangible
          (list 'display ""
            'keymap org-mouse-map 'mouse-face 'highlight
            'font-lock-multiline t 'help-echo help
            'htmlize-link `(:uri ,hl))))
         (Vp (list 'keymap org-mouse-map 'mouse-face 'highlight
               'font-lock-multiline t 'help-echo help
               'htmlize-link `(:uri ,hl))))
    ;; We need to remove the invisible property here.  Table narrowing
    ;; may have made some of this invisible.
    (org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
    (remove-text-properties (match-beginning 0) (match-end 0)
                '(invisible nil))
    (if (match-end 3)
        (progn
          (add-text-properties (match-beginning 0) (match-beginning 3) ip)
          (org-rear-nonsticky-at (match-beginning 3))
          (add-text-properties (match-beginning 3) (match-end 3) vp)
          (org-rear-nonsticky-at (match-end 3))
          (add-text-properties (match-end 3) (match-end 0) ip)
          (org-rear-nonsticky-at (match-end 0)))
      (add-text-properties (match-beginning 0) (match-beginning 1) ip)
      (org-rear-nonsticky-at (match-beginning 1))
      (add-text-properties (match-beginning 1) (match-end 1) vp)
      (org-rear-nonsticky-at (match-end 1))
      (add-text-properties (match-end 1) (match-end 0) ip)
      (org-rear-nonsticky-at (match-end 0)))
    t)))

Açıkçası, bu çirkin bir hack. Ama bu benim için çalışıyor ve sizin için de işe yarayabilir. Yine de bir hata raporu göndermenizi tavsiye ederim.


Çaba için teşekkürler (bunun için +1!), Ancak bu çözüm benim için çalışmıyor. (İtalik bağlantı için standart yüzü gösterir) [[~/somefile.txt][link label]]olarak düzeltmek yerine link label, olur link label]](yüzde değişiklik olmadan). Hata raporu vereceğim.
Dan

Hmm, garip. Benim tanımında tek değişiklik org-activate-bracket-linksdeğiştiriyor 'invisible non-nilile 'display ""yine önceki gibi bağlantı yüzünü uygulamalıdır yüzden. Kesinlikle Emacs 24.4'te benim için çalışıyor, ama hack işimi yapmaya çalışmak yerine enerji hata raporunda daha iyi harcanıyor ... :)
rekado
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.