GNT sans publicité, site mobile, fonctionnalitées exclusives...

gnus-group-number-of-unread-mail

Le
Ph. Idlavi
Bonjour,

J'ai pompé la fonction gnus-group-number-of-unread-mail à l'adresse :
http://www-verimag.imag.fr/~moy/emacs/.gnus.el

8<8<8<8<8<8<8<8<8<
(defun gnus-group-number-of-unread-mail (level)
"*Returns the number of unread mails in groups of subscription level LEVEL and below."
(let ((num-of-unread 0)
(newsrc (cdr gnus-newsrc-alist))
info clevel)
(while newsrc
(setq info (car newsrc)
clevel (gnus-info-level info))
(when (<= clevel level)
(setq num-of-unread
(+ num-of-unread (car (gnus-gethash (gnus-info-group info) gnus-newsrc-hashtb)))))
(setq newsrc (cdr newsrc)))
num-of-unread))
8<8<8<8<8<8<8<8<8<

mais Alt-: (gnus-group-number-of-unread-mail 2) dans le buffer Group
donne le Backtrace suivant :

8<8<8<8<8<8<8<8<8<
Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p t)
+(1 t)
(setq num-of-unread (+ num-of-unread (car )))
(progn (setq num-of-unread (+ num-of-unread )))
(if (<= clevel level) (progn (setq num-of-unread )))
(when (<= clevel level) (setq num-of-unread (+ num-of-unread )))
(while newsrc (setq info (car newsrc) clevel (gnus-info-level info)) (when (<= clevel level) (setq num-of-unread )) (setq newsrc (cdr newsrc)))
(let ((num-of-unread 0) (newsrc )) (while newsrc (setq info clevel ) (when ) (setq newsrc )) num-of-unread)
gnus-group-number-of-unread-mail(2)
eval((gnus-group-number-of-unread-mail 2))
eval-expression((gnus-group-number-of-unread-mail 2) nil)
call-interactively(eval-expression)
recursive-edit()
byte-code("Æ!ˆÇ ˆÈ !ˆƒ?Éed\" Vƒ4ebˆÊ ¥yˆ`dbˆÊ ¥ Zyˆ\f`|ˆ)ËcˆebˆÌÍ !ˆÎ ˆ @Ï=ƒKÐÑÒ\"ˆÓ ˆÌÔ!ˆÒÕÒÌÔ!ˆŠÖ ˆ,Շ" [debugger-buffer debugger-args noninteractive debugger-batch-max-lines middlestart buffer-read-only pop-to-buffer debugger-mode debugger-setup-buffer count-lines 2 "" message buffer-string kill-emacs debug backtrace-debug 3 t debugger-reenable "" nil recursive-edit standard-output inhibit-trace] 3)
debug(error (wrong-type-argument number-or-marker-p t))
+(0 t)
(setq num-of-unread (+ num-of-unread (car )))
(progn (setq num-of-unread (+ num-of-unread )))
(if (<= clevel level) (progn (setq num-of-unread )))
(when (<= clevel level) (setq num-of-unread (+ num-of-unread )))
(while newsrc (setq info (car newsrc) clevel (gnus-info-level info)) (when (<= clevel level) (setq num-of-unread )) (setq newsrc (cdr newsrc)))
(let ((num-of-unread 0) (newsrc )) (while newsrc (setq info clevel ) (when ) (setq newsrc )) num-of-unread)
gnus-group-number-of-unread-mail(2)
eval((gnus-group-number-of-unread-mail 2))
eval-expression((gnus-group-number-of-unread-mail 2) nil)
call-interactively(eval-expression)
recursive-edit()
byte-code("Æ!ˆÇ ˆÈ !ˆƒ?Éed\" Vƒ4ebˆÊ ¥yˆ`dbˆÊ ¥ Zyˆ\f`|ˆ)ËcˆebˆÌÍ !ˆÎ ˆ @Ï=ƒKÐÑÒ\"ˆÓ ˆÌÔ!ˆÒÕÒÌÔ!ˆŠÖ ˆ,Շ" [debugger-buffer debugger-args noninteractive debugger-batch-max-lines middlestart buffer-read-only pop-to-buffer debugger-mode debugger-setup-buffer count-lines 2 "" message buffer-string kill-emacs debug backtrace-debug 3 t debugger-reenable "" nil recursive-edit standard-output inhibit-trace] 3)
debug(error (wrong-type-argument number-or-marker-p t))
+(0 t)
(setq num-of-unread (+ num-of-unread (car )))
(progn (setq num-of-unread (+ num-of-unread )))
(if (<= clevel level) (progn (setq num-of-unread )))
(when (<= clevel level) (setq num-of-unread (+ num-of-unread )))
(while newsrc (setq info (car newsrc) clevel (gnus-info-level info)) (when (<= clevel level) (setq num-of-unread )) (setq newsrc (cdr newsrc)))
(let ((num-of-unread 0) (newsrc )) (while newsrc (setq info clevel ) (when ) (setq newsrc )) num-of-unread)
gnus-group-number-of-unread-mail(2)
eval((gnus-group-number-of-unread-mail 2))
eval-expression((gnus-group-number-of-unread-mail 2) nil)
call-interactively(eval-expression)
recursive-edit()
byte-code("Æ!ˆÇ ˆÈ !ˆƒ?Éed\" Vƒ4ebˆÊ ¥yˆ`dbˆÊ ¥ Zyˆ\f`|ˆ)ËcˆebˆÌÍ !ˆÎ ˆ @Ï=ƒKÐÑÒ\"ˆÓ ˆÌÔ!ˆÒÕÒÌÔ!ˆŠÖ ˆ,Շ" [debugger-buffer debugger-args noninteractive debugger-batch-max-lines middlestart buffer-read-only pop-to-buffer debugger-mode debugger-setup-buffer count-lines 2 "" message buffer-string kill-emacs debug backtrace-debug 3 t debugger-reenable "" nil recursive-edit standard-output inhibit-trace] 3)
debug(error (wrong-type-argument number-or-marker-p t))
+(0 t)
(setq num-of-unread (+ num-of-unread (car )))
(progn (setq num-of-unread (+ num-of-unread )))
(if (<= clevel level) (progn (setq num-of-unread )))
(when (<= clevel level) (setq num-of-unread (+ num-of-unread )))
(while newsrc (setq info (car newsrc) clevel (gnus-info-level info)) (when (<= clevel level) (setq num-of-unread )) (setq newsrc (cdr newsrc)))
(let ((num-of-unread 0) (newsrc ) info clevel) (while newsrc (setq info clevel ) (when ) (setq newsrc )) num-of-unread)
gnus-group-number-of-unread-mail(2)
eval((gnus-group-number-of-unread-mail 2))
eval-expression((gnus-group-number-of-unread-mail 2) nil)
call-interactively(eval-expression)
8<8<8<8<8<8<8<8<8<

