branch: elpa/aidermacs
commit bc5fe0b16e75dac6f419e08801c153fbb19a72da
Author: Mingde (Matthew) Zeng <[email protected]>
Commit: Mingde (Matthew) Zeng <[email protected]>
Add aidermacs-current-mode and abstract aidermacs--get-files-in-session
---
aidermacs.el | 45 ++++++++++++++++++++++++++++++++-------------
1 file changed, 32 insertions(+), 13 deletions(-)
diff --git a/aidermacs.el b/aidermacs.el
index e5d39dee78..69652f92ce 100644
--- a/aidermacs.el
+++ b/aidermacs.el
@@ -38,6 +38,10 @@
(require 'aidermacs-backends)
(require 'aidermacs-models)
+(defvar-local aidermacs--current-mode nil
+ "Buffer-local variable to track the current aidermacs mode.
+Possible values: 'code, 'ask, 'architect, 'help.")
+
(declare-function magit-show-commit "magit-diff" (rev &optional noselect
module))
(defgroup aidermacs nil
@@ -274,6 +278,9 @@ This function sets up the appropriate arguments and
launches the process."
(if (get-buffer buffer-name)
(aidermacs-switch-to-buffer buffer-name)
(aidermacs-run-backend aidermacs-program final-args buffer-name)
+ (with-current-buffer (get-buffer buffer-name)
+ ;; Set initial mode based on startup configuration
+ (setq-local aidermacs--current-mode (if aidermacs-use-architect-mode
'architect 'code)))
(aidermacs-switch-to-buffer buffer-name))))
;;;###autoload
@@ -285,6 +292,14 @@ This is useful for working in monorepos where you want to
limit aider's scope."
(default-directory (file-truename default-directory)))
(aidermacs-run)))
+(defun aidermacs--get-files-in-session (callback)
+ "Get list of files in current session and call CALLBACK with the result."
+ (aidermacs--send-command-redirect
+ "/ls"
+ (lambda (output)
+ (let ((files (aidermacs--parse-ls-output output)))
+ (funcall callback files)))))
+
(defun aidermacs--send-command (command &optional switch-to-buffer
use-existing)
"Send command to the corresponding aidermacs process.
COMMAND is the text to send.
@@ -442,25 +457,21 @@ Returns a deduplicated list of such file names."
"List all files currently added to the chat session.
Sends the \"/ls\" command and returns the list of files via callback."
(interactive)
- (aidermacs--send-command-redirect
- "/ls"
- (lambda (output)
- (let ((files (aidermacs--parse-ls-output output)))
- (message "%s" (prin1-to-string files))
- files))))
+ (aidermacs--get-files-in-session
+ (lambda (files)
+ (message "%s" (prin1-to-string files))
+ files)))
;;;###autoload
(defun aidermacs-drop-file ()
"Drop a file from the chat session by selecting from currently added files."
(interactive)
- (aidermacs--send-command-redirect
- "/ls"
- (lambda (output)
- (if-let* ((files (aidermacs--parse-ls-output output))
- (file (completing-read "Select file to drop: " files nil t))
+ (aidermacs--get-files-in-session
+ (lambda (files)
+ (if-let* ((file (completing-read "Select file to drop: " files nil t))
(clean-file (replace-regexp-in-string " (read-only)$" "" file)))
- (aidermacs--send-command (format "/drop ./%s" clean-file)))
- (message "No files available to drop"))))
+ (aidermacs--send-command (format "/drop ./%s" clean-file))
+ (message "No files available to drop")))))
;;;###autoload
@@ -960,6 +971,8 @@ prompt files and other Aider-related files:
In code mode, aider will make changes to your code to satisfy your requests."
(interactive)
(aidermacs--send-command "/chat-mode code" t)
+ (with-current-buffer (get-buffer (aidermacs-get-buffer-name))
+ (setq-local aidermacs--current-mode 'code))
(message "Switched to code mode <default> - aider will make changes to your
code"))
;;;###autoload
@@ -968,6 +981,8 @@ In code mode, aider will make changes to your code to
satisfy your requests."
In ask mode, aider will answer questions about your code, but never edit it."
(interactive)
(aidermacs--send-command "/chat-mode ask" t)
+ (with-current-buffer (get-buffer (aidermacs-get-buffer-name))
+ (setq-local aidermacs--current-mode 'ask))
(message "Switched to ask mode - you can chat freely, aider will not edit
your code"))
;;;###autoload
@@ -977,6 +992,8 @@ In architect mode, aider will first propose a solution,
then ask if you want
it to turn that proposal into edits to your files."
(interactive)
(aidermacs--send-command "/chat-mode architect" t)
+ (with-current-buffer (get-buffer (aidermacs-get-buffer-name))
+ (setq-local aidermacs--current-mode 'architect))
(message "Switched to architect mode - aider will propose solutions before
making changes"))
;;;###autoload
@@ -986,6 +1003,8 @@ In help mode, aider will answer questions about using
aider, configuring,
troubleshooting, etc."
(interactive)
(aidermacs--send-command "/chat-mode help" t)
+ (with-current-buffer (get-buffer (aidermacs-get-buffer-name))
+ (setq-local aidermacs--current-mode 'help))
(message "Switched to help mode - aider will answer questions about using
aider"))
(provide 'aidermacs)