刚刚发现 elisp-mode.el 里竟然有几百行代码是为了适配第三方包 company-mode 的:
;; FIXME: Support for Company brings in features which straddle eldoc.
;; We should consolidate this, so that major modes can provide all that
;; data all at once:
;; - a function to extract "the reference at point" (may be more complex
;; than a mere string, to distinguish various namespaces).
;; - a function to jump to such a reference.
;; - a function to show the signature/interface of such a reference.
;; - a function to build a help-buffer about that reference.
;; FIXME: Those functions should also be used by the normal completion code in
;; the *Completions* buffer.
(defun elisp--company-doc-buffer (str)
(let ((symbol (intern-soft str)))
;; FIXME: we really don't want to "display-buffer and then undo it".
(save-window-excursion
;; Make sure we don't display it in another frame, otherwise
;; save-window-excursion won't be able to undo it.
(let ((display-buffer-overriding-action
'(nil . ((inhibit-switch-frame . t)))))
(ignore-errors
This file has been truncated. show original
感觉是不是有点本末倒置了?于是如下情况就在意料之中了:
(defun elisp--company-doc-string (str)
(let* ((symbol (intern-soft str))
(doc (if (fboundp symbol)
(documentation symbol t)
(documentation-property symbol 'variable-documentation t))))
(and (stringp doc)
(string-match ".*$" doc)
(match-string 0 doc))))
(defun company-elisp--doc (symbol)
(let* ((symbol (intern symbol))
(doc (if (fboundp symbol)
(documentation symbol t)
(documentation-property symbol 'variable-documentation t))))
(and (stringp doc)
(string-match ".*$" doc)
(match-string 0 doc))))
去 Emacs 官方仓库查了提交记录,发现还不止上面这些。
Youmu
2021 年1 月 13 日 15:13
3
company
是 elpa 的包,而且 company 的维护者也在 Emacs 里提交,例如最近在 xref/project 里的改动都是 Dmitry Gutov
提交的
即然都进 elpa 了,那就是本家了,哪来的第三方之说
wsw
2021 年1 月 14 日 00:13
5
company的代码里,头部都有
;; This file is part of GNU Emacs.
可毕竟不是随 Emacs 一起分发的。
从依赖关系上看,是 company 处在下游。
company 是 2012 年进的 elpa,而 1 楼所引用的代码也存在 6、7 年了,没有人觉得不妥吗?
我猜你的意思是 company 不是每个人都在用的,所以这部分代码对不用 company 的人来说就有些冗余,甚至会拖慢 Emacs 执行速度?
不过本身 Emacs 就是适配多平台的软件,你在 Linux 系统上编译安装 Emacs 的代码里也有适配 Mac 和 Windows 的代码呀。感觉这个问题颇像前几天看到的那个问题
因为只用emacs很少的一部分功能,于是打算将emacs弄的体积小点,该怎么做,谢谢各位
gangzhan:
感觉这个问题颇像前几天看到的那个问题
完全不同。
我说的是依赖关系。假如 B 依赖 A,那么 A 没必要反过来适配 B。两边出现相同的代码,是依赖关系纠缠不清的副作用之一。
2 个赞
感觉这么搞确实不太好, Emacs 本身就挺庞大的了, 再加些各种非核心的功能, 后面维护越来越难, 不如放在 elpa 里面.
之前 cedet 也是这样, 当时可能很流行, 合进 Emacs 之后过几年就没什么人用了, 后面都是维护负担.
啊,是我想当然了,冒然回复真不好意思。
这么看放进 elisp-mode 里的确是有问题,可能是因为作者有推送权限,测试后忘记删除就推送了?感觉还是发个邮件问一下比较好
好像确实, cedet文档好像都不太多, 很难以用上手的样子.
LdBeth
2021 年1 月 14 日 09:54
12
;; FIXME: Those functions should also be used by the normal completion code in
;; the *Completions* buffer.
看起来是因为实现自带的 completion 功能用同样可以用到这些 helper function,所以为了在没有安装 company 的情況下能夠使用就复制过来了,而不是为以后适配 company 的功能才加这些函数。至于命名里帯上 company,就是估计只为了表明这些函数的来源,而不是这些函数是给 company 用的意思,既然是同个作者提交而且同样是 GNU 项目,也没有改成完全不同名字来避嫌的必要。
1 个赞