Belirli bir dosya türünün dosyasını açarken komutu çalıştır


14

Belirli bir dosya türünde bir dosyayı açtığımda benim için bazı komutları çalıştırmak için bir lisp komut dosyası almaya çalışıyorum. Temayı ondan kaldırırsam, başlattığımda emacs'ın hiçbir teması olmadığından doğru init dosyasında çalıştığımı biliyorum.

Bu benim çalışmayan komut dosyası değil (hata veya herhangi bir şey):

(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)

Bu bağlamda, "load", "lisp kodu olarak yükle" anlamına gelir. Bunun yerine find-file-hook istediğinizi düşünüyorum (bunların bir argüman ile çağrılmadığını unutmayın! Bunun yerine buffer-dosya-adını kullanın). Ayrıca otomatik mod-listeyi kullanmak ve kendi ana modunuzu tanımlamak isteyebilirsiniz.
YoungFrog

3
Aslında, bir mod kancası istediğiniz gibi görünüyor.
Dan

Sorunu henüz etkilemediniz çünkü işleviniz çalışmıyor, ancak ne zaman yukarıdakinin geçerli lisp olmadığını biliyorsunuz. whenAramanızın gövdesi yanlış biçimlendirilmiş. İki işlev çağrısı olduğu gibi parantez içine alınamaz. Kodunuz ve @ sds's arasındaki farkı not edin
Jordon Biondo

Yanıtlar:


16

Emacs terminolojisinde bunlar iki farklı adımdır:

  • Dosyaları ana mod.ts ile uzantıyla ilişkilendirin . typescript-mode
  • tss-setup-current-bufferDaktilo Yazısı modu başladığında işlevi çalıştırın .

Belirli dosya adları için hangi ana modu kullanacağınızı seçmek için, değişkene bir girdi ekleyin auto-mode-alist. Aşağıdaki satırı init dosyanıza koyun:

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

\.ts\'dosya adlarıyla .tsuzantıyla eşleşen normal bir ifadedir .

tss-setup-current-bufferDizgi modu her başlatıldığında işlevi çalıştırmak için ( .tsuzantıya sahip olmayan Dizgi modu dosyaları için bile çalıştırmak istediğinizi varsayalım ), dizgisi modu başlangıç kancasına ekleyin .

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

Eğer yüklü biçimine bağlı olarak typescript.elve tss.el, ayrıca fonksiyonlar beyan gerekebilir typescript-modeve tss-setup-current-bufferbu dosyaların yüklenmesi gerekir. Bu yükleme yapmaktan kaçınır typescript.elve tss.elEmacs başlar başlamaz: bir .tsdosyayı ilk açtığınızda veya typescript-modeaçıkça çalıştırdığınızda istek üzerine yüklenir .

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

9

Aradığın şey 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
Bu işe yarayacak olsa da, bunun bir dosya bulurken büyük modları başlatmanın veya büyük mod için özelleştirmeleri ayarlamanın doğru yolu olmadığı belirtilmelidir. auto-mode-alistTypescript-mode başlangıç zamanını belirlemek için kullanılması gerektiğini ve typescript-mode-hookçalıştırmak için kullanılmalıdır tss-setup-current-buffer.
Jordon Biondo

Kullanmak (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))ve (add-hook 'typescript-mode-hook 'tss-setup-current-buffer)bunu yapmanın normal yolu olurdu.
Jordon Biondo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.