Chạy lệnh khi mở tệp của một kiểu tệp cụ thể


14

Tôi đang cố gắng để có được một tập lệnh lisp để chạy một số lệnh cho tôi khi tôi mở một tệp của một kiểu tệp cụ thể. Tôi biết rằng tôi đang làm việc trong tệp init chính xác bởi vì nếu tôi xóa chủ đề khỏi nó, emacs không có chủ đề khi tôi khởi động nó.

Đây là tập lệnh tôi đang sử dụng không hoạt động (không có lỗi hoặc bất cứ điều gì):

(defun my-project-hook (filename)
  (when (string= (file-name-extension filename) "ts")
    ((typescript-mode)
     (tss-setup-current-buffer))
  ) 
)

(add-hook 'after-load-functions 'my-project-hook)

Trong ngữ cảnh này, "tải" có nghĩa là "tải dưới dạng mã lisp". Tôi nghĩ rằng bạn muốn find-file-hook thay vào đó (lưu ý rằng những cái này không được gọi với một đối số! Thay vào đó hãy sử dụng tên tệp đệm). Bạn cũng có thể muốn sử dụng chế độ tự động chế độ và xác định chế độ chính của riêng bạn.
YoungFrog

3
Trên thực tế, có vẻ như bạn muốn một cái móc chế độ.
Dân

Bạn chưa gặp phải vấn đề nào vì chức năng của bạn không chạy nhưng khi bạn biết rằng những điều trên không hợp lệ. Cơ thể của whencuộc gọi của bạn là không đúng. Hai lệnh gọi hàm không thể được bao quanh bằng dấu ngoặc đơn giống như chúng. Lưu ý sự khác biệt giữa mã của bạn và @ sds's
Jordon Biondo

Câu trả lời:


16

Trong thuật ngữ Emacs, đây là hai bước khác nhau:

  • Liên kết các tệp với .tsphần mở rộng với chế độ chính typescript-mode .
  • Chạy chức năng tss-setup-current-bufferkhi chế độ Typecript bắt đầu.

Để chọn chế độ chính nào được sử dụng cho tên tệp nhất định, hãy thêm một mục vào biến auto-mode-alist. Đặt dòng sau vào tệp init của bạn:

(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))

\.ts\'là một biểu thức chính quy khớp với tên tệp với .tsphần mở rộng.

Để chạy chức năng tss-setup-current-bufferbất cứ khi nào chế độ Bản mô tả bắt đầu (Tôi cho rằng bạn muốn chạy nó ngay cả đối với các tệp chế độ Bản ghi không có .tsphần mở rộng), hãy thêm nó vào móc khởi động chế độ Bản ghi .

(add-hook 'typescript-mode-hook 'tss-setup-current-buffer)

Tùy thuộc vào cách bạn cài đặt typescript.eltss.el, bạn cũng có thể cần phải khai báo rằng các chức năng typescript-modetss-setup-current-bufferphải được tải từ các tệp đó. Điều này tránh phải tải typescript.eltss.elngay khi Emacs bắt đầu: chúng sẽ được tải theo yêu cầu, khi bạn lần đầu mở .tstệp hoặc chạy typescript-modemột cách rõ ràng.

(autoload 'typescript-mode "Major mode for typescript files" t)
(autoload 'tss-setup-current-buffer "Set up the current file for TSS" t)

9

Những gì bạn đang tìm kiếm là find-file-hook:

(add-hook 'find-file-hook 'my-project-hook)
(defun my-project-hook ()
  (when (string= (file-name-extension buffer-file-name) "ts")
    (typescript-mode)
    (tss-setup-current-buffer)))

4
Mặc dù điều đó sẽ hoạt động, nhưng cần phải chỉ ra rằng đây không phải là cách chính xác để khởi động các chế độ chính khi tìm tệp hoặc để thiết lập các tùy chỉnh cho chế độ chính. Các auto-mode-alistnên được sử dụng để xác định khi nào khởi động nguyên cảo-mode, và typescript-mode-hooknên được sử dụng để chạy tss-setup-current-buffer.
Jordon Biondo

Sử dụng (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))(add-hook 'typescript-mode-hook 'tss-setup-current-buffer)sẽ là cách bình thường để làm điều đó.
Jordon Biondo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.