feat(ai): Add opencode integration and reorganize AI tools

This commit is contained in:
User
2026-07-11 19:01:59 +08:00
parent 03fa5bbfd4
commit c2af33247a
6 changed files with 84 additions and 12 deletions

View File

@@ -116,9 +116,17 @@
(mode . eww-bookmark-mode) (mode . eww-bookmark-mode)
(mode . eww-buffers-mode) (mode . eww-buffers-mode)
(mode . eww-history-mode))) (mode . eww-history-mode)))
("AI" (or
(name . "^\\*OpenCode")
(name . "\\*opencode-serve\\*")
(name . "^\\*gptel")))
("Calc" (or ("Calc" (or
(mode . calc-mode) (mode . calc-mode)
(mode . calc-trail-mode))) (mode . calc-trail-mode)))
("Text" (or
(mode . org-mode)
(mode . markdown-mode)
(name . "^\\*\\[D\\] FILE backlinks for")))
("Shell" (or ("Shell" (or
(mode . eshell-mode) (mode . eshell-mode)
(mode . eat-mode) (mode . eat-mode)
@@ -145,8 +153,6 @@
(mode . geiser-debug-mode) (mode . geiser-debug-mode)
(mode . geiser-doc-mode) (mode . geiser-doc-mode)
(mode . geiser-autodoc-mode))) (mode . geiser-autodoc-mode)))
("gptel" (or
(name . "^\\*gptel")))
("Common-lisp" (or ("Common-lisp" (or
(mode . common-lisp-mode) (mode . common-lisp-mode)
(mode . lisp-mode))) (mode . lisp-mode)))
@@ -156,10 +162,11 @@
(mode . sly-mrepl-mode) (mode . sly-mrepl-mode)
(name . "\\*sly-compilation\\*") (name . "\\*sly-compilation\\*")
(name . "^\\*img-cache\\*"))) (name . "^\\*img-cache\\*")))
("Text" (or ("Config" (or
(mode . org-mode) (mode . conf-mode)
(mode . markdown-mode) (mode . conf-toml-mode)
(name . "^\\*\\[D\\] FILE backlinks for"))) (mode . conf-unix-mode)
(mode . yaml-ts-mode)))
("Help" (or ("Help" (or
(mode . help-mode) (mode . help-mode)
(mode . helpful-mode))) (mode . helpful-mode)))
@@ -184,7 +191,10 @@
(mode . xref-edit-mode) (mode . xref-edit-mode)
(mode . occur-mode) (mode . occur-mode)
(mode . occur-edit-mode))) (mode . occur-edit-mode)))
("Diff" (name . "^*Diff")) ("Diff" (or
(name . "^*Diff")
(mode . ediff-mode)
(mode . vundo-diff-mode)))
("Emacs" (or ("Emacs" (or
(name . "^\\*Help\\*$") (name . "^\\*Help\\*$")
(name . "^\\*Custom.*") (name . "^\\*Custom.*")

View File

@@ -146,6 +146,41 @@ explanations, no quotes, no punctuation, no file extension."
(setq gptel-magit-model 'kimi-for-coding (setq gptel-magit-model 'kimi-for-coding
gptel-magit-backend (gptel-get-backend "gptel-Kimi-Code-magit")))) gptel-magit-backend (gptel-get-backend "gptel-Kimi-Code-magit"))))
(use-package plz
:straight
(plz :type git
:host github
:repo "alphapapa/plz.el"
:ref "v0.9.1"))
(use-package plz-media-type
:straight
(plz-media-type :type git
:host github
:repo "r0man/plz-media-type"
:ref "v0.2.4"))
(use-package plz-event-source
:straight
(plz-event-source :type git
:host github
:repo "r0man/plz-event-source"
:ref "v0.1.3"))
(use-package opencode
:straight
(opencode :type git
:host codeberg
:repo "sczi/opencode.el")
:hook
(opencode-session-control-mode . disable-truncate-lines))
(use-package eval-elisp-mcp
:straight
(eval-elisp-mcp :type git
:host codeberg
:repo "sczi/eval-elisp-mcp"))
(provide 'init-gptel) (provide 'init-gptel)
;;; init-gptel.el ends here ;;; init-gptel.el ends here

