Chaque fois que j'appelle fill-paragraph
, le tampon est toujours marqué comme modifié, même si la commande n'a eu aucun effet (c'est-à-dire si le paragraphe était déjà rempli). Il crée également une action annulable vide (facilement détectable avec undo-tree-mode
). D'autres commandes susceptibles d'apporter des modifications, telles que les commandes d'indentation, ne marquent pas le tampon comme modifié ou ne créent pas d'action à annuler si rien n'a été modifié. Existe-t-il un moyen de fill-paragraph
marquer le tampon modifié et de créer une action annulable uniquement s'il a réellement changé quelque chose?
fill-paragraph
Lily Chung
la source
la source
M-q
ne marque pas le tampon modifié par défaut, du moins d'après mes tests. Quel mode utilisez-vous? Je suppose que le mode écrasefill-paragraph
d'une certaine manière.Réponses:
Notez que cela est corrigé pour les nouveaux Emacsen (v.26 vers le haut).
la source
Le problème est que
fill-paragraph
(ou plutôt,fill-region-as-paragraph
) supprimera et réinsérera les nouvelles lignes pendant qu'il décompose votre paragraphe. Il ne modifiera pas le tampon s'il n'y a qu'une seule ligne. Le no-op dans la liste d'annulation dont vous êtes témoinfill-paragraph
supprime et réinsère simplement les nouvelles lignes.Il n'est pas trivial d'éviter cela. Ce qui suit est un très mauvais hack, et très inefficace pour les gros tampons, mais peut-être que cela fonctionne pour vous. La commande imite
fill-paragraph
(M-q
) avec le comportement identique, sauf qu'elle stocke le contenu du tampon avant de l'appeler, et ensuite, si le contenu est resté le même, elle restaurera l'état de modification et annulera la liste d'avant la modification. Pour ce faire, il a besoin d'une copie (deux, en fait) du contenu du tampon, donc vraiment, c'est assez inefficace. :-)Vous pouvez lier cela à
M-q
.la source
fill-paragraph
fait une distinction entre divers cas, c'est-à-dire se comporte différemment selon une région active, les fonctions de paragraphe de remplissage existantes, etc. Vous devez reproduire ce comportement pour déterminer quelles parties du tampon vont réellement être modifiées. Possible, mais délicat. :-)Réponse tardive, mais voici une version simple qui ne modifie pas le tampon si le texte ne change pas.
Il adapte certaines des idées de la réponse de @ JorgenSchäfer, mais ne fonctionne qu'avec le paragraphe actuel, et uniquement de manière simple, séparée par des espaces (voir les commentaires sur la réponse de @ JorgenSchäfer sur les complications sous le capot).
Il s'agit du seul cas d'utilisation pertinent pour mes propres besoins (c'est-à-dire une utilisation interactive avec une prose "normale", pas de région active), donc je le poste au cas où quelqu'un voudrait l'utiliser ou l'améliorer pour des cas d'utilisation plus compliqués. .
la source