완충액의 주변 부위에 얼굴이 번지는 것을 방지하는 방법은 무엇입니까?


20

Q : 접힌 헤더 끝에서 org-mode링크면이 ...선택 표시 문자 로 번지지 않도록하려면 어떻게해야 합니까?

이것은 약간의 영양가있는 시각적 진드기입니다. 에서에서 org-mode링크가 마지막 항목 인 경우 링크면 ...이 머리 위로 접혀 있음을 나타내는 링크면으로 번집니다 . 링크 뒤에 빈 공간이 있으면 출혈이없는 것입니다.

내가 게시 한 스크린 샷은 문제를 보여줍니다. 세 번째 줄은 링크 끝과 줄 끝 사이에 문자가없는 문제가있는 줄이며, 네 번째 줄은 링크와 그 뒤에 공백이 표시됩니다.

이상한 링크 페이스 동작

우선, 왜 이런 일이 발생합니까? 둘째, 요점까지 어떻게 중지합니까?

업데이트 1 : 의견에 따라 아래에 게시 된 헤더가 닫힌 버퍼의 스크린 샷이 있습니다. init 파일 (예 :) emacs -Q, required org-mode 없이 Emacs를 열고이 예제 파일을 열었습니다. 그래서 : 그것은 내 설정에서 어리석은 것으로 보이지 않습니다.

모든 헤더가 닫혔습니다. 이상한 링크면 폐쇄

모든 헤더가 열립니다 : 이상한 링크 페이스 오픈

위에서 사용했던 테마는 inkpot이지만 기본 테마뿐만 아니라 새 테마를 사용할 때도 동일한 문제가 발생합니다 (새 스크린 샷에서와 같이).

이맥스 버전은 24.3.1입니다. org 버전 7.9.3f (즉, 해당 Emacs 버전과 번들로 제공되는 버전)와 8.3beta를 사용할 때 동일한 결과를 얻습니다.

업데이트 2 : 주석 요청에 대한 최소 작동 예는 다음과 같습니다.

* 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과 그것과 함께 제공되는 조직 모드에서 그것을 재현하는 데 어려움을 겪고 있습니다. 당신이 언급 한 재생산 단계조차도. 원시 org-mode 버퍼를 보여줄 수 있습니까? (저는 그것이 org-mode의 버그라고 가정합니다. 줄 바꿈을 추가하면 도움이 되나요?)
aerique

@ aerique와 동일하지만 여기에 표시되지 않습니다. 아마도 이것은 Emacs 버전이나 조직 모드 버퍼의 세부 사항에 따라 달라질 수 있습니다.
Stefan

@Dan, 호기심에서 어떤 테마를 사용하고 있습니까?
Luke

1
@ Dan 테스트를 위해 예제 org 파일의 소스를 제공 할 수 있습니까?
Wilfred Hughes

2
@Dan 제공 한 파일을 사용하여 Emacs 24.4에서이를 재현 할 수 있습니다.
rekado

답변:


10

org-modeorg-activate-bracket-links함수 에 의해 발생하는 버그처럼 보입니다 .

이 기능은 다음과 같습니다.

(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)))

그것은 괄호 링크에 대한 일치 검색 (예 [[target][label]]는 숨 깁니다 [[target][추가하여 일부 ip텍스트 속성에 다음을 linkifies label추가하여 vp텍스트 속성에, 그리고 마지막으로 후행를 제거 ]]추가하여 ip다시 텍스트 속성에.

이 모든 것이 옳아 보입니다. org-rear-nonsticky-at재산 출혈을 돌봐야합니다.

이 동작은에 의해 트리거되어 (add-text-properties (match-end 3) (match-end 0) ip)후행을 숨 깁니다 ]]. 'invisible 'org-link속성 만이 동작을 트리거하고 다른 속성은 결백 한 것으로 보입니다.

당신은 덮어 쓸 수 org-activate-bracket-links등이 ip더 이상 세트 'invisible하지만 'display ""같은 효과가 있습니다 :

(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)))

분명히 이것은 못생긴 해킹입니다. 그러나 그것은 나를 위해 일하고 당신을 위해 일할 수 있습니다. 여전히 버그 보고서를 제출하는 것이 좋습니다.


노력해 주셔서 감사합니다 (+1!).하지만이 솔루션은 효과가 없습니다. 오히려 propertizing 이상 [[~/somefile.txt][link label]]으로 link label(이탤릭체 링크 표준면을 표시 함), 그것을된다 link label]](얼굴의 변화없이). 버그 신고를하겠습니다.
Dan

흠, 이상하다. 내 정의의 유일한 변화는 org-activate-bracket-links대체 'invisible non-nil'display ""여전히 이전과 링크의 얼굴을 적용해야하므로. 확실히 Emacs 24.4에서 저에게 효과적이지만, 해킹을 시도하는 것보다 버그 리포트에 에너지가 더 많이 소비되는 것 같습니다 ... :)
rekado
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.