View File

@@ -272,6 +272,12 @@ argument)."
(let ((current-prefix-arg '-)) (let ((current-prefix-arg '-))
(call-interactively 'gptel-agent))) (call-interactively 'gptel-agent)))
(defun my-opencode ()
"Run `opencode' in project root."
(interactive)
(let ((default-directory (project-root (project-current t))))
(opencode)))
(defun my-consult-ripgrep-project () (defun my-consult-ripgrep-project ()
"Run `consult-ripgrep' in current project's root." "Run `consult-ripgrep' in current project's root."
(interactive) (interactive)

View File

@@ -19,16 +19,35 @@
;; g for gptel ;; g for gptel
(general-def (general-def
:prefix "C-c g" :prefix "C-c g"
"o" 'gptel "g" 'gptel
"m" 'gptel-menu "m" 'gptel-menu
"s" 'gptel-send "s" 'gptel-send
"a" 'gptel-agent "a" 'gptel-agent
"t" 'gptel-tools) "t" 'gptel-tools
"o" 'opencode
"p" 'opencode-select-project
"l" 'opencode-select-session
"n" 'opencode-new-session)
(general-def gptel-mode-map (general-def gptel-mode-map
"C-c C-s" 'my-gptel-save-session "C-c C-s" 'my-gptel-save-session
"C-c C-k" 'gptel-abort) "C-c C-k" 'gptel-abort)
;; opencode
(general-def opencode-session-mode-map
"C-c C-p" 'comint-previous-prompt
"C-c M-p" 'opencode-respond-permission
"C-c x" nil
"C-c C-k" 'opencode-abort-session
"C-c C-c" 'nil
"C-c n" 'nil
"C-c N" 'opencode-new-session)
(general-def opencode-session-control-mode-map
"n" 'next-line
"p" 'previous-line
"N" 'opencode-new-session)
;; u for ui ;; u for ui
(general-def (general-def
:prefix "C-c u" :prefix "C-c u"
@@ -68,7 +87,7 @@
"R" 'project-query-replace-regexp "R" 'project-query-replace-regexp
"v" 'magit-project-status "v" 'magit-project-status
"V" 'project-vc-dir "V" 'project-vc-dir
"a" 'my-gptel-agent-project "a" 'my-opencode
"i" 'project-ibuffer) "i" 'project-ibuffer)
;; v for version control ;; v for version control

View File

@@ -157,7 +157,8 @@ _a_ : all dwim
(project-query-replace-regexp "Query Replace" ?R) (project-query-replace-regexp "Query Replace" ?R)
(consult-ripgrep "Ripgrep" ?r) (consult-ripgrep "Ripgrep" ?r)
(consult-project-buffer "Buffers" ?b) (consult-project-buffer "Buffers" ?b)
(project-ibuffer "Ibuffer" ?i)))))) (project-ibuffer "Ibuffer" ?i)
(opencode "OpenCode" ?a))))))
(use-package project-ibuffer (use-package project-ibuffer
:straight :straight

View File

@@ -42,8 +42,9 @@
"Buffers\\*$" "Buffers\\*$"
"^\\*Geiser" "^\\*Geiser"
"\\*gptel-Kimi-Code\\*" "\\*gptel-Kimi-Code\\*"
"^\\*sly"
"\\*gptel-agent:.*\\*" "\\*gptel-agent:.*\\*"
"^\\*OpenCode Sessions"
"^\\*sly"
"^magit" "^magit"
"\\*discomfort\\*" "\\*discomfort\\*"
"\\*eww bookmarks\\*" "\\*eww bookmarks\\*"