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

Récupérer les infos affichées dans le minibuffer

11 réponses
Avatar
nic_o_mat
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.

Nicolas

1 réponse

1 2
Avatar
nic_o_mat
On 21 mar, 11:51, Matthieu Moy
wrote:
writes:
> (unless (eq (point) (point-max))
> (forward-char))

Ça devrait, oui. Yapuka essayer !



Ca recoince. C'est logique : il se met maintenant à boucler sur la
dernière ligne. Il faut donc rajouter le test de fin de fichier dans
la condition de boucle ...
Et là ça marche !
Merci mille fois pour mes premiers pas en elisp.

Nicolas

le code final :

(defun vhdl-statistics-buffer ()
"Get some file statistics."
(interactive)
(let ((no-stats 0)
(no-code-lines 0)
(no-empty-lines 0)
(no-lines (count-lines (point-min) (point-max))))
(save-excursion
;; count statements
(goto-char (point-min))
(while (re-search-forward "(--.*n|"[^"n]*["n])|;"
nil t)
(if (match-string 1)
(goto-char (match-end 1))
(setq no-stats (1+ no-stats))))
;; count code lines
(goto-char (point-min))
(while (not (eobp))
(unless (looking-at "^s-*(--.*)?$")
(setq no-code-lines (1+ no-code-lines)))
(beginning-of-line 2))
;; count empty lines
(goto-char (point-min))
(while (and (re-search-forward "^( |t)*$" nil t)
(not (eq (point) (point-max))))
(if (match-string 1)
(goto-char (match-end 1))
(setq no-empty-lines (1+ no-empty-lines))
(unless (eq (point) (point-max))
(forward-char)))))
;; print results
(message "n
File statistics: "%s"n
---------------------n
# statements : %5dn
# code lines : %5dn
# empty lines : %5dn
# total lines : %5dn "
(buffer-file-name) no-stats no-code-lines no-empty-lines no-
lines)
(unless vhdl-emacs-21 (vhdl-show-messages))))
1 2