2009-08-28 11 views
14

Szukam dołączyć odniesienie do pliku nie-elisp (mały program Python), i chciałbym móc powiedzieć "jest w tym samym katalogu, co bieżący plik, ale z inną nazwą pliku." W wielu językach skryptowych są rzeczy takie jak __FILE__ (w PHP), aby uzyskać bezwzględną ścieżkę do bieżącego pliku.Jak odnosić się do pliku aktualnie ładowanego do Emacs Lisp?

Jeśli plik, który ma zostać dołączony, znajduje się w load-path, mogę go znaleźć pod numerem (locate-library "file.py" t), ale utknąłem, jeśli plik nie znajduje się na ścieżce ładowania.

Czy istnieje sposób dla pliku Emacs Lisp, aby znaleźć własną bezwzględną ścieżkę (podczas ładowania, nie odwiedzane)?

+1

Zmieniono tytuł w celu odzwierciedlenia zadanego pytania. Oryginalny tytuł tego pytania skłoniłby mnie do odpowiedzi "zmienna' nazwa-pliku-bufora ", która nie jest tym, o co prosiłeś. –

Odpowiedz

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

Możesz być także zainteresowany funkcją symbol-file, który powie Ci absolutną nazwę pliku, w którym określona funkcja lub zmienna została zdefiniowana. Jeśli masz ochotę, możesz sprawdzić zmienną load-in-progress. Jeśli to jest nil, wtedy żadne obciążenie nie jest w toku (i prawdopodobnie jesteś eval 'd w buforze). W takim przypadku możesz wypróbować (buffer-file-name), aby uzyskać nazwę pliku.

+4

Prostsza fantazyjność: '(lub load-file-name (nazwa-pliku-bufora))' – dbr

+0

Awans do 'pliku-symboli', aby umożliwić kod samoodniesienia. Obecnie używasz wariantu na '(defvar my-locn zero) (setq my-locn (plik-symbolu 'my-locn))'. –

+0

@dbr obowiązkowe w obrębie plików pakietu 'require''d, dzięki! – yPhil

Powiązane problemy