늦은 답변이지만 텍스트가 변경되지 않으면 버퍼를 수정하지 않는 간단한 버전이 있습니다.
(defun my-fill-paragraph (&optional justify region)
"Fill paragraph, but don't modify the buffer if filling doesn't
change the text. See `fill-paragraph' for details."
(interactive (progn
(barf-if-buffer-read-only)
(list (if current-prefix-arg 'full) t)))
(if (buffer-modified-p)
;; if modified: use standard fill-paragraph
(fill-paragraph justify region)
;; if unmodified: get a candidate filled version
(save-excursion
(let* ((col fill-column)
(beg (progn (forward-paragraph -1)
(skip-syntax-forward " >")
(point)))
(end (progn (forward-paragraph 1)
(skip-syntax-backward " >")
(point)))
(old (buffer-substring-no-properties beg end))
(new (with-temp-buffer
(setq fill-column col)
(insert old)
(fill-paragraph justify region)
(buffer-string))))
;; don't modify unless the old and new versions differ
(unless (string-equal old new)
(delete-region beg end)
(insert new))))))
@ JorgenSchäfer의 답변에있는 아이디어 중 일부를 적용하지만 현재 단락에서만 간단하고 공백으로 분리 된 방식으로 만 작동합니다 (후드에서 합병증에 대한 @ JorgenSchäfer의 답변에 대한 의견 참조).
이것은 내 목적과 관련된 유일한 유스 케이스에 관한 것입니다 (즉, "정상"산문을 사용하는 대화 형 사용, 활성 영역 없음). 누군가가 그것을 사용하거나 더 복잡한 유스 케이스를 위해 개선하려는 경우에 게시하고 있습니다. .
M-q
. 적어도 테스트에서 버퍼가 기본적으로 변경된 것으로 표시하지 않습니다. 어떤 모드를 사용하고 있습니까?fill-paragraph
어떤 방식으로 모드를 덮어 쓰는 것 같습니다 .