Удаление новых строк из буфера (полезно при импорте в ORG, чтобы развернуть текст с сохранением абзацев) - PullRequest
0 голосов
/ 29 мая 2020

Эта функция:

(defun remove-newlines-in-region ()
  "Removes all newlines in the region."
  (interactive)
  (save-restriction
    (narrow-to-region (point) (mark))
    (goto-char (point-min))
    (while (search-forward "\n" nil t) (replace-match "" nil t))))

удалит КАЖДУЮ новую строку в тексте. Это полезно, когда при импорте в организацию создается переносимый текст. Затем мы хотим развернуть текст для каждого абзаца (не во всем буфере, что создало бы целый блок без различия между абзацами).

Как бы мы добавили условие, что if должно применяться только к одной новой строке, а не 2 новых строки подряд? Спасибо!

РЕШЕНИЕ: используйте UnfillRegion. Он делает свою работу!

1 Ответ

0 голосов
/ 31 мая 2020

После поиска первого символа новой строки вы можете использовать looking-at-p, чтобы узнать, является ли следующий символ вторым символом новой строки. Поэтому вместо

(while (search-forward "\n" nil t) (replace-match "" nil t))

вы можете использовать

(while (search-forward "\n" nil t) 
  (unless (looking-at-p "\n")  (replace-match "" nil t)))
...