2010-01-21 49 views
16

Từ tài liệu hướng dẫn tôi có thể thấy tôi có thể truy cập đối số dòng lệnh (command-line-args). Tôi muốn thêm đối số của riêng mình nhưng Emacs than phiền khi khởi động nó không nhận ra chúng.Đối số dòng lệnh tùy chỉnh Emacs

Ví dụ:

emacs -my_argument 

tôi nhận được:

 
command-line-1: Unknown option `-my_argument' 

một cách thích hợp để xác định đối số tùy chỉnh của tôi và cung cấp thông tin cho phiên Emacs của tôi là gì? Có cách nào để bật một đối số từ một dòng lệnh không?

Trả lời

26

Thêm một cái gì đó như thế này để bạn ~/.emacs, ~/.emacs.el, hoặc ~/.emacs.d/init.el file:

(defun my-argument-fn (switch) 
    (message "i was passed -my_argument")) 

(add-to-list 'command-switch-alist '("-my_argument" . my-argument-fn)) 

Sau đó, bạn có thể thực hiện emacs -my_argument và nó nên in i was passed -my_argument để minibuffer. Bạn có thể tìm thêm thông tin trong số GNU elisp reference.

8

Như đã nêu trong bài đăng khác, bạn có thể thêm công tắc tùy chỉnh của mình vào command-switch-alist và emacs sẽ gọi hàm xử lý cho bất kỳ chuyển đổi phù hợp nào được chuyển vào dòng lệnh. Tuy nhiên, thao tác này được thực hiện sau khi tệp .emacs của bạn được đánh giá. Điều này là tốt cho hầu hết các trường hợp nhưng bạn có thể muốn đối số dòng lệnh thay đổi đường dẫn thực hiện hoặc hành vi của việc đánh giá .emacs của bạn; Tôi thường làm điều này để kích hoạt/vô hiệu hóa các khối cấu hình (chủ yếu để gỡ lỗi).

Để đạt được điều này, bạn có thể đọc command-line-args và kiểm tra công tắc của mình theo cách thủ công và sau đó xóa nó khỏi danh sách, điều này sẽ ngừng emacs phàn nàn về một đối số không xác định.

(setq my-switch-found (member "-myswitch" command-line-args)) 
(setq command-line-args (delete "-myswitch" command-line-args)) 

Mà có thể làm thay đổi đánh giá .emacs bạn như vậy:

(unless my-switch-found 
    (message "Didn't find inhibit switch, loading some config.") 
    ...) 

Và bạn có thể xây dựng này thành một bước duy nhất:

;; This was written in SO text-box, not been tested. 
(defun found-custom-arg (switch) 
    (let ((found-switch (member switch command-line-args))) 
    (setq command-line-args (delete switch command-line-args)) 
    found-switch)) 

(unless (found-custom-arg "-myswitch") 
    (message "Loading config...") 
    ...) 
+0

kiểm tra mã đánh dấu "không được thử nghiệm". Nó hoạt động chính xác như mô tả. –

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