Emacs and Github Copilot
In order to setup my Emacs to use GitHub Copilot I got my inspiration from Robert Krahn blog post about Setting up Github Copilot in Emacs .
I have a few differences in my setup:
- Robert Krahn:
- Defaults load Copilot, except for a list of modes where it is not relevant
- Use an utility function that loops through 3 activation state (off, manual and full)
- Use M-C- combinations
- I :
- Launch Copilot with PHP and Typescript mode hook (only for those modes)
- Use an utility derived from Robert Krahn's one, but looping only through 2 states: off and full
- Use the "Windows" key, which is s-
Here you are
(add-to-list 'load-path "/home/mihamina/.emacs.d/copilot")
(require 'copilot)
(defun rktmb/copilot-complete-or-accept ()
"Command that either triggers a completion or accepts one if one
is available. Useful if you tend to hammer your keys like I do."
(interactive)
(if (copilot--overlay-visible)
(progn
(copilot-accept-completion)
(open-line 1)
(next-line))
(copilot-complete)))
(defun rktmb/copilot-change-activation ()
"Switch between two activation modes:
- manual: you need to press a key (s) to trigger completions
- off: copilot is completely disabled."
(interactive)
(if copilot-mode
(progn
(message "deactivating copilot")
(global-copilot-mode -1))
(progn
(message "activating copilot mode")
(global-copilot-mode))))
(define-key copilot-mode-map (kbd "s-") #'copilot-next-completion)
(define-key copilot-mode-map (kbd "s-") #'copilot-previous-completion)
(define-key copilot-mode-map (kbd "s-") #'copilot-accept-completion-by-word)
(define-key copilot-mode-map (kbd "s-") #'copilot-accept-completion-by-line)
(define-key global-map (kbd "s-") #'rktmb/copilot-complete-or-accept)
(define-key global-map (kbd "s-") #'rktmb/copilot-change-activation)
(add-hook 'after-init-hook 'global-company-mode)
(add-hook 'js-mode-hook 'copilot-mode)
(add-hook 'typescript-mode-hook 'copilot-mode)
(add-hook 'php-mode-hook 'copilot-mode)