El problema es que fill-paragraph
(o más bien fill-region-as-paragraph
) eliminará y volverá a insertar nuevas líneas mientras desglosa su párrafo. No modificará el búfer si solo hay una línea. El no-op en la lista de deshacer que presencia es simplemente fill-paragraph
eliminar y volver a insertar nuevas líneas.
No es trivial evitar esto. El siguiente es un truco bastante malo, y altamente ineficiente para grandes buffers, pero tal vez funcione para usted. El comando imita fill-paragraph
( M-q
) con el mismo comportamiento, excepto que almacena el contenido del búfer antes de llamarlo, y luego, si el contenido permaneció igual, restaurará el estado de modificación y la lista de deshacer antes del cambio. Para hacer esto, necesita una copia (dos, en realidad) del contenido del búfer, así que realmente, esto es bastante ineficiente. :-)
(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))))
Puedes vincular eso a M-q
.
M-q
: no marca el búfer cambiado de forma predeterminada, al menos desde mi prueba. ¿Qué modo estás usando? Supongo que el modo se sobrescribefill-paragraph
de alguna manera.