我希望为emacs创建一个自定义配置以用于Erlang工作,我想将我的自定义EDTS repo称为在加载init.el的目录下。现在我有这个:
(add-to-list 'load-path "~/.emacs-edts/edts/")
但我宁愿不对它进行硬编码并通过变量引用它。
连连呢?
答案 0 :(得分:3)
严格来说答案是(file-name-directory user-init-file)
,而是看 C-h v user-emacs-directory
答案 1 :(得分:1)
我的init.el中有以下代码段:
(setq my-init-dir
(file-name-directory
(or load-file-name (buffer-file-name))))
这样做有一个好处,即init.el是否在你的emacs.d目录中。
答案 2 :(得分:0)
我的init文件中有以下内容:
(defun my-file-name-basename (s)
"The directory name, without the final part.
For example:
(my-file-name-basename \"alpha/beta/gamma\") => \"alpha/beta\""
(substring (file-name-directory s) 0 -1))
;; Note: Normally, it's not possible to find out the file a specific
;; function is defined in. However, it's possible to save the file
;; name at the time this file was loaded.
(defvar my-load-file-name load-file-name
"The file name of this file.")
(defun my-start-directory (&optional path)
"The root directory that contains this module.
When PATH is specified, return the start directory concatenated with PATH.
Otherwise return the directory with a trailing slash."
;; Note: Try to figure out where we are, so that we can add the
;; subdirectories. `load-file-name' only works when the file is
;; loaded. Picking up the file from the symbol works when this is
;; evaluated later.
(let ((file-name (or my-load-file-name
(symbol-file 'my-start-directory)
;; Default value. (This is used, for example,
;; when using `eval-buffer' or `eval-region'.)
"~/emacs")))
(let ((start (concat (my-file-name-basename
(my-file-name-basename file-name))
"/")))
(if path
(concat start path)
start))))
除了找出包含上述代码的文件所在的位置(不必是init文件)之外,它还提供了一种基于它创建路径的便捷方法。例如:
(setq custom-file (my-start-directory "init/custom.el"))