打开特定文件类型的文件时运行命令


14

打开特定文件类型的文件时,我试图获取一个Lisp脚本来为我运行一些命令。我知道我正在使用正确的初始化文件,因为如果从其中删除主题,则启动时emacs不会有主题。

这是我正在使用的脚本,该脚本不起作用(没有错误或任何错误):

(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代码加载”。我认为您想要查找文件挂钩(请注意,这些不使用参数调用!请改用缓冲区文件名)。您可能还想使用auto-mode-alist并定义自己的主要模式。
YoungFrog 2015年

3
实际上,您似乎需要模式挂钩。

您尚未遇到问题,因为您的函数未运行,但是当您知道函数无效时,您便知道上述内容无效。您的when通话内容格式不正确。这两个函数调用不能像原来那样用括号括起来。请注意您的代码和@sds的代码之间的区别
Jordon Biondo

Answers:


16

用Emacs术语,这是两个不同的步骤:

  • 将具有.ts扩展名的文件与主模式 关联typescript-mode
  • tss-setup-current-bufferTypescript模式启动时运行该函数。

要选择用于某些文件名的主要模式,请在变量中添加一个条目auto-mode-alist。将以下行放入您的init文件中:

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

\.ts\'是将文件名与.ts扩展名匹配的正则表达式。

tss-setup-current-buffer在Typescript模式启动时运行该函数(我假设即使对于不具有.ts扩展名的Typescript模式文件也要运行该函数),请将其添加到Typescript模式启动挂钩

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

根据安装方式typescript.eltss.el,您可能还需要声明这些功能,typescript-mode并且tss-setup-current-buffer必须从这些文件中进行加载。这避免了必须加载typescript.el以及tss.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-hook应该用来运行tss-setup-current-buffer
乔登·比昂多

使用(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))(add-hook 'typescript-mode-hook 'tss-setup-current-buffer)将是正常的方法。
乔登·比昂多
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.