2009-08-28 4 views
14

Je cherche à inclure une référence à un fichier non-elisp (un petit programme Python), et j'aimerais pouvoir dire "il est dans le même répertoire que le fichier actuel, mais avec un nom de fichier différent." Dans de nombreux langages de script, il existe des choses comme __FILE__ (en PHP) pour obtenir un chemin absolu vers le fichier en cours.Comment faire référence au fichier en cours de chargement dans Emacs Lisp?

Si le fichier à inclure est dans le load-path, alors je peux le trouver avec (locate-library "file.py" t), mais je suis coincé si le fichier n'est pas dans le chemin de chargement.

Est-ce qu'il y a un moyen pour un fichier Emacs Lisp de trouver son propre chemin absolu (lorsqu'il est chargé, non visité)?

+1

Modification du titre pour refléter la question posée. Le titre original de la question me conduirait à vouloir répondre "à la variable' buffer-file-name' "ce qui n'est pas ce que vous avez demandé. –

Répondre

21

M-x describe-variable load-file-name

load-file-name is a variable defined in `C source code'. 

Documentation: 
Full name of file being loaded by `load'. 

Vous pourriez également être intéressé par la fonction symbol-file, qui vous dira le nom de fichier absolu dans lequel une fonction spécifiée ou variable a été définie.

Si vous voulez vous faire plaisir, vous pouvez vérifier la variable load-in-progress. Si c'est nil, alors aucune charge n'est en cours (et vous êtes vraisemblablement eval 'd dans un tampon). Dans ce cas, vous pouvez essayer (buffer-file-name) pour obtenir le nom de fichier.

+4

Plus simple fancyness: '(ou nom-fichier-de-chargement (nom-fichier-tampon)) – dbr

+0

Upvote pour' symbol-file', pour permettre le code auto-référentiel. Actuellement en utilisant une variante sur '(defvar my-locn nil) (setq mon-locn (fichier-symbole 'my-locn))'. –

+0

@dbr obligatoire dans les fichiers de package 'require''d, merci! – yPhil

Questions connexes