Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment-start et comment-end dans css-mode

11 réponses
Avatar
jj.retorre
Bonjour,

J'utilise depuis peu le css-mode (dont j'ai appris l'existence ici).
Je suis surpris du caractère comment-start "/\\*" et comment-end "\\*/"
Je trouve que ça ne facilite pas la lecture des commentaires.
J'aurais envie de les remettre à mon goût, mais c'est en dur dans
css-mode.el.
Il doit bien y avoir une raison pour laquelle la barre oblique inverse
a été ajoutée, la connaissez vous ? L'idée étant que si cette raison
est sans objet pour mon usage, je pourrai la virer.

Merci.

--
JJR.

10 réponses

1 2
Avatar
Xavier Maillard
(JJ. Rétorré) writes:

Bonjour,

J'utilise depuis peu le css-mode (dont j'ai appris l'existence ici).
Je suis surpris du caractère comment-start "/*" et comment-end "*/"
Je trouve que ça ne facilite pas la lecture des commentaires.
J'aurais envie de les remettre à mon goût, mais c'est en dur dans
css-mode.el.
Il doit bien y avoir une raison pour laquelle la barre oblique inverse
a été ajoutée, la connaissez vous ? L'idée étant que si cette raison
est sans objet pour mon usage, je pourrai la virer.



C'est surement pour "proteger" le '*'.
Avatar
Sébastien Kirche
Le 15 décembre 2008 à 14:53, JJ. Rétorré s'est exprimé ainsi :


Bonjour,

J'utilise depuis peu le css-mode (dont j'ai appris l'existence ici).
Je suis surpris du caractère comment-start "/*" et comment-end
"*/" Je trouve que ça ne facilite pas la lecture des commentaires.
J'aurais envie de les remettre à mon goût, mais c'est en dur dans
css-mode.el. Il doit bien y avoir une raison pour laquelle la barre
oblique inverse a été ajoutée, la connaissez vous ? L'idée étant que
si cette raison est sans objet pour mon usage, je pourrai la virer.



Si comment-start et comment-end sont des patterns de regexps (pas
vérifié, mais ça semble probable) le caractère * a une signification
spéciale indiquant que le caractère précédent peut être présent ou non
dans la chaîne cherchée.

Ainsi avec simplement "/*" on indique zéro, un ou plusieurs "/"
successifs.

Pour utiliser "*" comme un simple caractère, il faut « l'échapper » avec
un "" mais comme ce caractère a lui aussi une signification
particulière (pour désigner des classes de caractères comme d) il faut
l'échapper à son tour. Voilà comment on part de "/*" et qu'on arrive à
"/*" dans une chaîne représentant une regexp dans du code.

Merci.



J'espère avoir réussi à formuler clairement, il commence à se faire tard
:)
--
Sébastien Kirche
Avatar
jj.retorre
Xavier Maillard disait le 12/15/08 que :

(JJ. Rétorré) writes:

Bonjour,

J'utilise depuis peu le css-mode (dont j'ai appris l'existence ici).
Je suis surpris du caractère comment-start "/*" et comment-end " */"
Je trouve que ça ne facilite pas la lecture des commentaires.
J'aurais envie de les remettre à mon goût, mais c'est en dur d ans
css-mode.el.
Il doit bien y avoir une raison pour laquelle la barre oblique inverse
a été ajoutée, la connaissez vous ? L'idée étan t que si cette raison
est sans objet pour mon usage, je pourrai la virer.



C'est surement pour "proteger" le '*'.




Oui, mais pourquoi le protéger ? Je n'ai jamais vu faire ça dans les
fichiers css.


--
JJR.
Avatar
Paul Gaborit
À (at) Tue, 16 Dec 2008 09:13:16 +0100,
(JJ. Rétorré) écrivait (wrote):
Xavier Maillard disait le 12/15/08 que :

C'est surement pour "proteger" le '*'.




Oui, mais pourquoi le protéger ? Je n'ai jamais vu faire ça dans les
fichiers css.



Parce que la chaîne vue dans le code du mode css est utilisée en tant
qu'expression rationnelle (ou régulière pour les anglophones) où le
caractère '*' à un sens spécial sauf si il est préfixé par un
caractère ''. Mais en Lisp, dans une chaîne, le caractère '' à un
sens spécial sauf s'il est préfixé par le caractère ''.

