OVH Cloud OVH Cloud

Relire les variables d'environnement pendant une session d'emacs

5 réponses
Avatar
SL
Bonjour,

Si une variable d'environnement est modifiée pendant une session
d'Emacs, y a-t-il un moyen pour lui faire prendre en compte les
nouvelles valeurs ?

Je n'ai trouvé jusqu'ici que le redémarrage d'emacs.

Bien à vous,
Sylvain

5 réponses

Avatar
Vincent Bernat
OoO Pendant le temps de midi du samedi 20 août 2005, vers 12:07, SL
disait:

Si une variable d'environnement est modifiée pendant une session
d'Emacs, y a-t-il un moyen pour lui faire prendre en compte les
nouvelles valeurs ?



Non, il n'y a pas moyen de les faire relire. Je suppose que tu les
modifies dans un autre shell : un programme ne peut pas aller scruter
l'environnement d'un autre programme. Il hérite l'environnement de son
père au démarrage et c'est tout.

Par contre, tu peux altérer l'environnement de Emacs avec la fonction
`setenv'.
--
/* Am I fucking pedantic or what? */
2.2.16 /usr/src/linux/drivers/scsi/qlogicpti.h
Avatar
drkm
SL writes:

Si une variable d'environnement est modifiée pendant une session
d'Emacs, y a-t-il un moyen pour lui faire prendre en compte les
nouvelles valeurs ?



Cela dépend ce que tu entends pas « modifier une variable
d'environnement » et « lui faire prendre en compte les nouvelles
valeurs ». Où (dans quel processus) et comment modifies-tu les
variables ? À quoi servent-elles ?

--drkm
Avatar
drkm
Vincent Bernat writes:

OoO Pendant le temps de midi du samedi 20 août 2005, vers 12:07, SL
disait:

Si une variable d'environnement est modifiée pendant une session
d'Emacs, y a-t-il un moyen pour lui faire prendre en compte les
nouvelles valeurs ?



Non, il n'y a pas moyen de les faire relire.



(getenv "drkm")
==> nil
(setenv "drkm" "Hello, world!")
==> "Hello, world!"
(getenv "drkm")
==> "Hello, world!"

Je suppose que tu les
modifies dans un autre shell : un programme ne peut pas aller scruter
l'environnement d'un autre programme. Il hérite l'environnement de son
père au démarrage et c'est tout.

Par contre, tu peux altérer l'environnement de Emacs avec la fonction
`setenv'.



Mais c'est peut-être déjà ce que fait SL, on n'en sait rien.

D'après ce qu'il dit, peut-être utilise-t-il 'setenv' depuis
Emacs, pour modifier une variable utilisée au démarrage d'Emacs
ou au chargement d'un module pour calculer la valeur à affecter à
une variable ELisp. Dans ce cas, la réponse serait de réévaluer
la forme qui se charge de la lecture de la valeur, du calcul et
de l'affectation.

Bref, on manque d'information.

--drkm
Avatar
SL
drkm a écrit :
SL writes:

> Si une variable d'environnement est modifiée pendant une session
> d'Emacs, y a-t-il un moyen pour lui faire prendre en compte les
> nouvelles valeurs ?

Cela dépend ce que tu entends pas « modifier une variable
d'environnement » et « lui faire prendre en compte les nouvelles
valeurs ». Où (dans quel processus) et comment modifies-tu les
variables ? À quoi servent-elles ?



Je modifies les variables (c'est surtout de CLASSPATH dont il s'agit)
avec les outils systèmes de Windows. Je travaille sur Emacs, à la fois
pour l'environnement jde et pour le EShell, qui me sert de shell. Une
fois CLASSPATH modifié, la session EShell reste avec les anciennes
valeurs, ce à quoi je m'attendais, mais c'est également le cas en
fermant / rouvrant le shell. Je suis donc systématiquement contraint
de fermer / rouvrir Emacs.
Avatar
drkm
SL writes:

Je modifies les variables (c'est surtout de CLASSPATH dont il s'agit)
avec les outils systèmes de Windows. Je travaille sur Emacs, à la fois
pour l'environnement jde et pour le EShell, qui me sert de shell. Une
fois CLASSPATH modifié, la session EShell reste avec les anciennes
valeurs, ce à quoi je m'attendais, mais c'est également le cas en
fermant / rouvrant le shell. Je suis donc systématiquement contraint
de fermer / rouvrir Emacs.



Je ne connais pas le système des variables d'environnement de
Windows. Tu trouveras sans doute plus d'infos sur un groupe
dédié à ce système. Néanmoins, comme l'a dit Vincent, il te
suffirait sans doute d'utiliser 'setenv', qui est une commande
(utilisable interactivement) :

M-x setenv <RET> CLASSPATH <RET> une valeur <RET>

M-x getenv <RET> CLASSPATH <RET>
==> une valeur

--drkm