Cada vez que llamo fill-paragraph
, el búfer siempre se marca como modificado, incluso si el comando no tuvo efecto (es decir, si el párrafo ya estaba lleno). También crea una acción vacía que se puede deshacer (se detecta fácilmente con undo-tree-mode
). Otros comandos que tienen el potencial de realizar cambios, como los comandos de sangría, no marcan el búfer como modificado o crean una acción que no se puede deshacer si no se cambió nada. ¿Hay alguna forma de fill-paragraph
marcar el búfer modificado y crear una acción que no se puede deshacer solo si realmente cambió algo?
fill-paragraph
Lily Chung
fuente
fuente
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.Respuestas:
Tenga en cuenta que esto se corrige para Emacsen más reciente (v.26 hacia arriba).
fuente
El problema es que
fill-paragraph
(o más bienfill-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 simplementefill-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. :-)Puedes vincular eso a
M-q
.fuente
fill-paragraph
hace alguna distinción entre varios casos, es decir, se comporta de manera diferente dependiendo de una región activa, funciones de párrafo de relleno existentes, etc. Tendría que replicar ese comportamiento para determinar qué partes del búfer se cambiarán realmente. Posible, pero complicado. :-)Respuesta tardía, pero aquí hay una versión simple que no modifica el búfer si el texto no cambia.
Adapta algunas de las ideas en la respuesta de @ JorgenSchäfer, pero funciona solo con el párrafo actual, y solo de una manera simple, separada por espacios en blanco (ver comentarios en la respuesta de @ JorgenSchäfer sobre complicaciones bajo el capó).
Este es el único caso de uso que es relevante para mis propios fines (es decir, uso interactivo con prosa "normal", sin región activa), así que lo publico en caso de que alguien quiera usarlo o mejorarlo para casos de uso más complicados .
fuente