Emacs elisp在windows上展开文件名行为

Emacs elisp在windows上展开文件名行为,emacs,elisp,Emacs,Elisp,在使用el get安装上一个cedet时,我在windows上遇到了扩展文件名函数的奇怪行为。这个问题与自动加载的生成有关 最后一个emacs 24.1.50上的autoload.el包含以下功能: (defun autoload-generated-file () (expand-file-name generated-autoload-file ;; File-local settings of generated-autoload-file should

在使用el get安装上一个cedet时,我在windows上遇到了扩展文件名函数的奇怪行为。这个问题与自动加载的生成有关

最后一个emacs 24.1.50上的autoload.el包含以下功能:

(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/".
根据展开文件名功能描述:

(展开文件名和可选默认目录)

将文件名转换为绝对文件名,并将其规范化。 如果名称是相对的,则第二个参数DEFAULT-DIRECTORY是起始目录 (不以斜线或平铺开头);如果DEFAULT-DIRECTORY为nil或缺失, 使用当前缓冲区的“默认目录”值。

Windows上的路径从不从斜线或平铺开始

现在我的问题是: 1.扩展文件名函数在Windows上的行为是否正确? 2.为什么源目录包含开发人员路径的值

可以考虑在Windows上扩展文件名为BUGGY吗?或者它只是在autoload.el中被错误地使用了


提前谢谢你。

我终于找到了原因。问题来自cedet的Makefile,它使用Make3.8的$(abspath)功能。在本例中,make的cygwin版本返回UNIX路径,即/home/ngulyamov/。。。然后自动加载中的源目录根替换为d:/home/ngulyamov/。。。。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/")

无论如何,为什么源目录指向开发人员的计算机路径仍然是开放的。

第一个路径应该以
c:
?@phils嗨,不,它不是以C开头的,但一切都很好:
C:\home\ngulyamov>set home home=C:\home\ngulyamov C:\home\ngulyamov>env | grep home=/home/ngulyamov C:\home\ngulyamov>ls/home/ngulyamov。。。文件列表…
这显然是我以前从未见过的某种Windows shell,如果它使用正向斜杠,并接受
ls
作为命令。(那是Windows 7吗?@phils不,它只是一个普通的cmd.exe,我已经安装了cygwin,它的bin目录在我的路径中。它是Windows XP。Emacs是否配置为与Cygwin集成?如果是这样,这可能是一个相关的问题。