comment savoir a quel moment une variable est changée ?
9 réponses
Gilles Pion
Bonjour à tous,
m'arrive un truc étrange,
à La fin de l'initialisation de ma session emacs, la contenu de la variable
"ange-ftp-ftp-program-name" se retrouve avoir pour valeur "lftp" alors que je
souhaite lui conserver la valeur par défaut, "ftp", que j'observe en "mode sans
échec" ("emacs -Q")
Pour en avoir le coeur net j'ai ajouté en début de mon .emacs:
(defconst ange-ftp-ftp-program-name "ftp")
(message "[1] ange-ftp-ftp-program-name is \"%s\" " ange-ftp-ftp-program-name)
et a la fin
(message "[2] ange-ftp-ftp-program-name is \"%s\" " ange-ftp-ftp-program-name)
et voici le résultat:
[1] ange-ftp-ftp-program-name is "ftp"
Loading ...
/../
[2] ange-ftp-ftp-program-name is "lftp"
Comment est-il possinle d'une valeur constante soit modifié a l'insu de mon
plein gres?
Comment savoir ou cela se passe?
Comment l'empécher?
defconst n'a qu'une valeur indicative : http://www.gnu.org/software/emacs/manual/html_node/elisp/Defining-Variables.html
En effet, je constate après lecture.
Pas d'alternative pour rendre une variable réellement "readonly" alors? -- Gilles Pion
Damien Wyart
* Gilles Pion in fr.comp.applications.emacs:
Pas d'alternative pour rendre une variable réellement "readonly" alors?
A ma connaissance, non, mais je ne suis pas de très près tout ce qui se passe côté développement du coeur d'Emacs. Il y avait eu une courte discussion en 2004, qui n'avait rien donné : http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
-- DW
* Gilles Pion <nosuchuser@nosuchdomain.com>
in fr.comp.applications.emacs:
Pas d'alternative pour rendre une variable réellement "readonly" alors?
A ma connaissance, non, mais je ne suis pas de très près tout ce qui se
passe côté développement du coeur d'Emacs. Il y avait eu une courte
discussion en 2004, qui n'avait rien donné :
http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
Pas d'alternative pour rendre une variable réellement "readonly" alors?
A ma connaissance, non, mais je ne suis pas de très près tout ce qui se passe côté développement du coeur d'Emacs. Il y avait eu une courte discussion en 2004, qui n'avait rien donné : http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
-- DW
Gilles Pion
Ref: <516856e7$0$2230$ de Damien Wyart
Il y avait eu une courte discussion en 2004, qui n'avait rien donné : http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
merci pour le lien en tout cas -- Gilles Pion
Ref: <516856e7$0$2230$426a74cc@news.free.fr> de Damien Wyart
Il y avait eu une courte
discussion en 2004, qui n'avait rien donné :
http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
Il y avait eu une courte discussion en 2004, qui n'avait rien donné : http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
merci pour le lien en tout cas -- Gilles Pion
vincent.belaiche
Gilles Pion writes:
Ref: <516856e7$0$2230$ de Damien Wyart
Il y avait eu une courte discussion en 2004, qui n'avait rien donné : http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
merci pour le lien en tout cas
Sinon pour trouver quand la variable est configurée, tu pourrais faire un paquetage qui redéfinit la fonction set pour ouvrir le débogueur quand c'est le symbole de la variable problématique et charger ce paquetage en ligne de commande juste avant le fichier d'init.
Vincent.
Gilles Pion <nosuchuser@nosuchdomain.com> writes:
Ref: <516856e7$0$2230$426a74cc@news.free.fr> de Damien Wyart
Il y avait eu une courte
discussion en 2004, qui n'avait rien donné :
http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
merci pour le lien en tout cas
Sinon pour trouver quand la variable est configurée, tu pourrais faire
un paquetage qui redéfinit la fonction set pour ouvrir le débogueur quand
c'est le symbole de la variable problématique et charger ce paquetage en
ligne de commande juste avant le fichier d'init.
Il y avait eu une courte discussion en 2004, qui n'avait rien donné : http://lists.gnu.org/archive/html/emacs-devel/2004-11/msg00561.html
merci pour le lien en tout cas
Sinon pour trouver quand la variable est configurée, tu pourrais faire un paquetage qui redéfinit la fonction set pour ouvrir le débogueur quand c'est le symbole de la variable problématique et charger ce paquetage en ligne de commande juste avant le fichier d'init.
Vincent.
Gilles Pion
Ref: de Vincent Belaïche
Sinon pour trouver quand la variable est configurée, tu pourrais faire un paquetage qui redéfinit la fonction set pour ouvrir le débogueur quand c'est le symbole de la variable problématique et charger ce paquetage en ligne de commande juste avant le fichier d'init.
Je vois a peu prés le principe, bien que je ne connaisse pas le concept de "paquetage"
Par contre, je me demande comment, à l'intérieur de ma fonction "set", invoquer la vraie fonction "set" ensuite sans partir en boucle infinie? -- Gilles Pion
Ref: <80ehebw0w5.fsf@gmail.com> de Vincent Belaïche
Sinon pour trouver quand la variable est configurée, tu pourrais faire
un paquetage qui redéfinit la fonction set pour ouvrir le débogueur quand
c'est le symbole de la variable problématique et charger ce paquetage en
ligne de commande juste avant le fichier d'init.
Je vois a peu prés le principe, bien que je ne connaisse pas le concept de
"paquetage"
Par contre, je me demande comment, à l'intérieur de ma fonction "set", invoquer
la vraie fonction "set" ensuite sans partir en boucle infinie?
--
Gilles Pion
Sinon pour trouver quand la variable est configurée, tu pourrais faire un paquetage qui redéfinit la fonction set pour ouvrir le débogueur quand c'est le symbole de la variable problématique et charger ce paquetage en ligne de commande juste avant le fichier d'init.
Je vois a peu prés le principe, bien que je ne connaisse pas le concept de "paquetage"
Par contre, je me demande comment, à l'intérieur de ma fonction "set", invoquer la vraie fonction "set" ensuite sans partir en boucle infinie? -- Gilles Pion
duthen.cnv
Le mardi 16 avril 2013 20:17:29 UTC+2, Gilles Pion a écrit :
de Vincent Belaïche Par contre, je me demande comment, à l'intérieur de ma fonction "set" ,
invoquer la vraie fonction "set" ensuite sans partir en boucle infinie?
Regarde la fonction 'defadvice' (qui est une macro d'ailleurs).
Sinon, tu peux "patche"r une fonction à la mano de la manière suivante: (le 'unless' permet d'être sûr de ne l'exécuter qu'une fois et d'avoir la vraie définition originelle! (attention d'utiliser un nom unique, et le même aux 3 endroits! (et de ne pas changer de nom en cours de développement!)))
(defun set (var val) (if (eq var 'toto) (backtrace)) (jd-orig-set var val))
Le mardi 16 avril 2013 20:17:29 UTC+2, Gilles Pion a écrit :
de Vincent Belaïche
Par contre, je me demande comment, à l'intérieur de ma fonction "set" ,
invoquer la vraie fonction "set" ensuite sans partir en boucle infinie?
Regarde la fonction 'defadvice' (qui est une macro d'ailleurs).
Sinon, tu peux "patche"r une fonction à la mano de la manière suivante:
(le 'unless' permet d'être sûr de ne l'exécuter qu'une fois
et d'avoir la vraie définition originelle!
(attention d'utiliser un nom unique, et le même aux 3 endroits!
(et de ne pas changer de nom en cours de développement!)))
Le mardi 16 avril 2013 20:17:29 UTC+2, Gilles Pion a écrit :
de Vincent Belaïche Par contre, je me demande comment, à l'intérieur de ma fonction "set" ,
invoquer la vraie fonction "set" ensuite sans partir en boucle infinie?
Regarde la fonction 'defadvice' (qui est une macro d'ailleurs).
Sinon, tu peux "patche"r une fonction à la mano de la manière suivante: (le 'unless' permet d'être sûr de ne l'exécuter qu'une fois et d'avoir la vraie définition originelle! (attention d'utiliser un nom unique, et le même aux 3 endroits! (et de ne pas changer de nom en cours de développement!)))
(defun set (var val) (if (eq var 'toto) (backtrace)) (jd-orig-set var val))
Gilles Pion
Ref: de
Sinon, tu peux "patche"r une fonction à la mano de la manière suivante: (le 'unless' permet d'être sûr de ne l'exécuter qu'une fois et d'avoir la vraie définition originelle! (attention d'utiliser un nom unique, et le même aux 3 endroits! (et de ne pas changer de nom en cours de développement!)))
(defun set (var val) (if (eq var 'toto) (backtrace)) (jd-orig-set var val))
merci pour l'exemple, je le copie illico dans "knowledge base" perso. -- Gilles Pion
Ref: <f5e4ac1c-b5c3-45f3-bdfc-2129de036e99@googlegroups.com> de
duthen.cnv@gmail.com
Sinon, tu peux "patche"r une fonction à la mano de la manière suivante:
(le 'unless' permet d'être sûr de ne l'exécuter qu'une fois
et d'avoir la vraie définition originelle!
(attention d'utiliser un nom unique, et le même aux 3 endroits!
(et de ne pas changer de nom en cours de développement!)))
Sinon, tu peux "patche"r une fonction à la mano de la manière suivante: (le 'unless' permet d'être sûr de ne l'exécuter qu'une fois et d'avoir la vraie définition originelle! (attention d'utiliser un nom unique, et le même aux 3 endroits! (et de ne pas changer de nom en cours de développement!)))