Eseguire il comando quando si apre un file di un tipo di file specifico


14

Sto cercando di ottenere uno script lisp per eseguire alcuni comandi per me quando apro un file di un tipo di file specifico. So che sto lavorando nel file init corretto perché se rimuovo il tema da esso, emacs non ha tema quando lo avvio.

Questo è lo script che sto usando che non funziona (nessun errore o altro):

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

In questo contesto, "carica" ​​significa "carica come codice lisp". Penso invece che tu voglia trovare find-file-hook (nota che questi non sono chiamati con un argomento! Usa invece buffer-file-name). È inoltre possibile utilizzare la modalità automatica-alist e definire la propria modalità principale.
YoungFrog,

3
In realtà, sembra che tu voglia un hook di modalità.
Dan

Non hai ancora riscontrato il problema perché la tua funzione non viene eseguita ma quando lo sai che quanto sopra non è valido lisp. Il corpo della whenchiamata non è valido. Le due chiamate di funzione non possono essere racchiuse tra parentesi come sono. Nota la differenza tra il tuo codice e @ sds's
Jordon Biondo,

Risposte:


16

Nella terminologia di Emacs, ci sono due diversi passaggi:

  • Associa i file con l' .tsestensione alla modalità principale typescript-mode .
  • Esegui la funzione tss-setup-current-bufferall'avvio della modalità Typescript.

Per scegliere quale modalità principale utilizzare per determinati nomi di file, aggiungere una voce alla variabile auto-mode-alist. Inserisci la seguente riga nel tuo file init:

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

\.ts\'è un'espressione regolare che corrisponde ai nomi dei file con l' .tsestensione.

Per eseguire la funzione tss-setup-current-bufferogni volta che si avvia la modalità Typescript (suppongo che si desideri eseguirla anche per i file della modalità Typescript che non hanno l' .tsestensione), aggiungerlo al gancio di avvio della modalità Typescript .

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

A seconda di come è stato installato typescript.ele tss.el, potrebbe anche essere necessario dichiarare che le funzioni typescript-modee che tss-setup-current-bufferdevono essere caricate da quei file. Questo evita di dover caricare typescript.ele tss.elnon appena si avvia Emacs: verranno caricati su richiesta, quando si apre per la prima volta un .tsfile o si esegue typescript-modeesplicitamente.

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

9

Quello che stai cercando è 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
Anche se funzionerà, è opportuno sottolineare che questo non è il modo corretto di avviare le principali modalità quando si trova un file o di impostare personalizzazioni per la modalità principale. Il auto-mode-alistdovrebbe essere usato per determinare quando per l'avvio dattiloscritto-mode, e una typescript-mode-hookdovrebbero essere utilizzati per l'esecuzione tss-setup-current-buffer.
Jordon Biondo,

Utilizzando (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))e (add-hook 'typescript-mode-hook 'tss-setup-current-buffer)sarebbe il modo normale di farlo.
Jordon Biondo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.