gpt4 book ai didi

Windows 上的 Emacs elisp 扩展文件名行为

转载 作者:行者123 更新时间:2023-12-04 21:21:52 28 4
gpt4 key购买 nike

在使用 el-get 安装最后一个 cedet 期间,我在 windows 上遇到了 expand-file-name 函数的奇怪行为。该问题与自动加载的生成有关。

最后一个 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 上,这个函数返回半正确的值,因为 source-directory 包含值:
"c:/Users/Sean/Downloads/emacs-23.3/".

根据 expand-file-name 函数描述:

(扩展文件名名称和可选的默认目录)

将文件名 NAME 转换为绝对名称,并将其规范化。
如果 NAME 是相对的,则第二个参数 DEFAULT-DIRECTORY 是开始的目录
(不以斜杠或波浪号开头);如果 DEFAULT-DIRECTORY 为零或缺失,
使用当前缓冲区的“default-directory”值。

Windows 上的路径从不以斜杠或波浪号开头。

现在我的问题:
1. 在 Windows 上,expand-file-name 函数行为是否正确?
2. 为什么 source-directory 包含开发者路径的值?

我们可以将扩展文件名视为 Windows 上的错误吗?还是只是在 autoload.el 中错误地使用了它?

先感谢您。

最佳答案

最后我想出了原因。问题来自使用 make 3.8 的 $(abspath) 功能的 cedet 的 Makefile。在这种情况下,cygwin 版本的 make 返回 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/")

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

关于Windows 上的 Emacs elisp 扩展文件名行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10535529/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com