OVH Cloud OVH Cloud

Location du fichier de configuration

4 réponses
Avatar
Xavier Maillard
Bonsoir,

Je cherche à savoir si le fichier de configuration de GNU Emacs
doit forcément se trouver à la racine du répertoire de connexion
de l'utilisateur ou bien, si on peut indiquer le répertoire où le
trouver en placant une variable d'environnement bien senti.

Pour tout dire, je cherche à nettoyer un peu mon répertoire
maison de tout le fatras habituel en adoptant une organisation
plus propre -i.e je me suis créé un répertoire ~/sys dans lequel
je retrouve mon /etc, mon /usr perso.

J'ai cherché à répondre à cette question mais n'ai pas vraiment
trouvé grand chose sur le sujet.

Merci
--
GnusFR (http://www.gnusfr.org)
EmacsFR (http://www.emacsfr.org)

.emacs: Because customisation is fun!

4 réponses

Avatar
drkm
Xavier Maillard writes:

Je cherche à savoir si le fichier de configuration de GNU Emacs
doit forcément se trouver à la racine du répertoire de connexion
de l'utilisateur ou bien, si on peut indiquer le répertoire où le
trouver en placant une variable d'environnement bien senti.



Une variable d'environnement, je ne sais pas. Il faudrait
regarder le code source C, que je n'ai pas sous la main. Mais il
y a 'user-init-file' aui fait ce que tu veux, je pense.

S'il n'y a pas moyen d'utiliser une variable d'environnement,
il te faut utiliser un fichier le précédent dans le macanisme de
chargement (info: (elisp)Startup Summary).

Mais il n'y a là que des fichiers « site-wide », si je me
souviens bien, ce qui n'est pas le mieux, évidemment. Sinon,
peut-être avec un script perso wrappant l'appel à Emacs, et
fixant cette variable sur la ligne de commande, pourquoi pas.

Non testé.

--drkm
Avatar
Michael Cadilhac
drkm writes:

Xavier Maillard writes:

Je cherche à savoir si le fichier de configuration de GNU Emacs
doit forcément se trouver à la racine du répertoire de connexion
de l'utilisateur ou bien, si on peut indiquer le répertoire où le
trouver en placant une variable d'environnement bien senti.



Une variable d'environnement, je ne sais pas. Il faudrait
regarder le code source C, que je n'ai pas sous la main. Mais il
y a 'user-init-file' aui fait ce que tu veux, je pense.



Ça ne se trouve pas dans le code C ceci, mais dans startup.el, dans
la fonction `command-line'.

On voit qu'il n'y a pas de getenv pour ce genre de chose.

Par contre,

;; If we did not find ~/.emacs, try
;; ~/.emacs.d/.emacs.
(let ((otherfile
(expand-file-name
(file-name-nondirectory user-init-file-1)
(file-name-as-directory
(expand-file-name
".emacs.d"
(file-name-directory user-init-file-1))))))
(load otherfile t t)

Si ça peut t'aider à cleaner ton ~ :-)

--
Michael Cadilhac, a.k.a. Micha [mika] |
Epita/LRDE promo 2007 | Please note that you should
2 rue de la Convention | 01.46.70.90.75 | s//@/ my mail address.
94270 Le Kremlin Bicetre | 06.23.20.31.30 |
Avatar
drkm
Michael Cadilhac writes:

Ça ne se trouve pas dans le code C ceci, mais dans startup.el, dans
la fonction `command-line'.



C'est ce que j'avais d'abord vu, puis un C-h v m'a répondu :

,----[ C-h v user-init-file RET ]
| Defined in `C source code'.
`----

;; If we did not find ~/.emacs, try
;; ~/.emacs.d/.emacs.



Tiens, ça m'avait échappé. Très intéressant. Merci.

--drkm
Avatar
Michael Cadilhac
drkm writes:

Michael Cadilhac writes:

Ça ne se trouve pas dans le code C ceci, mais dans startup.el, dans
la fonction `command-line'.



C'est ce que j'avais d'abord vu, puis un C-h v m'a répondu :

,----[ C-h v user-init-file RET ]
| Defined in `C source code'.
`----



Oui, et à voir les sources...

----------------------------------------------------------------------
lread.c:/* File name of user's init file. */
lread.c:Lisp_Object Vuser_init_file;
[...]
lread.c: DEFVAR_LISP ("user-init-file", &Vuser_init_file,
lread.c: doc: /* File name, including directory, of user's initialization file.
lread.c:If the file loaded had extension `.elc', and the corresponding source file
lread.c:exists, this variable contains the name of source file, suitable for use
lread.c:by functions like `custom-save-all' which edit the init file. */);
lread.c: Vuser_init_file = Qnil;
----------------------------------------------------------------------

et encore plus de sources...

----------------------------------------------------------------------
startup.el: ;; This tells `load' to store the file name found
startup.el: ;; into user-init-file.
startup.el: (setq user-init-file t)
startup.el: (load user-init-file-1 t t)
----------------------------------------------------------------------

And even mooore...

----------------------------------------------------------------------
lread.c:DEFUN ("load", Fload, Sload, 1, 5, 0,
[...]
lread.c: /* Tell startup.el whether or not we found the user's init file. */
lread.c: if (EQ (Qt, Vuser_init_file))
lread.c: Vuser_init_file = found;
----------------------------------------------------------------------

on peut conclure que user-init-file est setté par `startup.el' une
fois qu'il a trouvé quel était l'init-file (~/.emacs,
~/.emacs.d/.emacs, ...), et ce par l'intermédiaire de (load).

J'aime beaucoup la manière dont s'est fait mine de rien :-) C'est
moi, ou c'est vraiment moche ? ;-)

--
Michael Cadilhac, a.k.a. Micha [mika] |
Epita/LRDE promo 2007 | Please note that you should
2 rue de la Convention | 01.46.70.90.75 | s//@/ my mail address.
94270 Le Kremlin Bicetre | 06.23.20.31.30 |