Donc pour reconnaître la suite de caractères '/*' via une expression
rationnelle écrite dans une chaîne en Lisp, il faut écrire "/*".

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Avatar
Jacques L'helgoualc'h
Le 15-12-2008, Sébastien Kirche a écrit :
[...]
Pour utiliser "*" comme un simple caractère, il faut « l'échapper » avec
un "" mais comme ce caractère a lui aussi une signification
particulière (pour désigner des classes de caractères comme d) il faut
l'échapper à son tour. Voilà comment on part de "/*" et qu'on arrive à
"/*" dans une chaîne représentant une regexp dans du code.



Pas tout à fait : le backslash doit être doublé dans les "chaînes" elisp
(où il peut être utilisé pour coder des caractères de contrôle comme r,
n, etc.) ; une fois la chaîne « "*" » traduite en regexp « * », le
survivant inhibe l'interprétation de l'astérisque comme méta-caractère.

Si on cherche une occurrence de la regexp (reconnaissant le caractère
«  ») dans un fichier elisp, il faudra chercher \ (entre doubles
quotes), et donc utiliser "\\" (taper "C-u 8 " :)...
--
Jacques L'helgoualc'h
Avatar
jj.retorre
Jacques L'helgoualc'h <"lhh+news,no_spam"@free.fr.isnt.invalid> disait le 12/16/08 que :

Le 15-12-2008, Sébastien Kirche a écrit :
[...]
Pour utiliser "*" comme un simple caractère, il faut « l'échapper » avec
un "" mais comme ce caractère a lui aussi une signification
particulière (pour désigner des classes de caractères comme d) il faut
l'échapper à son tour. Voilà comment on part de "/*" et qu'on arrive à
"/*" dans une chaîne représentant une regexp dans du code.



Pas tout à fait : le backslash doit être doublé dans les "chaînes" elisp
(où il peut être utilisé pour coder des caractères de contrôle comme r,
n, etc.) ; une fois la chaîne « "*" » traduite en regexp « * », le
survivant inhibe l'interprétation de l'astérisque comme méta-caractère.

Si on cherche une occurrence de la regexp (reconnaissant le caractère
«  ») dans un fichier elisp, il faudra chercher \ (entre doubles
quotes), et donc utiliser "\\" (taper "C-u 8 " :)...




J'imaginais bien qu'il s'agissait d'une raison comme ça, mais quand
est en c-mode comment-start et comment-end sont "/*" et "*/" sans que
cela semble poser de problème particulier.

--
JJR.
Avatar
Jacques L'helgoualc'h
Le 16-12-2008, JJ. Rétorré a écrit :
Jacques L'helgoualc'h disait le 12/16/08 que :

Le 15-12-2008, Sébastien Kirche a écrit :
[...]
Pour utiliser "*" comme un simple caractère, il faut « l'échapper » avec
un "" mais comme ce caractère a lui aussi une signification
particulière (pour désigner des classes de caractères comme d) il faut
l'échapper à son tour. Voilà comment on part de "/*" et qu'on arrive à
"/*" dans une chaîne représentant une regexp dans du code.



Pas tout à fait : le backslash doit être doublé dans les "chaînes" elisp
(où il peut être utilisé pour coder des caractères de contrôle comme r,
n, etc.) ; une fois la chaîne « "*" » traduite en regexp « * », le
survivant inhibe l'interprétation de l'astérisque comme méta-caractère.

Si on cherche une occurrence de la regexp (reconnaissant le caractère
«  ») dans un fichier elisp, il faudra chercher \ (entre doubles
quotes), et donc utiliser "\\" (taper "C-u 8 " :)...



J'imaginais bien qu'il s'agissait d'une raison comme ça, mais quand
est en c-mode comment-start et comment-end sont "/*" et "*/" sans que
cela semble poser de problème particulier.



Dans le texte cherché --- mais la regexp pour trouver « /* »,
c'est (on peut aussi utiliser [*]) « /* » et donc "/*" en elisp
(ou //*/ pour Sed & Awk).

Le cas de « */ » est un poil plus tordu, l'astérisque en première
position peut perdre son statut de méta-caractère --- essaie dans
un buffer Emacs avec « C-u C-s regexp », où tu n'as plus le
dédoublement du backslash dans les doubles quotes, mais toujours
celui du non-méta-caractère (ou []).
--
Jacques L'helgoualc'h
Avatar
Jean-Marc Bourguet
Jacques L'helgoualc'h <"lhh+news,no_spam"@free.fr.isnt.invalid> writes:

