2010-06-10 37 views
6

Tôi không chắc liệu việc sử dụng apply có được đề xuất ở đây hay không. Có một giải pháp tốt hơn/tiêu chuẩn để thiết lập chế độ chính động? Tôi không thể tìm thấy bất kỳ khác.Sử dụng đúng cách áp dụng trong Emacs Lisp?

Bối cảnh:

Bất cứ khi nào tôi nhận được thông

X has auto save data; consider M-x recover-this-file

trong Emacs, tôi tự hỏi những gì là sự khác biệt giữa các tập tin hiện tại và phiên bản tự động lưu lại được. Vì hầu hết thời gian tôi không thể bị làm phiền để tìm nó lên, tôi đã cố gắng để tự động hóa các nhiệm vụ:

(defun ediff-auto-save() 
    "Ediff current file and its auto-save pendant." 
    (interactive) 
    (let ((auto-file-name (make-auto-save-file-name)) 
     (file-major-mode major-mode)) 
    (ediff-files buffer-file-name auto-file-name) 
    (switch-to-buffer-other-window (file-name-nondirectory auto-file-name)) 
    (apply file-major-mode '()) 
    (other-window 1))) ;; back to ediff panel 

Mã này làm những gì tôi muốn, nó sẽ mở ra các tập tin tự động lưu lại và bắt đầu ediff. Tôi cũng đặt chế độ chính của tệp tự động lưu thành chế độ chính của tệp gốc cho khóa phông chữ nhất quán.

+0

Đây là một phần rất tiện dụng, bất kể 'áp dụng' là lựa chọn đúng đắn. – Anne

Trả lời

5

Trong khi áp dụng chắc chắn có thể được sử dụng cho điều này, funcall có thể phù hợp hơn

(funcall file-major-mode) 

nó khác với áp dụng ở chỗ nó không có một danh sách các đối số, chỉ cần các đối số. Cả hai điều sau đều tương đương:

(funcall '+ 1 2) 
(apply '+ '(1 2)) 
+0

Cảm ơn, đó là một điểm tốt. Với funcall tôi không phải thêm danh sách trống đó làm đối số. Trông đẹp hơn. – lmichelbacher

2

Có vẻ ổn với tôi - đó là những gì áp dụng cho.

Bên cạnh đó, bạn tự nói: mã thực hiện những gì bạn muốn! :-)

+0

OK cảm ơn. Chỉ cần phấn đấu hướng tới sự hoàn hảo, đó là tất cả;). – lmichelbacher

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