Comment réparer le paragraphe de remplissage du mode Markdown?

8

markdown-modeest assez bon pour remplir les paragraphes dans l'ensemble, mais il y a un défaut qui me dérange vraiment. Si un paragraphe contient une ligne qui se termine par deux espaces, il commence seulement à remplir ne remplit jamais cette ligne.

Par exemple, prenez l'exemple suivant, où la deuxième ligne se termine par deux espaces.

If I hit M-q right here at the start, this line will get broken into two, but the others won't.
If I hit M-q right here only the NEXT line will get split. All because this line here ends in two spaces.__
If I hit M-q right here, this line will get broken into two, but the others won't.

L'exemple s'explique. Même si je frappe M-qau début de chaque ligne, je reste avec ceci:

If I hit M-q right here at the start this line will get broken into
two, but the others won't.
If I hit M-q right here only the NEXT line will get split. All because this line here ends in two spaces.__
If I hit M-q right here, this line will get broken into two, but the
others won't.

Ce que j'aimerais avoir, c'est ceci:

If I hit M-q right here at the start this line will get broken into
two, but the others won't. If I hit M-q right here only the NEXT line
will get split. All because this line here ends in two spaces.__
If I hit M-q right here, this line will get broken into two, but the
others won't.

Q: Comment puis-je me fill-paragraphcomporter comme ça?

De toute évidence, markdown-modeconsidère la ligne médiane entière comme un séparateur de paragraphe, alors qu'il ne devrait être que les espaces à la fin.

Malabarba
la source

Réponses:

1

Donc, un marteau inélégant d'une solution pour cela est de définir en paragraph-separatetant que variable locale de fichier. Le mode le définit "\\(?:[ \t\f]\\|.* \\)*$"comme une variable de mode local; si je le remets à sa valeur par défaut (tirée de la chaîne d'aide pour paragraph-separate) comme ceci:

-*- mode: markdown; paragraph-separate: "[  ^L]*$" -*-

alors j'obtiens le comportement que vous recherchez:

If I hit M-q right here at the start, this line will get broken into
two, but the others won't.  If I hit M-q right here only the NEXT line
will get split. All because this line here ends in two spaces.__If I
hit M-q right here, this line will get broken into two, but the others
won't.

Le commentaire dans le dépôt git qui introduit ceci dit:

Respectez les sauts de ligne lors du remplissage des paragraphes

Un inconvénient de ce correctif est que les commandes de mouvement de paragraphe s'arrêteront également aux coupures de ligne dures, modifiant ainsi légèrement la définition de "paragraphe" dans ce mode.

Après beaucoup de traçage, je pense que la fonction est effectivement invoquée par M-qdown to fill-individual-paragraphs; mais c'est compliqué, et même après avoir regardé ce commentaire, je n'ai toujours pas compris exactement ce qui se passe ... donc, marteau émoussé, et je ne sais pas quelles autres conséquences cela aura. Mais cela semble fonctionner. :-)

Saint Aardvark le Moquette
la source
Merci. Malheureusement, cela n'obtient pas le comportement que je recherche. Je remplis correctement les 2 premières lignes, mais la 3 ligne est mal remplie. Notez la légère différence entre le paragraphe que vous avez ici et le "résultat souhaité" dans la question. La troisième ligne est tirée dans le fouillis, ce qui modifie la façon dont le paragraphe est rendu par markdown. C'est indésirable. La troisième ligne doit rester une ligne à part. Je soupçonne que c'est une limitation de la logique de paragraphe de remplissage d'Emacs, et ne peut être corrigée qu'avec une fonction dédiée.
Malabarba
Arghh, ça m'a manqué! :-(
Saint Aardvark le tapis