句読点が列を通過することを許可できますか?


12

タイポグラフィでは、特定の記号を余白の端からぶら下げることができる「突起」(またはぶら下げ句読点)と呼ばれるプラクティスがあります。

突起

テキストドキュメントでも同じことをしたいです。

段落を埋めるときにfill-paragraph行末の句読点(.?!:;,'"-)を無視するように変更できますか?


テキストをハードラッピングするときに末尾の句読点を無視することに匹敵する、正当化されたテキストの突起(末尾の句読点の微妙なシフト)を実際に呼び出すことができるかどうかはわかりません(デフォルトではテキストを正当化せず、本質的に目に見えないようにします)。おそらく、これはfill-paragraph?の正当化されたバリアントに適用されることを追加したいと思います。
wasamasa

@wasamasa Protrusionは、左のテキストブロックをフラッシュするために引き続き存在します。
ショーンオールレッド

それはテキストの左端に適用されますか?
-wasamasa

@wasamasa RTL言語とエディター(サポートされているとはいえ、範囲外であると感じています)を扱っているのでなければ、意味がありません。右にフラッシュするブロックがあり、左マージン(つまり、列0)で「スペースがなくなった」場合、句読点を列-1に正確に配置することはできません。(右マージンを(1+塗りつぶし列)にシフトできると思いますが、それは塗りつぶしを変更し、ループに巻き込まれる可能性があります。)
ショーンオールレッド

1
@wasamasa実装の観点から:未記入。fill-columnにジャンプします。ポイントが句読点の1文字を見てから空白を探している場合、前方にスキップします。それ以外の場合は、単語の途中にある場合、後方にスキップします。改行、繰り返し。
ショーンオールレッド

回答:


2

ああ、解決策があります!これを.emacs/ .emacs.d/init.elファイルのどこかに置きます:

(define-advice current-fill-column (:filter-return (rtn) protrusion)
  "Advice to allow hanging punctuation when filling text."
  ;; Get the character after the proposed cutoff point
  (let ((end-char (char-after (1+ rtn))))
    (if (and end-char
             ;; Check if character is in the “punctuation” syntax table…
             (or (eq (char-syntax end-char) ?.)
                 ;; …or is any of these characters (feel free to add more)
                 (memq end-char (string-to-list ".,!?;:-"))))
        ;; If so, return the original value, plus one.
        (1+ rtn)
      ;; Otherwise, do nothing and return the original value.
      rtn)))

これをfill-paragraphでテストしましたが、すべてのfill関数で機能するはずです(current-fill-column各行を処理するときにすべて使用されるため)。気に入ってくれるといいな!😇

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.