ChatGPT in Emacs.
- Send regions of text to ChatGPT
- Syntax highlighting for returned code
- Uses llm-workflow-engine, so can customize as needed
- 9/10/2023: Status - I use this every day and is stable. Please submit an issue if not.
- 7/8/2023: Shortcut customization has been reworked, see here.
Set your OpenAI API key. In .zshrc/bashrc
,
export OPENAI_API_KEY=<API_KEY>
For Windows users, see here.
Install llm-workflow-engine (lwe):
pip install --upgrade pip
pip install setuptools
pip install git+https://github.com/llm-workflow-engine/llm-workflow-engine
If you encounter any problems, please submit an issue or refer to llm-workflow-engine (formerly chatgpt-wrapper).
(use-package chatgpt
:straight (:host github :repo "joshcho/ChatGPT.el" :files ("dist" "*.el"))
:bind ("C-c q" . chatgpt-query))
(require 'quelpa-use-package)
(use-package chatgpt
:quelpa ((chatgpt :fetcher git :url "https://github.com/joshcho/ChatGPT.el.git") :upgrade t)
:bind ("C-c q" . chatgpt-query))
Assuming Quelpa installation:
In dotspacemacs/user-config
function,
(global-set-key (kbd "C-c q") #'chatgpt-query)
In dotspacemacs/layers
function for setq-default
,
dotspacemacs-additional-packages
'(
(chatgpt :location (recipe
:fetcher github
:repo "joshcho/ChatGPT.el"))
;; other additional packages...
)
In packages.el
,
(package! chatgpt
:recipe (:host github :repo "joshcho/ChatGPT.el" :files ("dist" "*.el")))
In config.el
,
(use-package! chatgpt
:defer t
:bind ("C-c q" . chatgpt-query))
Press C-c q
to query ChatGPT. Select a code block before C-c q
to query the code.
Configure default model, system message, browser backend, etc. with llm-workflow-engine.
Customize chatgpt-code-query-map
for your own prompt shortcuts. Note that “custom” is a reserved prompt shortcut.
(setq chatgpt-code-query-map
'(
;; ChatGPT.el defaults, string for each shortcut
("bug" . "There is a bug in the following, please help me fix it.")
("doc" . "Please write the documentation for the following.")
("improve" . "Please improve the following.")
("understand" . "What is the following?")
("refactor" . "Please refactor the following.")
("suggest" . "Please make suggestions for the following.")
;; your shortcut
("prompt-name" . "My custom prompt.")))
If you previously had customizations, note that we use strings now, not format strings.
- Multiline input is not supported yet