Чи можна дозволити розділові знаки проходити повз стовпця заповнення?


12

У типографії існує практика, яка називається «випинання» (або висяча пунктуація ), яка дозволяє певним символам звисати до кінця поля:

випинання

Я б хотів зробити те саме, що і для моїх текстових документів.

Чи можу я змінити fill-paragraph(та друзів?), Щоб ігнорувати пунктуацію кінця рядка ( .?!:;,'"-), коли вона заповнює абзац?


Я не впевнений, чи справді ви можете назвати випинання (тонке зміщення знаків пунктуації) виправданого тексту, порівнянне з ігноруванням знаків тривалості пунктуації при жорсткому обгортанні тексту (що не виправдовує текст за замовчуванням, роблячи ефект по суті невидимим). Можливо, ви хочете додати, що це стосується виправданого варіанту fill-paragraph?
wasamasa

@wasamasa Protrusion як і раніше існує для залишків лівих текстових блоків.
Шон Аллред

Чи застосовується воно тоді до лівого краю тексту?
wasamasa

@wasamasa Якщо ви не маєте справу з мовою та редактором RTL (які, маючи підтримку, я вважаю, що не входить в рамки), це не має сенсу. Якщо у вас є правий блок флеш, і у вас "не вистачає місця" на лівому полі (тобто стовпець 0), ви не можете точно поставити пунктуацію в стовпчик -1. (Я припускаю, що ви можете змінити правий запас на (1+ заповнюючий стовпець), але це змінить заповнення, і ви можете потрапити в цикл.)
Шон Аллред

1
@wasamasa Що стосується реалізації: не заповнити. перейти до заповнення стовпця. якщо точка дивиться на один символ пунктуації, а потім пробіл, пропустіть вперед. інакше, якщо в середині слова, пропустіть назад. новий рядок, повторити.
Шон Аллред

Відповіді:


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, і він повинен працювати для всіх функцій заливки (оскільки всі вони використовуються current-fill-columnпри обробці кожного рядка). Я сподіваюся, вам сподобається! 😇

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.