Je veux pouvoir effacer les signatures en citation. Dans les exemples
ci-dessous, j'ai remplacé "-- " par "foo" pour pouvoir les utiliser plus
facilement par copier-coller (il n'y a aucune espace en fin de ligne).
J'ai fait mes tests avec GNU Emacs 22.0.50.1 sous Mac OS X (MacPorts)
et avec GNU Emacs 22.0.92.1 sous Linux (Debian, paquet emacs-snapshot).
J'utilise actuellement (flush-lines "^\\(> \n\\)*> foo\n\\(\n?> .*\\)*")
mais en pratique, lorsqu'il y a une signature vide après le séparateur,
cela efface une ligne blanche après la signature citée. Par exemple, sur
le fichier suivant:
--------------------
> test 1
> foo
blah
> test 2
> foo
> foobar
blah
--------------------
le test 1 correspond à une signature vide (la citation se termine juste
après le séparateur de signature "foo"). J'obtiens alors:
--------------------
> test 1
blah
> test 2
blah
--------------------
au lieu de:
--------------------
> test 1
blah
> test 2
blah
--------------------
C'est à cause du "\n" après "> foo" dans l'expression rationnelle (la
doc de flush-lines ferait croire à un bug, mais je pense qu'il s'agit
plutôt d'une imprécision de la doc). Je me suis dit alors: il n'y a
qu'à utiliser le "$". Mais
(flush-lines "^\\(> \n\\)*> foo$\\(\n> .*\\)*")
n'a aucun effet. Pourtant, le "$" fonctionne bien. Par exemple,
(flush-lines "^\\(> \n\\)*> foo$")
efface bien les deux lignes "> foo", et seulement celles-ci. Il
semble que dès qu'il y a quelque chose à matcher après le "$", ça
ne fonctionne plus. Donc
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent Lefevre
Après messages dans les listes @gnu.org:
Dans l'article <20070114224513$, Vincent Lefevre <vincent+ écrit:
J'utilise actuellement (flush-lines "^(> n)*> foon(n?> .*)*") mais en pratique, lorsqu'il y a une signature vide après le séparateur, cela efface une ligne blanche après la signature citée. Par exemple, sur le fichier suivant:
[...]
C'est à cause du "n" après "> foo" dans l'expression rationnelle (la doc de flush-lines ferait croire à un bug, mais je pense qu'il s'agit plutôt d'une imprécision de la doc).
C'est effectivement la doc qui n'est pas très bonne.
Je me suis dit alors: il n'y a qu'à utiliser le "$". Mais
(flush-lines "^(> n)*> foo$(n> .*)*")
n'a aucun effet.
C'est dans le manuel elisp (Node "Regexp Special"):
For historical compatibility reasons, `$' can be used only at the end of the regular expression, or before `)' or `|'.
(flush-lines "^(> n)*> foo((n> .*)+|$)")
semble bien fonctionner, mais pas:
(flush-lines "^(> n)*> foo($|(n> .*)+)")
En fait si. Comme le $ matche la fin de la ligne, les lignes "> ..." suivantes ne sont pas effacées. C'est donc bien
(flush-lines "^(> n)*> foo((n> .*)+|$)")
qu'il faut que j'utilise, afin que la regexp "(n> .*)+" soit essayée avant le "$".
Dans l'article <20070114224513$4fbd@prunille.vinc17.org>,
Vincent Lefevre <vincent+news@vinc17.org> écrit:
J'utilise actuellement (flush-lines "^\(> n\)*> foon\(n?> .*\)*")
mais en pratique, lorsqu'il y a une signature vide après le séparateur,
cela efface une ligne blanche après la signature citée. Par exemple, sur
le fichier suivant:
[...]
C'est à cause du "n" après "> foo" dans l'expression rationnelle (la
doc de flush-lines ferait croire à un bug, mais je pense qu'il s'agit
plutôt d'une imprécision de la doc).
C'est effectivement la doc qui n'est pas très bonne.
Je me suis dit alors: il n'y a qu'à utiliser le "$". Mais
(flush-lines "^\(> n\)*> foo$\(n> .*\)*")
n'a aucun effet.
C'est dans le manuel elisp (Node "Regexp Special"):
For historical compatibility reasons, `$' can be used only at the
end of the regular expression, or before `)' or `|'.
(flush-lines "^\(> n\)*> foo\(\(n> .*\)+\|$\)")
semble bien fonctionner, mais pas:
(flush-lines "^\(> n\)*> foo\($\|\(n> .*\)+\)")
En fait si. Comme le $ matche la fin de la ligne, les lignes "> ..."
suivantes ne sont pas effacées. C'est donc bien
(flush-lines "^\(> n\)*> foo\(\(n> .*\)+\|$\)")
qu'il faut que j'utilise, afin que la regexp "\(n> .*\)+" soit
essayée avant le "$".
Dans l'article <20070114224513$, Vincent Lefevre <vincent+ écrit:
J'utilise actuellement (flush-lines "^(> n)*> foon(n?> .*)*") mais en pratique, lorsqu'il y a une signature vide après le séparateur, cela efface une ligne blanche après la signature citée. Par exemple, sur le fichier suivant:
[...]
C'est à cause du "n" après "> foo" dans l'expression rationnelle (la doc de flush-lines ferait croire à un bug, mais je pense qu'il s'agit plutôt d'une imprécision de la doc).
C'est effectivement la doc qui n'est pas très bonne.
Je me suis dit alors: il n'y a qu'à utiliser le "$". Mais
(flush-lines "^(> n)*> foo$(n> .*)*")
n'a aucun effet.
C'est dans le manuel elisp (Node "Regexp Special"):
For historical compatibility reasons, `$' can be used only at the end of the regular expression, or before `)' or `|'.
(flush-lines "^(> n)*> foo((n> .*)+|$)")
semble bien fonctionner, mais pas:
(flush-lines "^(> n)*> foo($|(n> .*)+)")
En fait si. Comme le $ matche la fin de la ligne, les lignes "> ..." suivantes ne sont pas effacées. C'est donc bien
(flush-lines "^(> n)*> foo((n> .*)+|$)")
qu'il faut que j'utilise, afin que la regexp "(n> .*)+" soit essayée avant le "$".