Le 16-12-2008, JJ. Rétorré a écrit :
> Jacques L'helgoualc'h disait le 12/16/08 que :
>
>> Le 15-12-2008, Sébastien Kirche a écrit :
>> [...]
>>> Pour utiliser "*" comme un simple caractère, il faut « l'échapper » avec
>>> un "" mais comme ce caractère a lui aussi une signification
>>> particulière (pour désigner des classes de caractères comme d) il faut
>>> l'échapper à son tour. Voilà comment on part de "/*" et qu'on arrive à
>>> "/*" dans une chaîne représentant une regexp dans du code.
>>
>> Pas tout à fait : le backslash doit être doublé dans les "chaînes" elisp
>> (où il peut être utilisé pour coder des caractères de contrôle comme r,
>> n, etc.) ; une fois la chaîne « "*" » traduite en regexp « * », le
>> survivant inhibe l'interprétation de l'astérisque comme méta-caractère.
>>
>> Si on cherche une occurrence de la regexp (reconnaissant le caractère
>> «  ») dans un fichier elisp, il faudra chercher \ (entre doubles
>> quotes), et donc utiliser "\\" (taper "C-u 8 " :)...
>
> J'imaginais bien qu'il s'agissait d'une raison comme ça, mais quand
> est en c-mode comment-start et comment-end sont "/*" et "*/" sans que
> cela semble poser de problème particulier.

Dans le texte cherché --- mais la regexp pour trouver « /* »,
c'est (on peut aussi utiliser [*]) « /* » et donc "/*" en elisp
(ou //*/ pour Sed & Awk).

Le cas de « */ » est un poil plus tordu, l'astérisque en première
position peut perdre son statut de méta-caractère --- essaie dans
un buffer Emacs avec « C-u C-s regexp », où tu n'as plus le
dédoublement du backslash dans les doubles quotes, mais toujours
celui du non-méta-caractère (ou []).



comment-start n'est pas une regexp mais une chaine qui est inseree par
certaines commandes (et peut-etre recherchee par d'autres, il me semble me
souvenir que ca sert pour la colorisation syntaxique), mais sa
documentation est "String to insert to start a new comment, or nil if no
comment syntax.").

Je n'excluerais pas de la confusion de la part de l'auteur du mode dont il
est question.

A+
--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Avatar
Paul Gaborit
À (at) 16 Dec 2008 12:52:17 +0100,
Jean-Marc Bourguet écrivait (wrote):
comment-start n'est pas une regexp mais une chaine qui est inseree par
certaines commandes (et peut-etre recherchee par d'autres, il me semble me
souvenir que ca sert pour la colorisation syntaxique), mais sa
documentation est "String to insert to start a new comment, or nil if no
comment syntax.").

Je n'excluerais pas de la confusion de la part de l'auteur du mode dont il
est question.



Il suffit de lire le code de css-mode pour se rendre compte que
l'auteur ne "confusionne" rien du tout ! Et sans même lire le code, il
suffit de constater que le mode fonctionne... ;-)

Quelques extraits :

[...]
; Find out where to indent to by looking at previous lines
; spinning backwards over comments
(let (pos)
(while (and (setq pos (re-search-backward (cssm-list-2-regexp
'("/*" "*/" "{" "}"))
(point-min) t))
(string= (match-string 0) "*/"))
(search-backward "/*" (point-min) t))
[...]
(setq comment-start "/* "
comment-end " */"
comment-start-skip "/*[ nt]+")
[...]


--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Avatar
Sébastien Kirche
Le 16 décembre 2008 à 12:44, Jacques L'helgoualc'h s'est exprimé ainsi :

Dans le texte cherché --- mais la regexp pour trouver « /* »,
c'est (on peut aussi utiliser [*]) « /* » et donc "/*" en elisp
(ou //*/ pour Sed & Awk).

Le cas de « */ » est un poil plus tordu, l'astérisque en première
position peut perdre son statut de méta-caractère --- essaie dans
un buffer Emacs avec « C-u C-s regexp », où tu n'as plus le
dédoublement du backslash dans les doubles quotes, mais toujours
celui du non-méta-caractère (ou []).



Tant qu'on parle de regexp, on peut mentionner M-x re-builder qui est
une aide bien précieuse pour la mise au point des motifs de recherche.

En plus re-builder peut traduire de la version "directe" comme pour
M-S-s à la version "chaîne dans du code" en choisissant la syntaxe (Voir
C-c TAB dans re-builder).

J'aurais du mal à m'en passer.
--
Sébastien Kirche
1 2