我是萌新,刚入坑emacs不久,想知道emacs中是否存在这样一个功能或插件,具体描述如下:
有时,你经常在某个项目,或者某个文件中执行某个M-x命令。或者,你几乎只在某个项目或文件里执行那个命令。每次都通过M-x输入命令未免有点繁琐,绑定一个快捷键又会觉得占用了快捷键资源。
那可不可以把这个命令写在一个代码块里,需要执行的时候把光标移动上去,再按某个简单的快捷键(Enter/C-c C-c)来执行它呢?
如果没有的话,或许有办法实现这个功能吧?
我是萌新,刚入坑emacs不久,想知道emacs中是否存在这样一个功能或插件,具体描述如下:
有时,你经常在某个项目,或者某个文件中执行某个M-x命令。或者,你几乎只在某个项目或文件里执行那个命令。每次都通过M-x输入命令未免有点繁琐,绑定一个快捷键又会觉得占用了快捷键资源。
那可不可以把这个命令写在一个代码块里,需要执行的时候把光标移动上去,再按某个简单的快捷键(Enter/C-c C-c)来执行它呢?
如果没有的话,或许有办法实现这个功能吧?
可以用 org-link。 在 org 文件中,按 C-c C-l 然后输入 elisp 回车,再输入你想运行的函数,回车,接着输入链接的说明。这样就生成了一个类似按钮的链接
根据你的描述,你是否在寻找 C-x C-e?
make-button ?
十分感谢你,这个正是我想要的,简单又快捷!
但是我发现,这么实用的东西,如果不通过阅读文档得知,那就很难在其他地方搜到了,即便问chatgpt也不容易问的出来。且关键是,你也不知道文档的哪一部分会介绍这一内容。我觉得这可能是阻碍emacs推广普及的某一因素。
我就经常在org-mode里做按钮,点击那个按钮把整个org文件的内容改变来显示执行结果,或者 局部更新org文件的内容。
最近添加的按钮是exec sql
,方便对返回的sql直接编辑后执行,效果如图:
不过这个按钮的源码有点长,我还没有写成一个elisp函数,现在是合成一行的,阅读有些不太方便: [[elisp:(progn (next-line 1)(org-mark-element) (orgcms-load (format "http://127.0.0.1/org/?&c=sql-exec&sql=%s" (url-hexify-string (buffer-substring-no-properties (region-beginning) (region-end)))))) ][exec sql]
是的。所以我正在努力抽时间读文档。如果空闲程度和学生差不多的话(我),大概一年能读完 eintr、emacs、elisp这三本手册。不过真的好累…
等等,org-link 是 org 手册里的东西,那…
能问出结果的前提肯定是把问题说清楚,你问得模糊他就给不了你答案,所以基础概念得自己学明白。
目前除了直接叫他写代码给我不是很满意,其他比如问概念性问题,或者解释代码,或者给出api示例效果都不错。
这样点击有会有一个提示:Execute … as elisp. 这个提示确认如何取消? 尝试了:(setq org-confirm-babel-evaluate nil) ,没起作用。
(setq org-confirm-elisp-link-function nil)
GNU Hyperbole, 专门就是用来干这件事的,与你的要求100%匹配
https://www.gnu.org/software/hyperbole/
对我来说主要的优点就是这是个Global Minor Mode,所以不需要依赖于特定的Major Mode,无论是 Org 还是邮件还是代码窗口都可以用。
三种不同的按钮形式:
我个人主要的用途:
这玩意儿和Org还是有很大区别的,但和Org一起用的话就非常舒服了。
在工具栏或顶部菜单上做个按钮不就行吗
有意思,字数补丁
感谢回复
是否愿意,详细分享一下,你对 Hyerbole 的理解,以及你的使用?
它的文档和演示都太不友好了,极其学术,看着脑壳痛。
如果不考虑按钮自带下划线的特点,可以考虑通过双击功能名称的形式,比如对于org文件中字符串“this is a function.”,光标移动到funtion,然后双击来实现。 实现思路是:1. 定义一个function,比如org-double-click,绑定到双击上;2. org-double-click的功能是获取当前光标位置的单词,然后将该字符串作为一个function来eval。3. 双击运行的function需要单独定义,可以通过启动时加载el文件来实现。 这种方式的优势是只需要在org中有该字符串即可双击运行该function,如果一个fuction在不同org中使用频率都很高,那么每次都插入org-link略显繁琐。当然,如果不是很高的频率且需要突出显示org-link则更合适。