Copilot 非官方插件

刚写了个 Copilot 插件:https://github.com/zerolfx/copilot.el

demo

刚入门 elisp,写得可能比较烂,有问题欢迎大家指出,也欢迎大家贡献代码。 另外估计兼容性不大好,只测了 Linux + Spacemacs 的默认配置。

题外话:连 Vim 都有官方的 Copilot 插件,为什么 Emacs 没有?

13 个赞

赞👍 官方没有 Emacs 插件,我猜可能是核心代码是 binary 的,可能是 Emacs 下没有好的 binary 分发方式?

Copilot 的 Vim 插件里塞了一些混淆过的 js 以及 wasm,然后靠 stdin/stdout 调用 Copilot API。

我是照抄 Vim 插件的,通信方式也是一模一样。但因为 license 的问题,我不敢往自己项目里装 Copilot 的那些文件。

(所以官方要搞 Emacs 版的话其实也很容易。)

要求支持 Emacs 的呼声不太高:

https://github.com/github/feedback/discussions/categories/copilot-feedback?discussions_q=category%3A"Copilot+Feedback"+emacs

1 个赞

Copilot 的 Vim 插件,是写了十几年 Vim 插件的 tpope(几乎天天开新坑) 和官方合作推出的。这样的人还真不好找。

1 个赞

和这个类似,都是通过 copilot.vim plugin 实现

https://github.com/cryptobadger/flight-attendant.el

关于为什么没有官方插件,之前群里讨论过, @oldosfan 给出的解释是:

因为实现 Emacs copilot 就要上法庭,FSF 不可能允许非自由软件渗入 Emacs ,不能把非 GPL 软件作成 Emacs 插件。

用了「非 GPL 软件」的 Emacs 插件有不少。

2 个赞

前两天正好在看有没有类似的插件lol。 然而我并没有 copilot access :man_facepalming:

是的,而且 copilot.vim 的核心部分是一个 wasm blob,不是自由软件。

“非 GPL 软件” 没问题, 可是 copilot 是 proprietary software,也是 SaaSS(service as a software substitute)。

Copilot 本身还有一些其他的哲学性问题,感兴趣可以阅读 Publication of the FSF-funded white papers on questions around Copilot — Free Software Foundation — Working together for free software

1 个赞

一开始想用 flight-attendant.el 来着,然而它不支持最新的 copilot.vim 里的二进制,也没提供接受补全和多语言支持,最主要的是还不好改,就重写了。

GPL 确实是个问题,不知道让用户自行下载二进制是不是可以回避这个问题,另外如果我加个内置脚本帮用户一键安装是不是也可以?

1 个赞

不准备进 Emacs 核心或者 elpa,应该不需要关心 GPL 的问题吧?

哥们儿,你的包elpaso已经能找到。你只要加 git add .recipe. copilot

1 个赞

Commercial Emacs 是你为Emacs做的定制版本吗?

前天刚申请了Copilot, 昨天通过, 今天就出了个Emacs插件, nice :blush:

1 个赞

代码里依赖了company,补全前端是corfu,可以用这个插件吗?

Commercial Emacs 每小时合并GNU Emacs的更改。

大意是开源和闭源软件像copilot, github能互惠互利。 :peace_symbol:

2 个赞

我也很警惕 copilot 这类软件,只是对「因为实现 Emacs copilot 就要上法庭」这个说法存疑。如果官方自己去实现一个 Emacs copilot,FSF 会起诉 Microsoft / Github?

我当时想象中是 GitHub 通过 native module 把 copilot 带入 Emacs,这样做会违反 GPL,而且 copilot 是 FSF 比较反对的服务之一,这个情况只要出现,FSF 就一定会采取法律措施制止。

没有预料到 GitHub 选择用外接进程的方式实现 Copilot。

啊,忘删没用到的依赖了。最初是打算集成 company 的,但是它多补全后端限制很大,就放弃了。

目前提供了生成补全和接受补全的 command,搞点 hooks 和 key mapping 就能用了,没啥特别的依赖。