Bonjour
J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction
de statistiques qui affiche ses r=E9sultats dans le minibuffer. Or
j'aimerais bien pouvoir r=E9cup=E9rer ces informations dans un fichier, et
m=EAme (encore mieux) pouvoir utiliser cette fonction en ligne de
commande pour r=E9cup=E9rer des statistiques sur un ensemble de fichiers.
Accessoirement si quelqu'un =E9tait dispos=E9 pour m'aider =E0 modifier
cette fonction pour que j'y ajoute les stats qui m'int=E9ressent ... Je
n'y connais rien en lisp.
Bonjour J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction de statistiques qui affiche ses résultats dans le minibuffer. Or j'aimerais bien pouvoir récupérer ces informations dans un fichier, et même (encore mieux) pouvoir utiliser cette fonction en ligne de commande pour récupérer des statistiques sur un ensemble de fichiers.
Accessoirement si quelqu'un était disposé pour m'aider à modifier cette fonction pour que j'y ajoute les stats qui m'intéressent ... Je n'y connais rien en lisp.
Nicolas
Je me réponds à moi-même, les infos arrivent aussi dans le tampon *Messages* donc c'est facile à récupérer. Par contre pour l'utilisation non-interactive je ne sais pas (je pourrais essayer de demander à l'auteur) Et pour la modif', je suis toujours intéressé.
Nicolas
On 21 mar, 08:38, nic_o_...@msn.com wrote:
Bonjour
J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction
de statistiques qui affiche ses résultats dans le minibuffer. Or
j'aimerais bien pouvoir récupérer ces informations dans un fichier, et
même (encore mieux) pouvoir utiliser cette fonction en ligne de
commande pour récupérer des statistiques sur un ensemble de fichiers.
Accessoirement si quelqu'un était disposé pour m'aider à modifier
cette fonction pour que j'y ajoute les stats qui m'intéressent ... Je
n'y connais rien en lisp.
Nicolas
Je me réponds à moi-même, les infos arrivent aussi dans le tampon
*Messages* donc c'est facile à récupérer. Par contre pour
l'utilisation non-interactive je ne sais pas (je pourrais essayer de
demander à l'auteur)
Et pour la modif', je suis toujours intéressé.
Bonjour J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction de statistiques qui affiche ses résultats dans le minibuffer. Or j'aimerais bien pouvoir récupérer ces informations dans un fichier, et même (encore mieux) pouvoir utiliser cette fonction en ligne de commande pour récupérer des statistiques sur un ensemble de fichiers.
Accessoirement si quelqu'un était disposé pour m'aider à modifier cette fonction pour que j'y ajoute les stats qui m'intéressent ... Je n'y connais rien en lisp.
Nicolas
Je me réponds à moi-même, les infos arrivent aussi dans le tampon *Messages* donc c'est facile à récupérer. Par contre pour l'utilisation non-interactive je ne sais pas (je pourrais essayer de demander à l'auteur) Et pour la modif', je suis toujours intéressé.
Nicolas
Matthieu Moy
writes:
Bonjour J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction de statistiques qui affiche ses résultats dans le minibuffer. Or j'aimerais bien pouvoir récupérer ces informations dans un fichier, et même (encore mieux) pouvoir utiliser cette fonction en ligne de commande pour récupérer des statistiques sur un ensemble de fichiers.
Qui en fait n'a rien de vraiment spécifique au VHDL. Le plus simple est sans doute de la recopier ailleurs (~/.emacs.el), de la renommer et de la modifier.
Mais si c'est pour utiliser depuis la ligne de commande, Emacs n'est pas à mon avis du plus pratique. Un bon vieux shell script de quelques lignes le fait tout aussi bien par exemple :
En perl, ça doit être fait en quelques lignes aussi.
-- Matthieu
nic_o_mat@msn.com writes:
Bonjour
J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction
de statistiques qui affiche ses résultats dans le minibuffer. Or
j'aimerais bien pouvoir récupérer ces informations dans un fichier, et
même (encore mieux) pouvoir utiliser cette fonction en ligne de
commande pour récupérer des statistiques sur un ensemble de fichiers.
Qui en fait n'a rien de vraiment spécifique au VHDL. Le plus simple
est sans doute de la recopier ailleurs (~/.emacs.el), de la renommer
et de la modifier.
Mais si c'est pour utiliser depuis la ligne de commande, Emacs n'est
pas à mon avis du plus pratique. Un bon vieux shell script de quelques
lignes le fait tout aussi bien par exemple :
Bonjour J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction de statistiques qui affiche ses résultats dans le minibuffer. Or j'aimerais bien pouvoir récupérer ces informations dans un fichier, et même (encore mieux) pouvoir utiliser cette fonction en ligne de commande pour récupérer des statistiques sur un ensemble de fichiers.
Qui en fait n'a rien de vraiment spécifique au VHDL. Le plus simple est sans doute de la recopier ailleurs (~/.emacs.el), de la renommer et de la modifier.
Mais si c'est pour utiliser depuis la ligne de commande, Emacs n'est pas à mon avis du plus pratique. Un bon vieux shell script de quelques lignes le fait tout aussi bien par exemple :
En perl, ça doit être fait en quelques lignes aussi.
-- Matthieu
nic_o_mat
On 21 mar, 10:21, Matthieu Moy wrote:
writes: > Bonjour > J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction > de statistiques qui affiche ses résultats dans le minibuffer. Or > j'aimerais bien pouvoir récupérer ces informations dans un fichier, et > même (encore mieux) pouvoir utiliser cette fonction en ligne de > commande pour récupérer des statistiques sur un ensemble de fichier s.
La fonction en question est :
(defun vhdl-statistics-buffer ()
[...]
Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bricoler dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et je la traite comme ça : ;; count empty lines (goto-char (point-min)) (while (re-search-forward "^( |t)*$" nil t) (if (match-string 1) (goto-char (match-end 1)) (setq no-empty-lines (1+ no-empty-lines)))))
Je ne saisis pas la raison pour laquelle on doit doubler certains dans l'expression régulière. Si je ne les double pas, ça ne détecte pas les lignes vides, si j'exécute le code ci-dessus emacs se bloque (C-g C-g permet de sortir, ouf)
Mais si c'est pour utiliser depuis la ligne de commande, Emacs n'est pas à mon avis du plus pratique. Un bon vieux shell script de quelques lignes le fait tout aussi bien par exemple :
Je suis sous Windows (j'espère que ça n'est pas un trop gros mot ? ;o)
En perl, ça doit être fait en quelques lignes aussi.
Et je n'y connais rien en Perl non plus.
Nicolas
On 21 mar, 10:21, Matthieu Moy <MatthieuNOSPAM....@imag.fr.invalid>
wrote:
nic_o_...@msn.com writes:
> Bonjour
> J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction
> de statistiques qui affiche ses résultats dans le minibuffer. Or
> j'aimerais bien pouvoir récupérer ces informations dans un fichier, et
> même (encore mieux) pouvoir utiliser cette fonction en ligne de
> commande pour récupérer des statistiques sur un ensemble de fichier s.
La fonction en question est :
(defun vhdl-statistics-buffer ()
[...]
Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bricoler
dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et
je la traite comme ça :
;; count empty lines
(goto-char (point-min))
(while (re-search-forward "^\( \|t\)*$" nil t)
(if (match-string 1)
(goto-char (match-end 1))
(setq no-empty-lines (1+ no-empty-lines)))))
Je ne saisis pas la raison pour laquelle on doit doubler certains
dans l'expression régulière. Si je ne les double pas, ça ne détecte
pas les lignes vides, si j'exécute le code ci-dessus emacs se bloque
(C-g C-g permet de sortir, ouf)
Mais si c'est pour utiliser depuis la ligne de commande, Emacs n'est
pas à mon avis du plus pratique. Un bon vieux shell script de quelques
lignes le fait tout aussi bien par exemple :
Je suis sous Windows (j'espère que ça n'est pas un trop gros mot ? ;o)
En perl, ça doit être fait en quelques lignes aussi.
writes: > Bonjour > J'utilise emacs pour coder en VHDL. Le mode VHDL comporte une fonction > de statistiques qui affiche ses résultats dans le minibuffer. Or > j'aimerais bien pouvoir récupérer ces informations dans un fichier, et > même (encore mieux) pouvoir utiliser cette fonction en ligne de > commande pour récupérer des statistiques sur un ensemble de fichier s.
La fonction en question est :
(defun vhdl-statistics-buffer ()
[...]
Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bricoler dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et je la traite comme ça : ;; count empty lines (goto-char (point-min)) (while (re-search-forward "^( |t)*$" nil t) (if (match-string 1) (goto-char (match-end 1)) (setq no-empty-lines (1+ no-empty-lines)))))
Je ne saisis pas la raison pour laquelle on doit doubler certains dans l'expression régulière. Si je ne les double pas, ça ne détecte pas les lignes vides, si j'exécute le code ci-dessus emacs se bloque (C-g C-g permet de sortir, ouf)
Mais si c'est pour utiliser depuis la ligne de commande, Emacs n'est pas à mon avis du plus pratique. Un bon vieux shell script de quelques lignes le fait tout aussi bien par exemple :
Je suis sous Windows (j'espère que ça n'est pas un trop gros mot ? ;o)
En perl, ça doit être fait en quelques lignes aussi.
Et je n'y connais rien en Perl non plus.
Nicolas
Matthieu Moy
writes:
Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bricoler dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et je la traite comme ça : ;; count empty lines (goto-char (point-min)) (while (re-search-forward "^( |t)*$" nil t)
=> cherche la prochaine ligne vide, et se positionne à la fin de celle-ci.
A priori, il suffit d'incrémenter no-empty-lines, et de faire un (forward-char) ou (forward-line) pour aller au début de ligne suivante.
Je ne saisis pas la raison pour laquelle on doit doubler certains dans l'expression régulière.
Pour l'expression régulière, « ( » est le caractère '(', et « ( » veut dire « début de bloc » (ce que tu veux ici). Mais on est dans une chaine (entre des « " »), donc si on écrit « "(" », Emacs va interpreter le backslash comme un échappement pour la chaine, et l'expression régulière sera en fait « ( ». Si on écrit « "(" », alors le premier échappe le second du point de vue de la chaine, et l'expression régulière est bien « ( ».
-- Matthieu
nic_o_mat@msn.com writes:
Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bricoler
dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et
je la traite comme ça :
;; count empty lines
(goto-char (point-min))
(while (re-search-forward "^\( \|t\)*$" nil t)
=> cherche la prochaine ligne vide, et se positionne à la fin de
celle-ci.
A priori, il suffit d'incrémenter no-empty-lines, et de faire un
(forward-char) ou (forward-line) pour aller au début de ligne
suivante.
Je ne saisis pas la raison pour laquelle on doit doubler certains
dans l'expression régulière.
Pour l'expression régulière, « ( » est le caractère '(', et « ( »
veut dire « début de bloc » (ce que tu veux ici). Mais on est dans une
chaine (entre des « " »), donc si on écrit « "(" », Emacs va
interpreter le backslash comme un échappement pour la chaine, et
l'expression régulière sera en fait « ( ». Si on écrit « "\(" »,
alors le premier échappe le second du point de vue de la chaine, et
l'expression régulière est bien « ( ».
Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bricoler dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et je la traite comme ça : ;; count empty lines (goto-char (point-min)) (while (re-search-forward "^( |t)*$" nil t)
=> cherche la prochaine ligne vide, et se positionne à la fin de celle-ci.
A priori, il suffit d'incrémenter no-empty-lines, et de faire un (forward-char) ou (forward-line) pour aller au début de ligne suivante.
Je ne saisis pas la raison pour laquelle on doit doubler certains dans l'expression régulière.
Pour l'expression régulière, « ( » est le caractère '(', et « ( » veut dire « début de bloc » (ce que tu veux ici). Mais on est dans une chaine (entre des « " »), donc si on écrit « "(" », Emacs va interpreter le backslash comme un échappement pour la chaine, et l'expression régulière sera en fait « ( ». Si on écrit « "(" », alors le premier échappe le second du point de vue de la chaine, et l'expression régulière est bien « ( ».
-- Matthieu
nic_o_mat
On 21 mar, 10:51, Matthieu Moy wrote:
writes: > Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bri coler > dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et > je la traite comme ça : > ;; count empty lines > (goto-char (point-min)) > (while (re-search-forward "^( |t)*$" nil t)
=> cherche la prochaine ligne vide, et se positionne à la fin de celle-ci.
J'ai recopié la partie "comptage d'instructions" de la fonction d'origine, j'ai juste modifié l'expression régulière et la variable concernée.
> Je ne saisis pas la raison pour laquelle on doit doubler certains > dans l'expression régulière. Pour l'expression régulière, « ( » est le caractère '(', et « ( » veut dire « début de bloc » (ce que tu veux ici).
Oui oui, jusque là je sais (ça fait pas longtemps que j'ai découvert les expressions régulières mais j'ai compris 2-3 trucs ;o)
Mais on est dans une chaine (entre des « " »), donc si on écrit « "(" », Emacs va interpreter le backslash comme un échappement pour la chaine, et l'expression régulière sera en fait « ( ». Si on écrit « "( " », alors le premier échappe le second du point de vue de la chaine, et l'expression régulière est bien « ( ».
Ah d'accord, merci bien. Je devrais donc les doubler partout (donc devant le t aussi) Du coup je ne comprends plus très bien la forme de l'expression dans le comptage des instructions VHDL mais à la limite c'est pas très grave.
Nicolas
On 21 mar, 10:51, Matthieu Moy <MatthieuNOSPAM....@imag.fr.invalid>
wrote:
nic_o_...@msn.com writes:
> Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bri coler
> dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et
> je la traite comme ça :
> ;; count empty lines
> (goto-char (point-min))
> (while (re-search-forward "^\( \|t\)*$" nil t)
=> cherche la prochaine ligne vide, et se positionne à la fin de
celle-ci.
J'ai recopié la partie "comptage d'instructions" de la fonction
d'origine, j'ai juste modifié l'expression régulière et la variable
concernée.
> Je ne saisis pas la raison pour laquelle on doit doubler certains
> dans l'expression régulière.
Pour l'expression régulière, « ( » est le caractère '(', et « ( »
veut dire « début de bloc » (ce que tu veux ici).
Oui oui, jusque là je sais (ça fait pas longtemps que j'ai découvert
les expressions régulières mais j'ai compris 2-3 trucs ;o)
Mais on est dans une
chaine (entre des « " »), donc si on écrit « "(" », Emacs va
interpreter le backslash comme un échappement pour la chaine, et
l'expression régulière sera en fait « ( ». Si on écrit « "\( " »,
alors le premier échappe le second du point de vue de la chaine, et
l'expression régulière est bien « ( ».
Ah d'accord, merci bien. Je devrais donc les doubler partout (donc
devant le t aussi)
Du coup je ne comprends plus très bien la forme de l'expression dans
le comptage des instructions VHDL mais à la limite c'est pas très
grave.
writes: > Oui, je l'ai trouvée aussi. J'ai même commencé à essayer de bri coler > dedans mais ça marche pas. J'ai rajouté une variable no-empty-lines et > je la traite comme ça : > ;; count empty lines > (goto-char (point-min)) > (while (re-search-forward "^( |t)*$" nil t)
=> cherche la prochaine ligne vide, et se positionne à la fin de celle-ci.
J'ai recopié la partie "comptage d'instructions" de la fonction d'origine, j'ai juste modifié l'expression régulière et la variable concernée.
> Je ne saisis pas la raison pour laquelle on doit doubler certains > dans l'expression régulière. Pour l'expression régulière, « ( » est le caractère '(', et « ( » veut dire « début de bloc » (ce que tu veux ici).
Oui oui, jusque là je sais (ça fait pas longtemps que j'ai découvert les expressions régulières mais j'ai compris 2-3 trucs ;o)
Mais on est dans une chaine (entre des « " »), donc si on écrit « "(" », Emacs va interpreter le backslash comme un échappement pour la chaine, et l'expression régulière sera en fait « ( ». Si on écrit « "( " », alors le premier échappe le second du point de vue de la chaine, et l'expression régulière est bien « ( ».
Ah d'accord, merci bien. Je devrais donc les doubler partout (donc devant le t aussi) Du coup je ne comprends plus très bien la forme de l'expression dans le comptage des instructions VHDL mais à la limite c'est pas très grave.
Nicolas
Matthieu Moy
writes:
Ah d'accord, merci bien. Je devrais donc les doubler partout (donc devant le t aussi)
Et non ! "t" en temps que chaine, c'est l'expression régulière « tabulation », qui matche les tabulations.
-- Matthieu
nic_o_mat@msn.com writes:
Ah d'accord, merci bien. Je devrais donc les doubler partout (donc
devant le t aussi)
Et non ! "t" en temps que chaine, c'est l'expression régulière
« tabulation », qui matche les tabulations.
Ah d'accord, merci bien. Je devrais donc les doubler partout (donc devant le t aussi)
Et non ! "t" en temps que chaine, c'est l'expression régulière « tabulation », qui matche les tabulations.
-- Matthieu
nic_o_mat
On 21 mar, 11:06, Matthieu Moy wrote:
writes: > Ah d'accord, merci bien. Je devrais donc les doubler partout (donc > devant le t aussi)
Et non ! "t" en temps que chaine, c'est l'expression régulière « tabulation », qui matche les tabulations.
Argh! J'ai un peu mal à la tête, là ... Bon, j'admets. Tu avais raison, il fallait ajouter un (forward-char) ou (forward- line), c'est ça qui bloquait. Mais je rencontre un problème avec la dernière ligne (vide) d'un fichier puisqu'il n'est alors plus possible d'avancer. Comment peut-on détecter qu'on est sur la dernière ligne ? (je sens que c'est trivial mais je débute, excusez-moi)
Nicolas
On 21 mar, 11:06, Matthieu Moy <MatthieuNOSPAM....@imag.fr.invalid>
wrote:
nic_o_...@msn.com writes:
> Ah d'accord, merci bien. Je devrais donc les doubler partout (donc
> devant le t aussi)
Et non ! "t" en temps que chaine, c'est l'expression régulière
« tabulation », qui matche les tabulations.
Argh! J'ai un peu mal à la tête, là ... Bon, j'admets.
Tu avais raison, il fallait ajouter un (forward-char) ou (forward-
line), c'est ça qui bloquait. Mais je rencontre un problème avec la
dernière ligne (vide) d'un fichier puisqu'il n'est alors plus possible
d'avancer. Comment peut-on détecter qu'on est sur la dernière ligne ?
(je sens que c'est trivial mais je débute, excusez-moi)
writes: > Ah d'accord, merci bien. Je devrais donc les doubler partout (donc > devant le t aussi)
Et non ! "t" en temps que chaine, c'est l'expression régulière « tabulation », qui matche les tabulations.
Argh! J'ai un peu mal à la tête, là ... Bon, j'admets. Tu avais raison, il fallait ajouter un (forward-char) ou (forward- line), c'est ça qui bloquait. Mais je rencontre un problème avec la dernière ligne (vide) d'un fichier puisqu'il n'est alors plus possible d'avancer. Comment peut-on détecter qu'on est sur la dernière ligne ? (je sens que c'est trivial mais je débute, excusez-moi)
Nicolas
Matthieu Moy
writes:
Comment peut-on détecter qu'on est sur la dernière ligne ?
(eq (point) (point-max))
(looking-at "'")
...
-- Matthieu
nic_o_mat@msn.com writes:
Comment peut-on détecter qu'on est sur la dernière ligne ?
Comment peut-on détecter qu'on est sur la dernière ligne ?
(eq (point) (point-max))
(looking-at "'")
...
-- Matthieu
nic_o_mat
On 21 mar, 11:35, Matthieu Moy wrote:
writes: > Comment peut-on détecter qu'on est sur la dernière ligne ?
(eq (point) (point-max))
(looking-at "'")
Excuse-moi de faire le boulet (je débute, hein. Oui, je me répète aussi) mais je sais pas trop comment utiliser tout ça. Je récapitule mon problème : (goto-char (point-min)) (while (re-search-forward "^(s|t)*$" nil t) (if (match-string 1) (goto-char (match-end 1)) (setq no-empty-lines (1+ no-empty-lines)) (forward-char))) Ceci a l'air de marcher sauf que (forward-char) renvoie une erreur quand il arrive à la fin du fichier. Il faut donc qu'il soit conditionnel. Ca doit donner à peu près ça, non : (unless (eq (point) (point-max)) (forward-char))
Nicolas
On 21 mar, 11:35, Matthieu Moy <MatthieuNOSPAM....@imag.fr.invalid>
wrote:
nic_o_...@msn.com writes:
> Comment peut-on détecter qu'on est sur la dernière ligne ?
(eq (point) (point-max))
(looking-at "\'")
Excuse-moi de faire le boulet (je débute, hein. Oui, je me répète
aussi) mais je sais pas trop comment utiliser tout ça.
Je récapitule mon problème :
(goto-char (point-min))
(while (re-search-forward "^\(s|t\)*$" nil t)
(if (match-string 1)
(goto-char (match-end 1))
(setq no-empty-lines (1+ no-empty-lines))
(forward-char)))
Ceci a l'air de marcher sauf que (forward-char) renvoie une erreur
quand il arrive à la fin du fichier. Il faut donc qu'il soit
conditionnel.
Ca doit donner à peu près ça, non :
(unless (eq (point) (point-max))
(forward-char))
writes: > Comment peut-on détecter qu'on est sur la dernière ligne ?
(eq (point) (point-max))
(looking-at "'")
Excuse-moi de faire le boulet (je débute, hein. Oui, je me répète aussi) mais je sais pas trop comment utiliser tout ça. Je récapitule mon problème : (goto-char (point-min)) (while (re-search-forward "^(s|t)*$" nil t) (if (match-string 1) (goto-char (match-end 1)) (setq no-empty-lines (1+ no-empty-lines)) (forward-char))) Ceci a l'air de marcher sauf que (forward-char) renvoie une erreur quand il arrive à la fin du fichier. Il faut donc qu'il soit conditionnel. Ca doit donner à peu près ça, non : (unless (eq (point) (point-max)) (forward-char))