Ghelp 通用帮助

Emacs通用帮助系统 继续讨论:

ghelp是一个通用帮助系统,基本思路是给各个major mode的帮助系统提供统一的入口的历史跳转等功能,还可以同时搜索多个后端。(传不了动图,大家上github看吧)

现在ghelp已经基本可用,支持了helpful和eglot后端。

4 个赞

怎么上手?比如,我需要在 Go Mode 中查看 Go 文档,可以从命令行获得文档

$ go doc -src os.Open
package os // import "os"

// Open opens the named file for reading. If successful, methods on
// the returned file can be used for reading; the associated file
// descriptor has mode O_RDONLY.
// If there is an error, it will be of type *PathError.
func Open(name string) (*File, error) {
	return OpenFile(name, O_RDONLY, 0)
}

假设我已经把这个命令封装成了函数。然后 ghelp-register-backend 怎么用?下面的 nil 是什么意思?

  (ghelp-register-backend 'python-mode
                          nil
                          #'ghelp-eglot--describe-symbol)

www我没想到这么快就有人感兴趣。我已经添上了后端的文档:

ghelp-register-backend里每个后端就是两个函数,一个返回可选的symbol列表,一个返回请求的文档。返回symbol列表的函数可以是nil,只不过这样就没有symbol补全。

DESCRIBE-SYMBOL-FN 的参数和返回值在 docstring 里没有解释,看了一会儿源码才发现 README 有解释。

这个历史记录怎么弄?放到 SYMBOL-LIST-FN 里?而且这个 SYMBOL 貌似是 Emacs Lisp Symbol,应该是个 String 才对吧,把 Go 语言的标识符存储为 Emacs Lisp 符号感觉怪怪的。

(ghelp-register-backend
 'go-mode
 nil
 (lambda (_symbol _buffer _point)
   (let ((q (read-string "go doc: ")))
     (list (list q (shell-command-to-string (concat "go doc " q)))))))

看起来比较复杂,应该一看就知道怎么用才好。我基本是想要个历史记录功能,或许从头实现应该不难。

怎么写文档会比较简单看出来?历史是自动的,显示文档的时候加入历史,每个major mode有自己的历史,symbol参数确实是string。历史的实现在源码的history section。

@xuchunyang

我觉得有必要设一个发布/推荐新包的分区/标签。

大多数新包可能都不太有人关注,所以很容易淹没在问题贴之中。

由于是新包,所以也鲜有人去搜索它,因为不知道关键字是什么,除非跟包作者想到一块儿去了。然而我们大部分时间都是看到一个东西,觉得有点兴趣,进一步了解;而不是先想到一个兴趣点,然后来论坛找。

如果可以一键把发布/推荐贴都列出来,相信会带来更多关注。

行,考虑下怎么操作。

标签不容易注意到导致忘记加。分区不常用的话我觉得不值得加,免得纠结选哪个,最后还选错了,比如现在的 Emacs-Lisp 分区就容易「选错」。还有个思路用特定格式 ,比如以【问题】、Show HN 开头来说明什么类型。

1 个赞

标题开头加前缀应该是很多人比较习惯&熟悉的方式。

论坛的标签(tag)其实有点弱,不能组合使用。

我了解新包的途径来主要有sachua的digest,论坛里的帖子和github上关注的人的star。

论坛里加标签感觉作用不大,平时不容易注意到