2008-12-09 25 views
9

Tôi muốn bộ đệm emacs của tôi có tên khác với tên tệp. Thay vì thiết lập này một cách thủ mọi thời gian, tôi muốn có điều này xảy ra tự động dựa trên nội dung tập tin, một cái gì đó như:Làm cách nào để đặt tên bộ đệm Emacs bằng biến cục bộ của tệp?

// Biến địa phương:
// đệm tên: Myname
// End:

Nhưng điều này không hoạt động vì tên đệm là một hàm, không phải là một biến. Tôi có thể làm cái này như thế nào?

Trả lời

12

Bạn có thể nói:

// Local Variables: 
// eval: (rename-buffer "my-buffer-name-here") 
// end: 

Đây là một thủ thuật mặc dù.

Nếu không, bạn có thể lập trình móc find-file-hook trong .emacs đổi tên bộ đệm thành nội dung biến cục bộ cụ thể. Một cái gì đó như:

(defvar pdp-buffer-name nil) 

(defun pdp-rename-buffer-if-necessary() 
    "Rename the current buffer according to the value of variable" 
    (interactive) 
    (if (and pdp-buffer-name (stringp pdp-buffer-name)) 
     (rename-buffer pdp-buffer-name))) 

(add-hook 'find-file-hook 'pdp-rename-buffer-if-necessary) 

Sau đó, trong tập tin cụ thể của bạn, bạn có

// Local Variables: 
// pdp-buffer-name: "pierre" 
// end: 

Với sức mạnh não nhiều hơn bạn có thể có một giải pháp đẹp hơn.

Lưu ý rằng có thể đã tồn tại một tiện ích mở rộng cho nhu cầu của bạn. Nhìn vào Emacs wiki.

+0

Tôi đoán Emacs sẽ cảnh báo về "eval" mỗi lần, nhưng ý tưởng hay! – ShreevatsaR

+0

Có, phải cảnh báo về "eval" mỗi lần. Sau đó bạn có thể đặt biến "enable-local-variable" thành t nếu nó làm phiền bạn. Nó không phải là an toàn mặc dù ... – Pierre

3

Cảm ơn Pierre. Ví dụ điển hình về pdp-buffer-name của bạn hoạt động rất tốt.

Tôi đã thực hiện một cải tiến vì tôi nhận thấy các emacs đang xử lý biến cục bộ là "không an toàn" tức là luôn nhắc hỏi xem giá trị có nên được áp dụng hay không. Vì tôi muốn điều này làm việc với nhiều giá trị khác nhau mà không làm lộn xộn các .emac của tôi với một danh sách các giá trị "an toàn", tôi đã thêm một lời khuyên. Với danh pháp của ví dụ trước, có vẻ như sau:

;; allow all values for "pdp-buffer-name" 
(defadvice safe-local-variable-p (after allow-pdp-buffer-name (sym val) activate) 
    (if (eq sym 'pdp-buffer-name)  
     (setq ad-return-value t)) 
) 
+0

Điều này nên hoàn thành giải pháp chắc chắn. Tốt đẹp ! – Pierre

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