OVH Cloud OVH Cloud

gnus et highlight mode

26 réponses
Avatar
Flatman
--=-=-=
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: quoted-printable


Bonjour,

J'vais pas commencer par demander si cela est possible de ... car je
suis sur que c'est possible (emacs oblige ;-) ) !

Actuellement, quand j'=E9cris un mail dans un thread (maillist ou
newsgroup) je fais Iss... (Increase score subject) pour faire ensorte
que si qq =E9crit encore un mess dans ce thread, le thread est indiqu=E9 en
bold (highlight) .

Que faudrait-il que je fasse pour automatiser cela ?

=2D-=20
Erik

* Life is wonderful with Emacs and Perl *

--=-=-=
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (Darwin)

iD8DBQBDFBznexs8k4f5tB4RAicQAJ9H9EGZjRM3njW63dDcRKZUHS7mFACeJbr+
ySnk5r/5Kitl9OKS/UIk+eo=
=hWvc
-----END PGP SIGNATURE-----
--=-=-=--

6 réponses

1 2 3
Avatar
drkm
Sébastien Kirche writes:

Bon j'ai un truc incompréhensible avec le load-path, faut que
j'ouvre un fil sur le sujet.



Je n'ai pas vu ce fil. J'espère que c'est réglé (et non que
l'article s'est perdu).

--drkm
Avatar
Sébastien Kirche
Le 3 septembre 2005 à 02:09, drkm s'est exprimé ainsi :

Sébastien Kirche writes:

> Bon j'ai un truc incompréhensible avec le load-path, faut que
> j'ouvre un fil sur le sujet.

Je n'ai pas vu ce fil.



Normal je ne l'ai pas rédigé. Pas eu le temps d'y penser pour faire des essais.

J'espère que c'est réglé (et non que l'article s'est perdu).



Pas exactement. J'ai un truc que je ne comprends pas en définissant un
load-path par (add-to-list 'load-path sk:elisp-path) puis
(normal-top-level-add-subdirs-to-load-path)

Sachant que (defvar sk:home (expand-file-name "~") "Home sweet home"),
Si je définis sk:elisp-path par
(defvar sk:elisp-path (concat sk:home "/.elisp")
"Chemin vers mes packages elisp")
Mes packages locaux sont ignorés au profit de ceux de la version
standard alors que c'est bon avec
(defvar sk:elisp-path "~/.elisp" "Chemin vers mes packages elisp")

J'ai constaté ça en cherchant la doc de gnus-score-edit-all-score qui
n'est pas en 5.11 et en essayant de trouver pourquoi les fichiers info
dans ~/.elisp/info étaient ignorés.

Il a certainement un truc qui m'échappe mais aujourd'hui j'ai la crève
et j'arrive pas trop à réfléchir. En plus je ferais mieux d'aller dormir
;)

--
Sébastien Kirche
Avatar
drkm
Sébastien Kirche writes:

load-path par (add-to-list 'load-path sk:elisp-path) puis
(normal-top-level-add-subdirs-to-load-path)



Si je ne me trompe pas, il faut fixer 'default-directory' au
répertoire à chercher par cette fonction :

(let ((default-directory sk:elisp-path))
(normal-top-level-add-subdirs-to-load-path))

Sachant que (defvar sk:home (expand-file-name "~") "Home sweet home"),
Si je définis sk:elisp-path par
(defvar sk:elisp-path (concat sk:home "/.elisp")
"Chemin vers mes packages elisp")
Mes packages locaux sont ignorés au profit de ceux de la version
standard alors que c'est bon avec
(defvar sk:elisp-path "~/.elisp" "Chemin vers mes packages elisp")



Ça par contre, c'est vraiment étrange. Donc avec l'un ça
fonctionne, mais pas avec l'autre ? Que vaut (concat sk:home
"/.elisp") ?

J'ai constaté ça en cherchant la doc de gnus-score-edit-all-score qui
n'est pas en 5.11 et en essayant de trouver pourquoi les fichiers info
dans ~/.elisp/info étaient ignorés.



C'est encore un autre problème, les fichiers Info. Je suppose
que tu utilises une variable comme 'Info-directory-list'. Tu
peux regarder après 'drkm-conf:add-info-path' dans le fichier
'drkm-config.el' de la drkm-lib, dans le répertoire
<URL:http://cvs.sf.net/viewcvs.py/drkm-lib/drkm-lib/drkm/>.

Il a certainement un truc qui m'échappe mais aujourd'hui j'ai la crève
et j'arrive pas trop à réfléchir. En plus je ferais mieux d'aller dormir
;)



