如何防止内置的major mode修改auto-mode-alist?

最近切到emacs29之后试用了一些自带的xxxx-ts-mode,但是觉得高亮还是不如外置的tree-sitter,想再慢慢调教一下高亮的规则。

但是我发现我的auto-mode-alist在别的一些操作之后会被修改。。。例如lsp-bridge调用了(treesit-parser-create 'typescript)之后

内置的typescript-ts-mode.el里有这么一段,就会把我的auto-mode-alist给改了

(if (treesit-ready-p 'typescript)
    (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode)))

这个不是autoload也不在函数里没法advice,有没有别的方法可以把它禁掉不?

你可以等加载完 treesit 之后再删掉它啊 :rofl:

因为不是eval once的东西,它是什么时候修改还是一个迷。treesit加载之后其实auto-mode-alist还没变化,因为一个parser都没有创建。

但用着用着我再打开一个新文件的时候发现major mode不一样了。。。

就是首次加载的时候运行一次:

完全可以在加载之后覆盖/修改:

(with-eval-after-load 'typescript-ts-mode
  ...)

这要看你自己的配置呀

啊好!我去试试

有点好奇如果是只加载一次的话,那是不是能找出加载的stack来呢?

因为我grep了我的配置以及安装的包都没有require这个文件

这其实很迷我没有找到是谁在加载这个东西。我的配置里没有,我安装的包也只是设置了typescript-ts-mode的hook

;;;###autoload

有了这个就不用 require 啦,而是在你执行 autoload 的函数的时候自动帮你 require