【发布时间】:2012-05-19 02:46:46
【问题描述】:
在使用 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"
因为我有指向 C:/home/ngulyamov 的 $HOME$ 环境变量。在这种情况下,上面的函数返回:
"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/".
根据expand-file-name函数说明:
(expand-file-name NAME &optional DEFAULT-DIRECTORY)
将文件名 NAME 转换为绝对文件名,并将其规范化。 如果 NAME 是相对的,第二个参数 DEFAULT-DIRECTORY 是开始的目录 (不以斜线或波浪号开头);如果 DEFAULT-DIRECTORY 为 nil 或缺失, 使用当前缓冲区的“默认目录”值。
Windows 上的路径从不以斜线或波浪线开头。
现在我的问题: 1. expand-file-name 函数在 Windows 上的行为是否正确? 2. 为什么 source-directory 包含开发者路径的值?
我们可以认为扩展文件名在 Windows 上是错误的吗?还是只是在 autoload.el 中使用错误?
提前谢谢你。
【问题讨论】:
-
第一条路径应该以
c:开头吗? -
@phils 嗨,不,它不是以 C 开头的:但一切都很好:
C:\home\ngulyamov>set HOME HOME=C:\home\ngulyamov C:\home\ngulyamov>env | grep HOME HOME=/home/ngulyamov C:\home\ngulyamov>ls /home/ngulyamov ... file list .... -
这显然是某种我以前从未见过的 Windows shell,如果它使用正斜杠,并接受
ls作为命令。 (那是 Windows 7 吗?) -
@phils 不,它只是一个普通的 cmd.exe,我已经安装了 cygwin 并且它的 bin 目录在我的 PATH 中。它是 Windows XP。
-
Emacs 是否配置为与 Cygwin 集成?如果是这样,那可能是一个相关点。