Il me semble pourtant que cette fonction a déjà fonctionné chez moi
Comment récupérer le nombre de messages non lus ou le nombre de nouveaux
messages de niveau x? (Gnus v5.10.6)

Merci de votre aide.

--
Philippe.
Lire les 8 réponses

Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
drkm
Le #21747301
Ph. Idlavi writes:

J'ai pompé la fonction gnus-group-number-of-unread-mail à l'adresse :
http://www-verimag.imag.fr/~moy/emacs/.gnus.el

(defun gnus-group-number-of-unread-mail (level)
"*Returns the number of unread mails in groups of subscription level
LEVEL and below."
(let ((num-of-unread 0)
(newsrc (cdr gnus-newsrc-alist))
info clevel)
(while newsrc
(setq info (car newsrc)
clevel (gnus-info-level info))
(when (<= clevel level)
(setq num-of-unread
(+ num-of-unread (car (gnus-gethash (gnus-info-group info)
gnus-newsrc-hashtb)))))
(setq newsrc (cdr newsrc)))
num-of-unread))

mais Alt-: (gnus-group-number-of-unread-mail 2) dans le buffer Group
donne le Backtrace suivant :



À ce propos, utilise 'q' pour sortir du débuggeur, au lieu de
'C-x o'.

Il semblerait que Gnus stocke un 't' au lieu d'un nombre dans
le nombre d'article non-lus d'un de tes groupes. Comme
'gnus-newsrc-alist' n'est pas documentée, je ne sais pas ce que
cela veux dire. Que donne ceci :

