Copilot.el は GitHub Copilot を Emacs で使えるようにするパッケージ。これ自体は非公式なプラグインで、動かすために Vim で動く公式プラグインのバイナリを利用して動いている
最近出て来たパッケージなので el-get には登録されていない。というわけでとりあえず自前でレシピを用意している
(:name copilot
:website "https://github.com/copilot-emacs/copilot.el"
:description "An Emacs plugin for GitHub Copilot."
:type github
:branch "main"
:pkgname "copilot-emacs/copilot.el"
:depends (s dash editorconfig jsonrpc))
依存している editorconig も自前でレシピを用意している
(:name editorconfig
:website "https://github.com/editorconfig/editorconfig-emacs"
:description "An EditorConfig plugin for Emacs."
:type github
:branch "master"
:pkgname "editorconfig/editorconfig-emacs")
そして el-get-bundle
でインストール
(el-get-bundle copilot)
とりあえずプログラミング系の mode で有効になるようにしていた。けど今はちょっと無効にしている
;; (add-hook 'prog-mode-hook 'copilot-mode)
あとは company-mode と組み合わせてもそれなりに動くようにするため inline preview を無効にするような設定を入れている。なおこの設定は公式の README の中のコードを使っている
(with-eval-after-load 'company
;; disable inline previews
(delq 'company-preview-if-just-one-frontend company-frontends))
タブで補完ができるように設定している
(with-eval-after-load 'copilot
(define-key copilot-completion-map (kbd "<tab>") 'copilot-accept-completion)
(define-key copilot-completion-map (kbd "TAB") 'copilot-accept-completion)
(define-key copilot-completion-map (kbd "M-f") 'copilot-accept-completion-by-word)
(define-key copilot-completion-map (kbd "M-n") 'copilot-next-completion)
(define-key copilot-completion-map (kbd "M-p") 'copilot-previous-completion))
大きいファイルが開かれると
Warning (copilot): .loaddefs.el size exceeds 'copilot-max-char' (100000), copilot completions may not work
とか出るけど、そんなもんは分かってるので warning が出ないように黙らせている
(setq warning-suppress-log-types '((copilot copilot-exceeds-max-char)))
またデフォルトだと indent offset は設定が見つからない時に warning を出すようになっているが結構邪魔なのでとりあえずオフにしている
(setopt copilot-indent-offset-warning-disable t)