2009-08-28 9 views
14

Estoy buscando incluir una referencia a un archivo no elisp (un pequeño programa de Python), y me gustaría poder decir "está en el mismo directorio que el archivo actual, pero con un nombre de archivo diferente". En muchos lenguajes de scripting, hay cosas como __FILE__ (en PHP) para obtener una ruta absoluta al archivo actual.¿Cómo hacer referencia al archivo que se está cargando actualmente en Emacs Lisp?

Si el archivo que se va a incluir está en load-path, entonces puedo encontrarlo con (locate-library "file.py" t), pero estoy atascado si el archivo no está en la ruta de carga.

Entonces, ¿hay alguna manera de que un archivo Emacs Lisp encuentre su propia ruta absoluta (cuando se carga, no se visita)?

+1

Cambió el título para reflejar la pregunta. El título original de la pregunta me llevaría a querer responder "la variable' buffer-file-name' "que no es lo que preguntaste. –

Respuesta

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'. 

También podría estar interesado en la función symbol-file, que le dirá el nombre de archivo absoluto en el que se definió una función o variable especificada.

Si quieres ser elegante, puedes consultar la variable load-in-progress. Si eso es nil, entonces no hay carga en progreso (y presumiblemente está siendo eval 'd en un buffer). En ese caso, puede intentar (buffer-file-name) para obtener el nombre de archivo.

+4

Fancyness más simple: '(o load-file-name (buffer-file-name))' – dbr

+0

Votación hacia arriba para 'symbol-file', para permitir el código autorreferencial. Actualmente se usa una variante en '(defvar my-locn nil) (setq my-locn (archivo-símbolo 'mi-locn))'. –

+0

@dbr obligatorio en los archivos del paquete 'require', gracias! – yPhil

Cuestiones relacionadas