顔がバッファの周辺領域に出血するのを防ぐ方法は?


20

Q:org-modeリンクさ...れたヘッダーが折り畳まれたヘッダーの最後にある選択的な表示文字にはみ出さないようにするにはどうすればよいですか?

これは視覚的な目盛りで、私を少し気取ってしまいます。すると、org-modeリンクが行の一番最後で、リンクの顔がに超える出血...ヘッダーが折り畳まれていることを示しています。たとえば、リンクの後に空白スペースがある場合、出血はありません。

私が投稿したスクリーンショットは問題を示しています。3行目は、リンクの終わりと行の終わりの間に文字がない問題のある行です。4行目はリンクを示し、その後にスペースが続きます。

奇妙なリンク面の動作

まず、なぜこれが起こるのですか?第二に、さらに重要なことに、どうすれば停止させることができますか?

更新1:コメントに従って、ヘッダーを閉じた状態と開いた状態のバッファーのスクリーンショットを以下に掲載します。Emacsを初期化ファイルなしで(つまりemacs -Q)、required org-modeで開き、このサンプルファイルを開きました。だから、それは私の設定では変なものではないようです。

すべてのヘッダーが閉じられました: 奇妙なリンク面が閉じた

すべてのヘッダーが開きます: 奇妙なリンクが開いている

上記で使用していたテーマはインクポットですが、デフォルトのテーマ(新しいスクリーンショットのように)と同様にソーラー化されたテーマを使用しても同じ問題が発生します。

Emacsのバージョンは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とそれに付属する組織モードでそれを再現するのに苦労しています。あなたが言及した複製手順でも。生の組織モードバッファを表示できますか?(とはいえ、それは組織モードのバグだと思います。余分な改行を追加することは助けになりますか?)
aerique 14年

@aeriqueと同じですが、ここには表示されません。そのため、これはおそらくEmacsのバージョン、またはOrgモードバッファの詳細に依存します。
ステファン14年

@Dan、好奇心から、どのテーマを使用していますか?
ルーク14年

1
@Danテスト用のサンプルorgファイルのソースを提供していただけますか?
ウィルフレッドヒューズ14年

2
@Danあなたが提供したファイルを使って、Emacs 24.4でこれを再現できます。
レカド14年

回答:


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]](顔の変化なしで)。バグレポートを提出します。
ダン

うーん、奇妙な。私の定義の唯一の変更org-activate-bracket-linksはに置き換える'invisible non-nilこと'display ""ですので、以前と同様にリンク面を適用する必要があります。Emacs 24.4では確かに機能しますが、ハックを機能させるのではなく、バグレポートにエネルギーを費やす方が良いと思います... :)
rekado
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.