在使用el-get安装最后一个cedet期间,我在窗口上遇到了展开文件名函数的奇怪行为。这个问题与自动加载的产生有关。Windows上的Emacs elisp展开文件名行为
去年的emacs的autoload.el 50年1月24日包含以下功能:
(defun autoload-generated-file()
(expand-file-name generated-autoload-file
;; File-local settings of generated-autoload-file should
;; be interpreted relative to the file's location,
;; of course.
(if (not (local-variable-p 'generated-autoload-file))
(expand-file-name "lisp" source-directory))))
在我的情况下产生的,自动加载的文件是:
"/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/srecode/loaddefs.el"
,因为我有$ HOME $环境指向C:/ home/ngulyamov的变量。在这种情况下,上面的函数返回:
"d:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/srecode/loaddefs.el"
由于源目录包含:
"d:/devel/emacs/emacs-bzr/trunk_jenkins/".
正如你可以看到它的变化盘符从C:到d :. 同时对emacs的23.3这个函数返回半正确的值作为源目录中包含的值:
"c:/Users/Sean/Downloads/emacs-23.3/".
据扩展文件名功能描述:
(扩大 - 文件 - 名称name &可选默认目录)
转换的文件名NAME绝对和规范化它。 第二ARG DEFAULT-目录是目录开始与如果名称是相 (不与斜线或波浪线启动);如果DEFAULT-DIRECTORY为零或缺失,则使用 当前缓冲区的'default-directory'值。
Windows上的路径永远不会从斜线或波浪线开始。
现在我的问题:1。 不扩大文件名称在Windows功能的行为是否正确? 2.为什么source-directory包含开发者路径的值?
我们可以考虑扩展文件名称作为在Windows上的越野车吗?或者它只是在autoload.el中被错误地使用?
预先感谢您。
第一个路径应该以'c:'开头吗? – phils
@phils 嗨,不,它并不以C开始:但一切工作相当不错: 'C:\家\ ngulyamov>设为首页 HOME = C:\家\ ngulyamov C:\家\ ngulyamov> env | grep的HOME HOME = /家庭/ ngulyamov C:\家\ ngulyamov> LS /家庭/ ngulyamov ...文件列表....' –
这显然是某种Windows外壳程序的我从来没有见过的,如果它使用正斜杠,并接受'ls'作为命令。 (是Windows 7吗?) – phils