一直没开启这两个功能, 之前听人说这个安全性很高, 可以精确控制, 现在测试了一下, 好像可控性很低.
启用后, 好像没法控制哪些variable允许被设置, 哪些忽略. 默认是全部设置. enable-local-variables
可以设置为:safe
, 此时只有emacs内标记为safe的变量可以被设置(emacs内部有很多这样的变量).
好像没法实现我想要的功能: 比如只允许tab-width被自动设置, 其他变量全部忽略.
一直没开启这两个功能, 之前听人说这个安全性很高, 可以精确控制, 现在测试了一下, 好像可控性很低.
启用后, 好像没法控制哪些variable允许被设置, 哪些忽略. 默认是全部设置. enable-local-variables
可以设置为:safe
, 此时只有emacs内标记为safe的变量可以被设置(emacs内部有很多这样的变量).
好像没法实现我想要的功能: 比如只允许tab-width被自动设置, 其他变量全部忽略.
可通过 put
函数来标记自定义变量为安全类型:
同样也可以改变内置变量的安全属性:
(with-emacs
(list
:before
(get 'tab-width 'safe-local-variable)
:after
(progn
(put 'tab-width 'safe-local-variable nil)
(get 'tab-width 'safe-local-variable))))
;; => (:before integerp :after nil)
实际使用上会不会产生问题有待验证。
emacs已经把很多内置变量设置了安全属性, 但是很多不是我想要的, 比如只想让tab-width为安全, 其他全部忽略, 这个功能好像很难实现.
目前我只知道 put
函数可以修改安全属性,但是更改内置变量会不会有问题还未知。
想通过 put
设置除 xxx 之外的所有内置变量恐怕不太现实,首先要把所有安全的内置变量找出来。
你的需求有点奇怪。
本来是一直没开启这个功能, 主要是很不希望某个选项被别人自动改成一个出乎意料的值. 比如emacs的源码目录里的dir-local, 会把c-mode的风格改成GNU, 这种改动太大了.
大部分情况下都没什么影响, 唯一不方便的地方就是tab-width, 所以只想开启这个变量的自动配置.
另一个思路:
建立自己的安全白名单,然后魔改 local variable 的实现,或者看看 hack-local-variables-hook
能不能用上。
看了下, 可以在before-hack-local-variables-hook
里修改变量file-local-variables-alist
的值, 这个变量里面放了准备应用的local variables, 可以把不要的清理掉.
难道这个需求真的太小众了吗?
别人的仓库,用dir-loc保持一些设置,来维持代码风格是有必要的。你把别人的改了是怎么回事,你会改editorconfig么
你说的很有道理, 不过一般只浏览, 不修改. 最多是抄点代码. 一直没开启这功能, 以后慢慢体验.
默认就是吧,如何给 tab-width
设置一个整数值,那么这个设置就是安全的,Emacs 不会给提示便会自动设置。
可以动手试下,生成一个文件,然后 M-x add-file-local-variable tab-width 12
,然后重开这个文件,检查 tab-width
。
本来的需求是只允许自动设置tab-width, 其他变量(包括emacs认为是安全的变量)全部忽略.
通过before-hack-local-variables-hook
已经测试成功, 但现在感觉好像没必要这样限制了.