2012-02-25 36 views
5

EDIT: Nó chỉ ra rằng chỉnh sửa thứ hai cho tệp .emacs của tôi thực sự hoạt động. (Xem các ý kiến ​​bên dưới mục nhập này.)emacs: mở tất cả các tệp .txt trong một thư mục cụ thể trong một chế độ chính cụ thể

Tôi đã thử thêm một vài tệp .emac để làm cho tất cả các tệp txt được mở trong các emac sử dụng orgmode. Họ không làm việc. Làm thế nào tôi có thể làm cho nó xảy ra?

;;SET EMACS AS DEFAULT MAJOR MODE TO FOR ALL FILES WITH AN UNSPECIFIED MODE 
(setq default-major-mode 'org-mode) 

;;OPEN ALL TXT FILES IN ORGMODE 
(add-to-list 'auto-mode-alist '("\\.txt$" . org-mode)) 

Ngoài ra:

Nó sẽ là tốt hơn để mở chỉ txt tập tin trong một thư mục nhất định orgmode. Bất kỳ gợi ý nào về cách thực hiện điều đó cũng sẽ được đánh giá cao.

+1

Mã của bạn nên mở file txt trong chế độ org. Ít nhất, nó làm việc cho tôi. Kiểm tra tệp .emacs của bạn nếu bạn không sửa đổi một chế độ cho các tệp txt sau này. –

+0

Tôi không phải là một .emacs rất ngắn gây ra tôi mới với nó. Nhưng tôi chỉ nhận ra rằng bây giờ tôi nhận được thông báo này mỗi khi tôi bắt đầu emacs: "Cảnh báo (khởi tạo): Đã xảy ra lỗi khi tải' /Users/Klsrd/.emacs ': Kết thúc tệp trong khi phân tích cú pháp:/Users/Klsrd /. emacs Để đảm bảo hoạt động bình thường, bạn nên điều tra và loại bỏ nguyên nhân của lỗi trong tập tin khởi tạo của bạn Bắt đầu Emacs với tùy chọn '--debug-init 'để xem một lỗi hoàn toàn ngược."Có thể đó là nguyên nhân? –

+1

Có điều gì đó không ổn với các .emacs của bạn. Hãy xóa mọi thứ khỏi nó và đặt chỉ (tự động chế độ tự động thêm" vào danh sách "(" \\. Txt $ ". Org-mode)) để xem nếu nó hoạt động –

Trả lời

2

Bạn có thể thực hiện một cái móc mà xác minh thư mục tập tin và sửa đổi chế độ đệm:

(add-hook 'find-file-hooks 
      (lambda() 
      (let ((file (buffer-file-name))) 
       (when (and file (equal (file-name-directory file) "c:/temp/")) 
       (org-mode))))) 

Là một thay thế, bạn có thể thêm dòng chế độ vào đầu của tập tin văn bản của bạn. Trong trường hợp này emacs sẽ thiết lập chế độ được chỉ định.

; -*- mode: org;-*- 
* header 1 
** header 2 
+0

Bạn không cần một; trước khi '- * - chế độ: org - * -' – Tom

3

Các regex trong auto-mode-alist có thể là một cái gì đó phức tạp hơn, như "^/path/to/.*\\.txt$"

4

Một cách khác để làm điều này là sử dụng các biến thư mục địa phương. Điều này là tốt đẹp bởi vì bạn có thể đặt một tập tin trong bất kỳ thư mục mà bạn muốn hành vi này để tham gia, và nó hoạt động đệ quy trong bất kỳ thư mục con.

Tạo tệp có tên .dir-locals.el trong thư mục mong muốn.

Dưới đây là các nội dung:

((nil (eval . (if (string-match ".txt$" (buffer-file-name))(org-mode))))) 

đọc này như sau: đối với bất kỳ chính-mode (nil), eval uate các hình thức sau đây:

(if .... (org-mode)) 
0

tôi dán lại với nhau một số mã từ Oleg Câu trả lời của Pavliv tại đây và từ yibe's tại số elisp - File extension hook in Emacs - Stack Overflow

(defun use-org-mode-for-dot-txt-files-in-owncloud() 
    (when (and (string-match owncloud buffer-file-name) 
      (string-match "\\.txt\\'" buffer-file-name)) 
    (org-mode))) 
(add-hook 'find-file-hook 'use-org-mode-for-dot-txt-files-in-owncloud) 

Bằng cách này, mặc dù các ứng dụng web và điện thoại của OwnCloud hiện chỉ thân thiện với các tệp .txt, từ máy tính của tôi, tôi có thể sử dụng chế độ Org 'Org-mode cho chúng.

(Nếu tôi đặt tất cả .txt file để sử dụng Org-mode, nó phá vỡ todotxt-mode.)

(Lưu ý rằng owncloud là một chuỗi biến bằng con đường ownCloud của tôi.)

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