Jalankan perintah saat membuka file tipe file tertentu

14

Saya mencoba untuk mendapatkan skrip lisp untuk menjalankan beberapa perintah untuk saya ketika saya membuka file tipe file tertentu. Saya tahu bahwa saya bekerja di file init yang benar karena jika saya menghapus tema dari itu, emacs tidak memiliki tema ketika saya memulai.

Ini adalah skrip yang saya gunakan yang tidak berfungsi (tidak ada kesalahan atau apa pun):

(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)
SiXoS
sumber
Dalam konteks ini, "memuat" berarti "memuat kode lisp". Saya pikir Anda ingin mencari-file-hook saja (perhatikan bahwa ini tidak dipanggil dengan argumen! Gunakan buffer-file-name saja). Anda juga mungkin ingin menggunakan auto-mode-alist dan menentukan mode utama Anda sendiri.
YoungFrog
3
Sebenarnya, sepertinya Anda menginginkan mode hook.
Dan
Anda belum menemukan masalah karena fungsi Anda tidak berjalan tetapi ketika Anda tahu bahwa hal di atas tidak sah. Tubuh whenpanggilan Anda salah. Panggilan fungsi dua tidak dapat dikelilingi dengan tanda kurung seperti mereka. Perhatikan perbedaan antara kode Anda dan @ sds's
Jordon Biondo

Jawaban:

16

Dalam terminologi Emacs, ini adalah dua langkah yang berbeda:

  • Kaitkan file dengan .tsekstensi dengan mode utama typescript-mode .
  • Jalankan fungsi tss-setup-current-bufferketika mode Typcript dimulai.

Untuk memilih mode utama mana yang akan digunakan untuk nama file tertentu, tambahkan entri ke variabel auto-mode-alist. Masukkan baris berikut dalam file init Anda:

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

\.ts\'adalah ekspresi reguler yang cocok dengan nama file dengan .tsekstensi.

Untuk menjalankan fungsi tss-setup-current-buffersetiap kali mode Typcript dimulai (saya kira Anda ingin menjalankannya bahkan untuk file mode Typcript yang tidak memiliki .tsekstensi), tambahkan ke kait startup mode Typcript .

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

Tergantung pada bagaimana Anda menginstal typescript.eldan tss.el, Anda mungkin juga perlu menyatakan bahwa fungsi typescript-modedan tss-setup-current-bufferharus diambil dari file-file itu. Ini menghindari keharusan memuat typescript.eldan tss.elsegera setelah Emacs mulai: mereka akan dimuat saat diminta, ketika Anda pertama kali membuka .tsfile atau menjalankan typescript-modesecara eksplisit.

(autoload 'typescript-mode "Major mode for typescript files" t)
(autoload 'tss-setup-current-buffer "Set up the current file for TSS" t)
Gilles 'SANGAT berhenti menjadi jahat'
sumber
9

Apa yang Anda cari adalah 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)))
sds
sumber
4
Walaupun itu akan berfungsi, harus ditunjukkan bahwa ini bukan cara yang benar untuk memulai mode utama ketika menemukan file atau untuk mengatur penyesuaian untuk mode utama. The auto-mode-alistharus digunakan untuk menentukan kapan untuk startup naskah-mode, dan typescript-mode-hookharus digunakan untuk menjalankan tss-setup-current-buffer.
Jordon Biondo
Menggunakan (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))dan (add-hook 'typescript-mode-hook 'tss-setup-current-buffer)akan menjadi cara normal untuk melakukannya.
Jordon Biondo