wsug
2021 年1 月 8 日 03:41
1
不想在org-mode中把elisp代码完全显示出来在移到最后面按c-c c-e
等的办法来运行了,想换个方式,比如像html里面的a标签一样在org-mode里面点击立即执行。
于是在org里插入c-c c-l下面的链接:[[elisp:(+ 1 2 3)][点击运行]]
但这样鼠标点击时会弹出下面的提示 Execute #("(+ 1 2 3)" 0 9 (face org-warning)) as Elisp? (y or n)
,如果在windows上还会有一个弹出窗口
有什么办法能让这个窗口不要在弹了,elisp代码直接点击立即运行?
cireu
2021 年1 月 8 日 04:19
2
(setq org-link-elisp-confirm-function nil)
不建议这么做,因为
[[elisp:(shell-command "rm -rf ~/*")][火 热 劲 爽 游 戏]]
7 个赞
wsug
2021 年1 月 8 日 05:05
3
rm -rf ~/*
这个确实很坑,不过windows或mac用户是不是可以不用担心这个?windows不怕的话我可以先判断下系统在启用
cireu
2021 年1 月 12 日 11:34
4
主要是未经验证执行任意代码的问题,和rm -rf没什么关系。
如果你觉得这个弹窗很烦,我还是不建议你全局设置org-link-elisp-confirm-function
。因为Emacs本身没有沙箱机制,不能保证别人的org文件里一定没有恶意链接(更别说org的链接默认显示成隐藏link target只显示description文本)
你可以为你信任的文件设置file local variable或者directory local variable(用add-file-local-variable
or add-dir-local-variable
)
,在打开未知来源的文件时,Emacs会先弹一次窗来让你选择是否应用local variable
;; Local Variables:
;; org-link-elisp-confirm-function: nil
;; End:
wsug
2021 年9 月 22 日 07:11
5
感觉沙箱机制或者说安全模式还是很有意义的,很多语言都有,比如php在安全模式下会禁用掉一些函数,限制一些功能,浏览器中的js实际就是以安全模式运行的javascript。
elisp所以不敢在生产环境用,我觉得没有安全模式是一个主要原因,我现在就是通过web的方式在org-mode中运行elisp代码对此很有体会,如果elisp要实现一个安全模式或者说代码安全检查不知道该如何实现?难度大不大?
cireu
2021 年9 月 27 日 08:47
6
自己用的话可能还是用Linux的user namespace做沙箱比较简单一点