(require 'cl)

(defun drkm-gnus-grp:number-of-unread-mail (level)
"Returns the number of unread mails in groups of LEVEL and below."
(let ((total 0))
(dolist (rc (cdr gnus-newsrc-alist) total)
(when (<= (gnus-info-level rc) level)
(let ((unread (gnus-group-unread (gnus-info-group rc))))
(when (integerp unread)
(incf total unread)))))))

--drkm
Ph. Idlavi
Le #21747291
drkm
Ph. Idlavi writes:



[...]


À ce propos, utilise 'q' pour sortir du débuggeur, au lieu de
'C-x o'.



Ça c'est vu ?!... dans une boule de cristal ? ;-)
Pourquoi ne faut il pas sortir du débuggueur avec 'C-x o' ?


Il semblerait que Gnus stocke un 't' au lieu d'un nombre dans
le nombre d'article non-lus d'un de tes groupes.



Ah... J'ai peut-être une mauvaise configuration dans le .gnus :-(
Peut on savoir quel est le vilain groupe qui stocke un 't' au lieu d'un
nombre ?

Comme
'gnus-newsrc-alist' n'est pas documentée, je ne sais pas ce que
cela veux dire. Que donne ceci :

(require 'cl)

(defun drkm-gnus-grp:number-of-unread-mail (level)
"Returns the number of unread mails in groups of LEVEL and below."
(let ((total 0))
(dolist (rc (cdr gnus-newsrc-alist) total)
(when (<= (gnus-info-level rc) level)
(let ((unread (gnus-group-unread (gnus-info-group rc))))
(when (integerp unread)
(incf total unread)))))))



Ça semble marcher parfaitement !

GrandMerci.

--
Philippe.
drkm
Le #21747281
Ph. Idlavi writes:

drkm
À ce propos, utilise 'q' pour sortir du débuggeur, au lieu de
'C-x o'.



Ça c'est vu ?!... dans une boule de cristal ? ;-)



Meuh non, c'est la webcam sur ton bureau. Je peux même te dire
que tu as provoqué 4 fois de suite l'erreur avant de te décider à
copier ton backtrace. Big Brother's watching *you*!

Pourquoi ne faut il pas sortir du débuggueur avec 'C-x o' ?



Parce que 'C-x o' ne quitte pas le débuggeur. Il change juste
de fenêtre, mais tu es toujours dans le contexte d'exécution du
débuggeur. Regarde ton backtrace ;-)

--drkm
Matthieu Moy
Le #21747271
Ph. Idlavi
drkm
Ph. Idlavi writes:



[...]


À ce propos, utilise 'q' pour sortir du débuggeur, au lieu de
'C-x o'.



Ça c'est vu ?!... dans une boule de cristal ? ;-)
Pourquoi ne faut il pas sortir du débuggueur avec 'C-x o' ?



Quand tu ne quittes pas avec 'q', Emacs garde les anciennes
« backtraces » et les empile. Du coup, tu te retrouves avec une trace
énôôrme dont une grande partie inutile.

--
Matthieu
drkm
Le #21747261
Matthieu Moy writes:

Quand tu ne quittes pas avec 'q', Emacs garde les anciennes
« backtraces » et les empile. Du coup, tu te retrouves avec une trace
énôôrme dont une grande partie inutile.



Tiens, je pensais que s'il affichait effectivement ce qui peut
sembler être la concaténation de plusieurs backtraces, c'est
qu'en fait le backtrace est effectivement celui-là. Dû au fait
qu'Emacs ne dépile pas. D'où le recursive edit.

Non ?

--drkm
Publicité
Suivre les réponses
Poster une réponse
Anonyme