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

gnus-group-number-of-unread-mail

8 réponses
Avatar
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("Æ!ˆÇ ˆÈ !ˆ\nƒ?É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 "...\n" 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("Æ!ˆÇ ˆÈ !ˆ\nƒ?É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 "...\n" 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("Æ!ˆÇ ˆÈ !ˆ\nƒ?É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 "...\n" 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.

8 réponses

Avatar
drkm
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
Avatar
Ph. Idlavi
drkm écrivit le 07/24/05 à 15h32:18 :

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.
Avatar
drkm
Ph. Idlavi writes:

drkm écrivit le 07/24/05 à 15h32:18 :

À 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
Avatar
Matthieu Moy
Ph. Idlavi writes:

drkm écrivit le 07/24/05 à 15h32:18 :

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
Avatar
drkm
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
Avatar
Ph. Idlavi
drkm écrivit le 07/24/05 à 18h04:32 :

Ph. Idlavi writes:

drkm écrivit le 07/24/05 à 15h32:18 :



À 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.



Damned ! Moi qui pensait qu'elle ne fonctionnait pas sous Linux...
Il ne me reste plus qu'a bien l'orienter (pas vers le clavier !).

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*!



Pfff, j'ai l'air bête.
En lisant seulement les premières lignes j'ai eu tellement peur que m'en
suis allé...


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 ;-)



Bon, je crois avoir compris...referais plus.
Merci.
--
Philippe.
Avatar
Matthieu Moy
drkm writes:

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 ?



Si, mon explication est en effet un peu simplifiée (mais correcte pour
une certaine définition de « garder les anciennes backtraces »).

--
Matthieu
Avatar
Matthieu Moy
Ph. Idlavi writes:

En lisant seulement les premières lignes j'ai eu tellement peur que m'en
suis allé...



Oui, mais big brother s'est exprimé dans les dernières lignes justement.

--
Matthieu