Emacs 插件开发手册

https://manateelazycat.github.io/2022/11/18/write-emacs-plugin

今天给公司内部同事讲Emacs插件开发课, 第一课, 先从基础入门开始讲吧。

教材都写了, 就顺便在论坛上发给大家看吧, 其实Elisp编程比Python都简单, 关键是入门的那几个关键步骤容易卡住。

42 个赞

用久了doom emacs, 还没写过插件,最近真好想学下emacs 插件开发 :yum:

2 个赞

好,支持,emacs 用了也很久了,但只是用别人写的各种插件,自己把他们糊在 init.el 中,对 elisp 基本处于零基础状态

如果条件是一个类型的, 用 pcase 会简洁一点:

确实有这个作用。但更重要的应该是 pcase 的解构能力吧?

此教材只讲怎么用和感官认识,不深入细讲,一是不好理解,二是细节太多,学习者不得全貌。

有没有方法高效的寻找一个“方法”或者“变量”?

当我需要完成某一个功能时,我通常会 google 查询“emacs lisp how to …”, 一般会在 stackoverflow 找到建议,某个变量、方法可能符合我的需求。

然后我会通过 describe-function 查看“方法”详情。

但这个流程依赖网络,并需要在 chrome 和 emacs 之间切换。

或者猜测可能的函数、变量名,通过 describe-function + orderless 搜索可能的结果。

话说,有没有可能通过 rg 类的模糊搜索工具,搜索方法、变量的 doc 中的内容, 反向查找到可能有用的方法,或变量?

1 个赞

正则查找请用 apropos-variable 和 apropos-function, 这是 apropos 这个库牛逼的地方。

1 个赞

试了一下,确实很好用。

看来还是要多提问,总会有意外的惊喜。

今天就遇到一个插件问题:

自己设置的全局快捷键被一个主动安装的插件的依赖插件占用,虽然还没学怎么设置局部快捷键,怎么写插件,怎么避免冲突,已经先学会删除插件了 :rofl:

除了单纯地describe function外,直接找一个用到了相似功能的函数M-.看它的源码往往会有惊喜呢

强烈推荐helpful这个插件,再挂上emacs C源码,掌握emacs就会变得飞快w

4 个赞

好问题,把我隐约想问的说得很清楚 :+1:

helpful 看起来不错,用起来。大佬都直接看 emacs C 源码了呀。膜拜。

2 个赞

好公司!紫薯布丁

3 个赞

感觉漏了介绍 lexical-binding,虽然高版本 Emacs 的很多交互使用的场合(如 ielm, scratch buffer)默认启用了,但是文件加载 elisp 文件好像默认还是 dynamic binding

1 个赞

那个以后讲,第一课讲这个吸收不了

猫哥,你们公司内部全 emacs 的吗

猫大在播客中讲过,不全是:

https://emacstalk.github.io/podcast/012/

内容很丰富,强烈推荐听一听!

提纲挈领,非常好 :+1:,里面提到的问题开发插件基本上都会遇到。

helpful 不显示变量的 *Global value*。不知是有 bug 还是故意的。

复现代码:

(progn
  (defvar foo '(1))
  (put 'foo 'standard-value (list (list 'quote '(2))))
  (setq-local foo '(3))
  (describe-variable 'foo)
  (helpful-variable 'foo))
1 个赞