2012-05-10 37 views
5

Tôi gặp phải hành vi lạ của chức năng mở rộng tên tập tin trên các cửa sổ trong khi cài đặt cedet cuối cùng bằng cách sử dụng el-get. Vấn đề liên quan đến việc tạo tự động tải.Emacs elisp hành vi mở rộng tên tệp trên windows

Các autoload.el trên emacs cuối 24.1.50 chứa các chức năng sau:

(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)))) 

Trong trường hợp phát sinh-tự động load file của tôi là:

"/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/srecode/loaddefs.el" 

như tôi có $ HOME $ môi trường biến được trỏ tới C:/home/ngulyamov. Trong trường hợp này trên hàm trả về:

"d:/home/ngulyamov/.emacs.d/el-get/cedet/lisp/cedet/srecode/loaddefs.el" 

do nguồn thư mục chứa:

"d:/devel/emacs/emacs-bzr/trunk_jenkins/". 

Như bạn có thể thấy nó thay đổi ký tự ổ đĩa từ C: đến D :. Đồng thời trên emacs 23,3 hàm này trả về bán đúng giá trị như là nguồn thư mục chứa giá trị:

"c:/Users/Sean/Downloads/emacs-23.3/". 

Theo mở rộng-file-tên hàm mô tả:

(mở rộng-File- tên NAME & tùy chọn DEFAULT-DIRECTORY)

Chuyển đổi tên tệp NAME thành tuyệt đối và chuẩn hóa nó. Thứ hai arg DEFAULT-DIRECTORY là thư mục để bắt đầu nếu NAME là tương đối (không bắt đầu bằng dấu gạch chéo hoặc dấu ngã); nếu DEFAULT-DIRECTORY là không có hoặc không có, giá trị bộ đệm hiện tại của `thư mục mặc định 'được sử dụng.

Đường dẫn trên Windows không bao giờ bắt đầu từ dấu gạch chéo hoặc dấu ngã.

Hiện câu hỏi của tôi: 1. Hành vi chức năng mở rộng tên tệp có chính xác trên Windows không? 2. Tại sao thư mục nguồn chứa giá trị của đường dẫn của nhà phát triển?

Chúng tôi có thể xem xét tên tệp mở rộng làm lỗi trên cửa sổ không? Hoặc nó chỉ được sử dụng sai trong autoload.el?

Cảm ơn bạn trước.

+0

Đường dẫn đầu tiên đó có bắt đầu bằng 'c:' không? – phils

+0

@phils Hi, không, nó không bắt đầu bằng C: nhưng mọi thứ hoạt động khá tốt: 'C: \ home \ ngulyamov> thiết CHỦ HOME = C: \ home \ ngulyamov C: \ nhà \ ngulyamov> env | grep HOME HOME =/home/ngulyamov C: \ home \ ngulyamov> ls/home/ngulyamov ... danh sách tệp .... ' –

+0

Đây rõ ràng là một loại vỏ Windows mà tôi chưa bao giờ thấy trước đây, nếu nó sử dụng dấu gạch chéo ở phía trước và chấp nhận 'ls' làm lệnh. (Có phải là Windows 7?) – phils

Trả lời

2

Cuối cùng tôi đã tìm ra lý do. Vấn đề này đến từ Makefile của cedet, sử dụng chức năng $ (abspath) để tạo 3.8. Phiên bản Cygwin thực hiện trong trường hợp này trả về đường dẫn UNIX, tức là/home/ngulyamov/... mà sau đó thay thế bằng thư mục gốc nguồn trong autoload bởi d:/home/ngulyamov/.... Phiên bản GnuWin32 của make công trình một cách chính xác nhưng vì lý do kỳ lạ tôi có vấn đề sau đây:

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 

sửa chữa Vì vậy, bẩn được quy định cụ thể nguồn thư mục trong autoload.el thân thích:

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

Dù sao, tại sao nguồn thư mục trỏ đến đường dẫn máy tính của nhà phát triển vẫn còn mở.

Các vấn đề liên quan