Si on s'écoutait, on serait moins souvent là ;-). Prompt
rétablissement.

--drkm
Avatar
Sébastien Kirche
Le 3 septembre 2005 à 04:09, drkm s'est exprimé ainsi :

Sébastien Kirche writes:

> load-path par (add-to-list 'load-path sk:elisp-path) puis
> (normal-top-level-add-subdirs-to-load-path)

Si je ne me trompe pas, il faut fixer 'default-directory' au
répertoire à chercher par cette fonction :

(let ((default-directory sk:elisp-path))
(normal-top-level-add-subdirs-to-load-path))



Avec l'une des 2 méthodes c'est bon pour trouver les packages locaux.

> Sachant que (defvar sk:home (expand-file-name "~") "Home sweet
> home"), Si je définis sk:elisp-path par (defvar sk:elisp-path
> (concat sk:home "/.elisp") "Chemin vers mes packages elisp") Mes
> packages locaux sont ignorés au profit de ceux de la version
> standard alors que c'est bon avec (defvar sk:elisp-path "~/.elisp"
> "Chemin vers mes packages elisp")

Ça par contre, c'est vraiment étrange. Donc avec l'un ça
fonctionne, mais pas avec l'autre ? Que vaut (concat sk:home
"/.elisp") ?



(concat sk:home "/.elisp")
"/home/seki/.elisp"... Je me suis demandé s'il n'y avait pas une
histoire de slash terminal dans les chemins du path.

(insert (format "%s" load-path))
(/home/seki/.elisp/cedet/common/ ~/.elisp/gnus ~/.elisp
/home/seki/.elisp/auctex /home/seki/.elisp/bbdb-2.35
/home/seki/.elisp/cedet /home/seki/.elisp/ecb
[...] /home/seki/.elisp/gnus /home/seki/.elisp/info
/home/seki/.elisp/man [...]
/usr/share/emacs-snapshot/site-lisp/ [...])

Bizarre la présence d'une version avec ~ et d'une autre avec
/home/seki...


Pour être précis voilà le début de mon .emacs :
;;chez moi
(defvar sk:home (expand-file-name "~") "Home sweet home")

;; Ajouter mon répertoire personnel à la liste des chemins de recherche
;(defvar sk:elisp-path (concat sk:home "/.elisp") "Chemin vers mes packages elisp")
(defvar sk:elisp-path "~/.elisp" "Chemin vers mes packages elisp")

