Emacs: определить функцию, которая загружает файл, в котором определена сама функция - PullRequest
8 голосов
/ 30 марта 2012

Я немного рефакторинг в моей настройке Emacs и пришел к выводу, что я хочу использовать файл инициализации, отличный от файла по умолчанию.В общем, в моем файле ~ / .emacs у меня есть это:

(load "/some/directory/init.el")

До сих пор это работало просто отлично.Однако теперь я хочу переопределить старую команду, которую я использовал целую вечность, которая открывает мой файл инициализации:

(defun conf ()
  "Open a buffer with the user init file."
  (interactive)
  (find-file user-init-file))

Как вы можете видеть, это откроет ~ / .emacs независимо от того, что я делаю,Я хочу, чтобы он открывал /some/directory/init.el или там, где определена сама команда conf.

Как мне это сделать?

Ответы [ 3 ]

6 голосов
/ 30 марта 2012

Вы можете использовать find-function для этого:

(defun conf ()
  "Open a buffer with the user init file."
  (interactive)
  (find-function this-command))
3 голосов
/ 31 марта 2012

Вы также можете использовать хитрый способ:

(defun conf () "blabla" (интерактивный) (find-file # $))

Поскольку # $ работает немного как __FILE__ в C: оно заменяется именем файла при чтении файла.

0 голосов
/ 01 апреля 2012

Это работает для меня.

;;; mymodule.el --- does my thing

(defvar mymodule--load-path nil  "load path of the module")

   ...

(defun mymodule-load-datafile () 
  "load a data file from the directory in which the .el resides"
  (let* ((dir-name (concat
                        (file-name-directory mymodule--load-path)))
         (data-file-name (concat dir-name "datafile.csv")))
    (if (file-exists-p  data-file-name) 
         ... )))

;; remember load time path
(setq mymodule--load-path load-file-name)

(provide 'mymodule)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...