2012-05-10 26 views
5

在使用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中被错误地使用?

预先感谢您。

+0

第一个路径应该以'c:'开头吗? – phils

+0

@phils 嗨,不,它并不以C开始:但一切工作相当不错: 'C:\家\ ngulyamov>设为首页 HOME = C:\家\ ngulyamov C:\家\ ngulyamov> env | grep的HOME HOME = /家庭/ ngulyamov C:\家\ ngulyamov> LS /家庭/ ngulyamov ...文件列表....' –

+0

这显然是某种Windows外壳程序的我从来没有见过的,如果它使用正斜杠,并接受'ls'作为命令。 (是Windows 7吗?) – phils

回答

2

最后我找出原因。这个问题来自使用make 3.8的$(abspath)功能的cedet的Makefile。在这种情况下,make的cygwin版本返回UNIX路径的路径,即/ home/ngulyamov/...,然后由d:/ home/ngulyamov/...在自动载入中通过源目录root进行替换。make的GnuWin32版本工作正常但奇怪的原因,我有以下问题:

C:\home\ngulyamov\.emacs.d\el-get\cedet>\gnuwin32\bin\make all 
Removing loaddefs.el files from subprojects. 
Generating autoloads. 
make[1]: Entering directory `C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet' 
    > autoloads 
Wrote C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/loaddefs.el 
Loading vc-bzr... 
Generating autoloads for C:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/cedet-android.el... 
Memory exhausted--use C-x s then exit and restart Emacs 
make[1]: *** [autoloads] Error 127 

这么脏修补程序指定的源目录中autoload.el本身喜欢:

(setq-default source-directory "C:/home/ngulyamov/.emacs.d/") 

不管怎样,为什么源目录指向开发人员的计算机路径保持打开。