;(message (format "%s" load-path))
(add-to-list 'load-path sk:elisp-path)
(progn (cd sk:elisp-path)
(normal-top-level-add-subdirs-to-load-path)
(cd sk:home))
;(message (format "%s" load-path))

;; chemin d'un Gnus custom (si présent)
(let ((gnusp (concat sk:elisp-path "/gnus")))
(when (file-exists-p gnusp)
(add-to-list 'load-path gnusp)))
;; localisation des fichiers gnus (ne peut pas être dans .gnus !)
(setq gnus-home-directory (concat sk:home "/.gnus.d"))
(setq message-directory (concat gnus-home-directory "/Mail"))
(setq gnus-directory (concat gnus-home-directory "/News"))
(setq gnus-agent-directory (concat gnus-home-directory "/agent"))


> J'ai constaté ça en cherchant la doc de gnus-score-edit-all-score
> qui n'est pas en 5.11 et en essayant de trouver pourquoi les
> fichiers info dans ~/.elisp/info étaient ignorés.

C'est encore un autre problème, les fichiers Info. Je suppose
que tu utilises une variable comme 'Info-directory-list'.



Je fais le traitement suivant pour configurer le path d'info :

(require 'info)
(let ((infop (concat sk:elisp-path "/info/")))
(when (file-exists-p infop)
(setq Info-directory-list Info-default-directory-list);;ignore $INFOPATH
(push infop Info-directory-list)))
(when (string-match "`goudurix" system-name)
(push "/sw/share/info" Info-directory-list)
(push "/Applications/Emacs.app/Contents/Resources/info" Info-directory-list) ;; not built-in ?
)

J'avais écrit ce code sur mon mac au boulot où il me semble que ça
fonctionne, mais là sous Linux, je n'ai pas les fichiers infos locaux à
~/.elisp/info (muse, NoGnus...)

Tu peux regarder après 'drkm-conf:add-info-path' dans le fichier
'drkm-config.el' de la drkm-lib, dans le répertoire
<URL:http://cvs.sf.net/viewcvs.py/drkm-lib/drkm-lib/drkm/>.



Faut que je regarde ça. Pour l'instant on m'appelle pour manger :)

Si on s'écoutait, on serait moins souvent là ;-). Prompt
rétablissement.



Merci.

--
Sébastien Kirche
Avatar
drkm
Sébastien Kirche writes:

Le 3 septembre 2005 à 04:09, drkm s'est exprimé ainsi :

Sébastien Kirche writes:

> load-path par (add-to-list 'load-path sk:elisp-path) puis
> (normal-top-level-add-subdirs-to-load-path)

Si je ne me trompe pas, il faut fixer 'default-directory' au
répertoire à chercher par cette fonction :

(let ((default-directory sk:elisp-path))
(normal-top-level-add-subdirs-to-load-path))



Avec l'une des 2 méthodes c'est bon pour trouver les packages locaux.



Ce que je veux dire, c'est que cette fonction ajoute les
sous-répertoires du répertoire courant. Si le fichier dans
lequel elle se trouve est dans le même répertoire, c'est ok. Ce
qui ne dispense pas d'ajouter 'sk:elisp-path' au 'load-path' le
cas échéant.

Donc pour ne pas dépendre de la position du fichier (ce que je
ne fais que dans de rares cas, comme les Subdirs Files), je te
propose ceci à la place des deux lignes initiales :

(push sk:elisp-path load-path)
(let ((default-directory sk:elisp-path))
(normal-top-level-add-subdirs-to-load-path))

Le 'let' est dans ce cas équivalent à ce que tu fais plus bas,
prendre une forme en sandwich entre deux 'cd', le second revenant
au répertoire courant initial.

Ça par contre, c'est vraiment étrange. Donc avec l'un ça
fonctionne, mais pas avec l'autre ? Que vaut (concat sk:home
"/.elisp") ?



(concat sk:home "/.elisp")
"/home/seki/.elisp"... Je me suis demandé s'il n'y avait pas une
histoire de slash terminal dans les chemins du path.



Tiens, il me semblait aussi, mais ça n'apparaît plus dans 'C-h
v load-path <RET>'. Soit ça a changé, soit je me trompe.

(insert (format "%s" load-path))
(/home/seki/.elisp/cedet/common/ ~/.elisp/gnus ~/.elisp
/home/seki/.elisp/auctex /home/seki/.elisp/bbdb-2.35
/home/seki/.elisp/cedet /home/seki/.elisp/ecb
[...] /home/seki/.elisp/gnus /home/seki/.elisp/info
/home/seki/.elisp/man [...]
/usr/share/emacs-snapshot/site-lisp/ [...])

Bizarre la présence d'une version avec ~ et d'une autre avec
/home/seki...



C'est que tu te sers de 'sk:elisp-path' pour ceux jusqu'à
auctex (en partant de la fin, puisqu'on fait des pushes), puis
que tu te sers de '~/.elisp/...' pour Gnus. 'cedet/common' est
ajouté par 'cedet.el', je crois.

Pour être précis voilà le début de mon .emacs :
;;chez moi
(defvar sk:home (expand-file-name "~") "Home sweet home")

;; Ajouter mon répertoire personnel à la liste des chemins de recherche
;(defvar sk:elisp-path (concat sk:home "/.elisp") "Chemin vers mes packages elisp")
(defvar sk:elisp-path "~/.elisp" "Chemin vers mes packages elisp")

;(message (format "%s" load-path))



Le premier argument de 'message' est déjà une chaîne de format.
Ce qui d'une part rend inutile l'appel à 'format', et d'autre
part le rend nuisible, si le résultat de format contient des
'%' :

(message "%s" load-path)

(add-to-list 'load-path sk:elisp-path)



(push sk:elisp-path load-path)

'add-to-list' passe en revue tous les éléments de la liste pour
vérifier que l'élément que tu ajoutes ne s'y trouve pas déjà. Ça
prend du temps pour rien, et comme le 'load-path' introduit un
principe de précédence (on charge le fichier de même nom trouvé
dans le premier répertoire du 'load-path' en partant du début),
ça peut mener à un bug vicieux.

(progn (cd sk:elisp-path)
(normal-top-level-add-subdirs-to-load-path)
(cd sk:home))



Ah ben vi, si tu fais un 'cd', c'est normal que ça marche :-).

(let ((default-directory sk:elisp-path))
(normal-top-level-add-subdirs-to-load-path))

;(message (format "%s" load-path))



(message "%s" load-path)

;; chemin d'un Gnus custom (si présent)
(let ((gnusp (concat sk:elisp-path "/gnus")))
(when (file-exists-p gnusp)
(add-to-list 'load-path gnusp)))



Cela dépend de comment tu l'installes. Apparemment, tu copies
les fichiers compilés dans un répertoire. Personnellement, je
garde le répertoire d'installation. Pour parer aux deux
éventualités, je te propose ceci :

(let* ((gnus-dir (concat sk:elisp-path "/gnus"))
(lisp-dir (concat gnus-dir "/lisp")))
(cond ((file-directory-p gnus-dir) (push gnus-dir load-path))
((file-directory-p lisp-dir) (push lisp-dir load-path))))

;; localisation des fichiers gnus (ne peut pas être dans .gnus !)
(setq gnus-home-directory (concat sk:home "/.gnus.d"))
(setq message-directory (concat gnus-home-directory "/Mail"))
(setq gnus-directory (concat gnus-home-directory "/News"))
(setq gnus-agent-directory (concat gnus-home-directory "/agent"))



Ça dépend des gens, mais personnellement, je trouve plus clair
de coupler plusieurs 'setf' en un seul :

(setq gnus-home-directory (concat sk:home "/.gnus.d")
message-directory (concat gnus-home-directory "/Mail")
...)

C'est encore un autre problème, les fichiers Info. Je suppose
que tu utilises une variable comme 'Info-directory-list'.



Je fais le traitement suivant pour configurer le path d'info :

(require 'info)
(let ((infop (concat sk:elisp-path "/info/")))
(when (file-exists-p infop)



(when (file-directory-p infop)

(setq Info-directory-list Info-default-directory-list);;ignore $INFOPATH
(push infop Info-directory-list)))
(when (string-match "`goudurix" system-name)
(push "/sw/share/info" Info-directory-list)
(push "/Applications/Emacs.app/Contents/Resources/info" Info-directory-list) ;; not built-in ?
)



Mmh, dangereux. Si 'Info-directory-list' n'a pas été
initialisée, et que 'infop' n'est pas un répertoire existant, la
valeur de 'Info-default-directory-list' ne sera pas prise en
compte. Ce qui peut être très surprenant, et difficile à déceler
si on ne connais pas les détails de construction de la liste des
répertoires Info.

J'avais écrit ce code sur mon mac au boulot où il me semble que ça
fonctionne, mais là sous Linux, je n'ai pas les fichiers infos locaux à
~/.elisp/info (muse, NoGnus...)



Étrange.

Tu peux regarder après 'drkm-conf:add-info-path' dans le fichier
'drkm-config.el' de la drkm-lib, dans le répertoire
<URL:http://cvs.sf.net/viewcvs.py/drkm-lib/drkm-lib/drkm/>.



Faut que je regarde ça. Pour l'instant on m'appelle pour manger :)



Sympa, ça :-). Je me souviens que lors de l'écriture de cette
fonction, j'ai été surpris de découvrir les cas spéciaux à
prendre en compte pour ajouter un répertoire d'Info de manière
sûre et propre.

Je pense que cette fonction prend tous les cas en compte : elle
permet d'ajouter une liste de répertoires, absolus ou relatifs au
répertoire courant, de n'ajouter que les répertoires contenant un
fichier "dir", elle se charge de l'initialisation correcte du
path, elle ne requière pas de charger 'info.el', etc. Exemples :

(drkm-conf:add-info-path "/un/repertoire")
(drkm-conf:add-info-path "/un/repertoire" :if-dir t)
(drkm-conf:add-info-path "/un/repertoire" :if-dir "other-dir-name")
(drkm-conf:add-info-path '("/un/repertoire/absolu"
"un/autre/relatif"
"...")
:if-dir t)

Je pense que j'ai fait quelques modifications que je n'ai pas
encore commitées, mais l'essentiel est là.

--drkm
Avatar
drkm
drkm writes:

(let* ((gnus-dir (concat sk:elisp-path "/gnus"))
(lisp-dir (concat gnus-dir "/lisp")))
(cond ((file-directory-p gnus-dir) (push gnus-dir load-path))
((file-directory-p lisp-dir) (push lisp-dir load-path))))



Oops, il faut bien sûr inverser les deux conditions (si un
sous-répertoire "lisp" existe, c'est celui-là et uniquement
celui-là qu'il faut ajouter) :

(let* ((gnus-dir (concat sk:elisp-path "/gnus"))
(lisp-dir (concat gnus-dir "/lisp")))
(cond ((file-directory-p lisp-dir) (push lisp-dir load-path))
((file-directory-p gnus-dir) (push gnus-dir load-path))))

On peut être tenté d'ajouter le sous-répertoire "contrib"
également, mais celui-ci contient des fichiers 'ucs-tables.el' et
'xml.el' par exemple. Je ne ferais donc cela qu'en connaissance
de cause ...

--drkm
1 2 3