Sorun şu ki fill-paragraph
(ya da daha doğrusu fill-region-as-paragraph
), yeni satırları paragrafınızı bozurken kaldırır ve yeniden ekler. Yalnızca bir satır varsa arabelleği değiştirmez. Tanık olduğunuz geri alma listesindeki no-op yalnızca fill-paragraph
yeni satırları kaldırmak ve yeniden eklemek.
Bundan kaçınmak önemsiz değildir. Aşağıdaki oldukça kötü bir hack ve büyük tamponlar için son derece verimsiz, ama belki sizin için çalışıyor. Komut aynı davranışı taklit eder fill-paragraph
( M-q
), ancak arabellek içeriğini çağırmadan önce saklar ve daha sonra içerik aynı kalırsa, değişiklik durumunu geri yükler ve değişiklikten önce listeyi geri alır. Bunu yapmak için, arabellek içeriğinin bir kopyasına (aslında iki tane) ihtiyacı vardır, bu yüzden gerçekten, bu oldukça verimsizdir. :-)
(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))))
Bunu ona bağlayabilirsiniz M-q
.
M-q
en azından testimden varsayılan olarak değiştirilen arabelleği işaretlemiyor. Hangi modu kullanıyorsunuz? Modun bir şekilde üzerine yazdığını tahmin ediyorumfill-paragraph
.