Masalahnya adalah fill-paragraph
(atau lebih tepatnya, fill-region-as-paragraph
) akan menghapus dan memasukkan kembali baris baru saat paragraf Anda rusak. Itu tidak akan mengubah buffer jika hanya ada satu baris. No-op dalam daftar undo yang Anda saksikan hanya fill-paragraph
menghapus dan memasukkan kembali baris baru.
Tidak sepele untuk menghindari ini. Berikut ini adalah peretasan yang sangat buruk, dan sangat tidak efisien untuk buffer besar, tetapi mungkin berhasil untuk Anda. Perintah meniru fill-paragraph
( M-q
) dengan perilaku yang identik, kecuali ia menyimpan isi buffer sebelum memanggilnya, dan setelah itu, jika konten tetap sama, itu akan mengembalikan keadaan modifikasi dan membatalkan daftar dari sebelum perubahan. Untuk melakukan ini, diperlukan salinan (dua, sebenarnya) dari konten buffer, jadi sungguh, ini sangat tidak efisien. :-)
(defun my/fill-paragraph (&optional justify region)
(interactive (progn
(barf-if-buffer-read-only)
(list (if current-prefix-arg 'full) t)))
(let ((old-text (buffer-string))
(old-modified (buffer-modified-p))
(old-undo-list buffer-undo-list))
(fill-paragraph justify region)
(when (equal old-text (buffer-string))
(setq buffer-undo-list old-undo-list)
(set-buffer-modified-p old-modified))))
Anda dapat mengikat itu M-q
.
M-q
benar - tidak menandai buffer diubah secara default, setidaknya dari pengujian saya. Mode apa yang Anda gunakan? Saya kira mode menimpafill-paragraph
dalam beberapa cara.