特定のファイルタイプのファイルを開くときにコマンドを実行する


14

特定のファイルタイプのファイルを開いたときに、いくつかのコマンドを実行するLispスクリプトを取得しようとしています。テーマを削除すると、起動時にemacsにテーマがないため、正しいinitファイルで作業していることがわかります。

これは私が使用しているスクリプトで、動作しません(エラーも何もありません):

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

このコンテキストでは、「ロード」は「Lispコードとしてロード」を意味します。代わりにfind-file-hookが必要だと思います(これらは引数で呼び出されないことに注意してください!代わりにbuffer-file-nameを使用してください)。auto-mode-alistを使用して、独自のメジャーモードを定義することもできます。
YoungFrog

3
実際には、モードフックが必要なようです。
ダン

関数は実行されないため、まだ問題は発生していませんが、その場合、上記が有効なlispではないことがわかります。when通話の本文の形式が正しくありません。2つの関数呼び出しは、括弧で囲むことはできません。コードと@sdsの違いに注意してください
ドン

回答:


16

Emacsの用語では、これらは2つの異なるステップです。

特定のファイル名に使用するメジャーモードを選択するには、変数にエントリを追加しますauto-mode-alist。initファイルに次の行を追加します。

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

\.ts\'は、.ts拡張子を持つファイル名と一致する正規表現です。

tss-setup-current-bufferTypescriptモードが開始するたびに関数を実行するには(.ts拡張子のないTypescriptモードファイルに対しても実行することを想定しています)、Typescriptモードの起動フックに追加します。

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

あなたはインストール方法に応じてtypescript.eltss.el、あなたも機能することを宣言する必要があるかもしれないtypescript-modeとは、tss-setup-current-bufferそれらのファイルからロードする必要があります。このことを回避するには、ロードする必要typescript.eltss.elEmacsが起動するとすぐに:彼らはオンデマンドでロードされます、あなたが最初に開いたときに.tsファイルを実行するか、typescript-mode明示的に。

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

9

あなたが探しているのは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
これは機能しますが、ファイルを見つけるときにメジャーモードを起動したり、メジャーモードのカスタマイズをセットアップしたりするのは正しい方法ではないことを指摘しておく必要があります。をauto-mode-alist使用してtypescript-modeを起動するタイミングを決定し、a typescript-mode-hookを使用して実行する必要がありますtss-setup-current-buffer
ジョーダンビオンド

(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))and (add-hook 'typescript-mode-hook 'tss-setup-current-buffer)を使用するのが通常の方法です。
ジョーダンビオンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.