branch: elpa/aidermacs
commit a7279134756d3d0585ba519204626d92b35a01f7
Author: Mingde (Matthew) Zeng <[email protected]>
Commit: Mingde (Matthew) Zeng <[email protected]>
Add aidermacs-drop-current-file, refactoring
Signed-off-by: Mingde (Matthew) Zeng <[email protected]>
---
README.org | 15 ++++++-------
aidermacs-doom.el | 2 +-
aidermacs.el | 63 ++++++++++++++-----------------------------------------
3 files changed, 25 insertions(+), 55 deletions(-)
diff --git a/README.org b/README.org
index 64928d714e..283d15e364 100644
--- a/README.org
+++ b/README.org
@@ -23,10 +23,11 @@ Aidermacs thrives on community involvement. We believe that
the best software is
Your contributions are essential to making Aidermacs the best AI pair
programming tool for Emacs!
-* Why Aidermacs over aider.el?
-Aidermacs begins as a fork of
[[https://github.com/tninja/aider.el][aider.el]], intended to offer more
Emacs-native experience integrating with
[[https://github.com/paul-gauthier/aider][Aider]].
+** Why Aidermacs over aider.el?
-=Aidermacs= and =aider.el= are different development philosophies, =Aidermacs=
prioritizes Emacs workflow integration, but =aider.el= emphasizes on
replicating Aider's CLI behavior.
+Aidermacs is designed to provide a more Emacs-native experience while still
integrating with [[https://github.com/paul-gauthier/aider][Aider]]. It began as
a fork of [[https://github.com/tninja/aider.el][aider.el]], but has since
diverged significantly to prioritize Emacs workflow integration.
+
+While =aider.el= strictly mirrors Aider's CLI behavior, =Aidermacs= is built
around Emacs-specific features and paradigms. This design philosophy allows you
to harness Aider's powerful capabilities through a natural, Emacs-native coding
experience.
With =Aidermacs=, you get:
@@ -138,7 +139,7 @@ This section provides a step-by-step guide on how to use
Aidermacs for AI-assist
To provide context to the AI, you need to add relevant files to the Aidermacs
session:
- Add current file: =M-x aidermacs-add-current-file= (=f= in transient menu)
-- Add current file in read-only mode: =M-x aidermacs-current-file-read-only=
(=R= in transient menu)
+- Add current file in read-only mode: =M-x
aidermacs-add-current-file-read-only= (=R= in transient menu)
- Add all files in current window: =M-x aidermacs-add-files-in-current-window=
(=w= in transient menu)
- Add all files with same suffix in current directory: =M-x
aidermacs-add-same-type-files-under-dir= (=d= in transient menu)
- In dired-mode, add marked files: =M-x
aidermacs-batch-add-dired-marked-files= (=b= in transient menu)
@@ -165,12 +166,13 @@ After adding files to the session, switch to the
=*aidermacs*= buffer to interac
*** File Management
- Add Current File: =M-x aidermacs-add-current-file= (=f= in transient menu)
-- Add File Read-Only: =M-x aidermacs-current-file-read-only= (=R= in transient
menu)
+- Add File Read-Only: =M-x aidermacs-add-current-file-read-only= (=R= in
transient menu)
- Add Files in Window: =M-x aidermacs-add-files-in-current-window= (=w= in
transient menu)
- Add Files by Type: =M-x aidermacs-add-same-type-files-under-dir= (=d= in
transient menu)
- Add Marked Files: =M-x aidermacs-batch-add-dired-marked-files= (=b= in
transient menu)
- List Added Files: =M-x aidermacs-list-added-files= (=L= in transient menu)
- Drop File from Chat: =M-x aidermacs-drop-file= (=D= in transient menu)
+- Drop Current File: =M-x aidermacs-drop-current-file= (=O= in transient menu)
*** Code Actions
- Code Change: =M-x aidermacs-code-change= (=c= in transient menu)
@@ -233,11 +235,10 @@ Session management commands:
- The transient menu is a popup menu that provides a convenient way to access
all aidermacs commands.
- The menu groups commands into categories:
- "Session Control": Basic session management (=a=, =.=, =z=, =o=, =l=, =s=,
=x=)
- - "File Management": File management (=f=, =R=, =w=, =d=, =b=, =L=, =D=)
+ - "File Management": File management (=f=, =w=, =d=, =b=, =L=, =D=, =O=)
- "Code Actions": Code modifications (=c=, =r=, =i=, =t=, =u=)
- "Testing": Unit tests and debugging (=U=, =T=, =X=)
- "Help & Documentation": Questions and explanations (=q=, =e=, =p=, =h=,
=Q=)
- "History & Output": History and output management (=H=, =C=, =m=, =y=,
=g=, =P=)
-- Toggle options are available at the top of relevant sections
Note: The default keybindings in the minor mode map (=C-c C-n=, =C-<return>=,
=C-c C-c=, and =C-c C-z=) are always available when the minor mode is active.
All other commands can be accessed either through =M-x= or through the
transient menu after invoking =M-x aidermacs-transient-menu=.
diff --git a/aidermacs-doom.el b/aidermacs-doom.el
index 4232e676ad..722793c51c 100644
--- a/aidermacs-doom.el
+++ b/aidermacs-doom.el
@@ -16,7 +16,7 @@
(:prefix ("A" . "aidermacs")
(:prefix ("a" . "Add")
:desc "Current file" "c"
#'aidermacs-add-current-file
- :desc "File read-only" "f"
#'aidermacs-current-file-read-only
+ :desc "File read-only" "f"
#'aidermacs-add-current-file-read-only
:desc "Files in window" "w"
#'aidermacs-add-files-in-current-window
:desc "Add Same Type Files under dir" "d"
#'aidermacs-add-same-type-files-under-dir
:desc "Batch direct marked files" "b"
#'aidermacs-batch-add-dired-marked-files
diff --git a/aidermacs.el b/aidermacs.el
index e9b6d6f0a7..dabb26a28e 100644
--- a/aidermacs.el
+++ b/aidermacs.el
@@ -107,34 +107,12 @@ This function can be customized or redefined by the user."
;; Ensure the alias is always available in both compiled and interpreted
modes.
(defalias 'aidermacs-read-string 'aidermacs-plain-read-string))
-(defvar aidermacs--add-file-read-only nil
- "Set model parameters from `aidermacs-menu' buffer-locally.
-Affects the system message too.")
-
-(defun aidermacs--get-add-command-prefix ()
- "Return the appropriate command prefix based on
aidermacs--add-file-read-only."
- (if aidermacs--add-file-read-only "/read-only" "/add"))
-
-(defclass aidermacs--add-file-type (transient-lisp-variable)
- ((variable :initform 'aidermacs--add-file-read-only)
- (format :initform "%k %d %v")
- (reader :initform #'transient-lisp-variable--read-value))
- "Class for toggling aidermacs--add-file-read-only.")
-
(defclass aidermacs--switch-to-buffer-type (transient-lisp-variable)
((variable :initform 'aidermacs--switch-to-buffer-other-frame)
(format :initform "%k %d %v")
(reader :initform #'transient-lisp-variable--read-value))
"Class for toggling aidermacs--switch-to-buffer-other-frame.")
-(transient-define-infix aidermacs--infix-add-file-read-only ()
- "Toggle aidermacs--add-file-read-only between nil and t."
- :class 'aidermacs--add-file-type
- :key "@"
- :description "Read-only mode"
- :reader (lambda (_prompt _initial-input _history)
- (not aidermacs--add-file-read-only)))
-
(transient-define-infix aidermacs--infix-switch-to-buffer-other-frame ()
"Toggle aidermacs--switch-to-buffer-other-frame between nil and t."
:class 'aidermacs--switch-to-buffer-type
@@ -161,14 +139,14 @@ Affects the system message too.")
("x" "Exit Session" aidermacs-exit)]
["File Management"
- (aidermacs--infix-add-file-read-only)
("f" "Add Current File" aidermacs-add-current-file)
- ("R" "Add File Read-Only" aidermacs-current-file-read-only)
+ ("R" "Add File Read-Only" aidermacs-add-current-file-read-only)
("w" "Add Files in Window" aidermacs-add-files-in-current-window)
("d" "Add Files by Type" aidermacs-add-same-type-files-under-dir)
("b" "Add Marked Files" aidermacs-batch-add-dired-marked-files)
("L" "List Added Files" aidermacs-list-added-files)
- ("D" "Drop File from Chat" aidermacs-drop-file)]
+ ("D" "Drop File from Chat" aidermacs-drop-file)
+ ("O" "Drop Current File" aidermacs-drop-current-file)]
["Code Actions"
("c" "Code Change" aidermacs-code-change)
@@ -309,7 +287,7 @@ wrap it in {aidermacs\nstr\naidermacs}. Otherwise return
STR unchanged."
str))
;;;###autoload
-(defun aidermacs-add-or-read-current-file (command-prefix)
+(defun aidermacs-act-on-current-file (command-prefix)
"Send the command \"COMMAND-PREFIX <current buffer file full path>\" to the
corresponding aidermacs comint buffer."
;; Ensure the current buffer is associated with a file
(if (not buffer-file-name)
@@ -323,20 +301,26 @@ wrap it in {aidermacs\nstr\naidermacs}. Otherwise return
STR unchanged."
;; Use the shared helper function to send the command
(aidermacs--send-command command))))
-;; Function to send "/add <current buffer file full path>" to corresponding
aidermacs buffer
;;;###autoload
(defun aidermacs-add-current-file ()
"Send the command \"/add <current buffer file full path>\" to the
corresponding aidermacs comint buffer."
(interactive)
- (aidermacs-add-or-read-current-file (aidermacs--get-add-command-prefix)))
+ (aidermacs-act-on-current-file "/add"))
;;;###autoload
-(defun aidermacs-current-file-read-only ()
+(defun aidermacs-add-current-file-read-only ()
"Send the command \"/read-only <current buffer file full path>\" to the
corresponding aidermacs comint buffer."
(interactive)
- (aidermacs-add-or-read-current-file "/read-only"))
+ (aidermacs-act-on-current-file "/read-only"))
+
+
+;;;###autoload
+(defun aidermacs-drop-current-file ()
+ "Send the command \"/drop <current buffer file full path>\" to the
corresponding aider comint buffer."
+ (interactive)
+ (aidermacs-act-on-current-file "/drop"))
+
-;; New function to add files in all buffers in current emacs window
;;;###autoload
(defun aidermacs-add-files-in-current-window ()
"Add files in all buffers in the current Emacs window to the aidermacs
buffer."
@@ -348,7 +332,7 @@ wrap it in {aidermacs\nstr\naidermacs}. Otherwise return
STR unchanged."
(mapcar 'window-buffer (window-list)))))
(setq files (delq nil files))
(if files
- (let ((command (concat (aidermacs--get-add-command-prefix) " "
(mapconcat 'identity files " "))))
+ (let ((command (concat "/add " (mapconcat 'identity files " "))))
(aidermacs--send-command command nil))
(message "No files found in the current window."))))
@@ -461,7 +445,6 @@ Sends the \"/ls\" command and returns the list of files via
callback."
aidermacs--current-output)
-;; New function to get command from user and send it prefixed with "/ask "
;;;###autoload
(defun aidermacs-ask-question ()
"Prompt the user for a command and send it to the corresponding aidermacs
comint buffer prefixed with \"/ask \".
@@ -493,7 +476,6 @@ If cursor is inside a function, include the function name
as context."
(let ((command (format "/ask %s" question)))
(aidermacs--send-command command t))))
-;; New function to get command from user and send it prefixed with "/help "
;;;###autoload
(defun aidermacs-help ()
"Prompt the user for a command and send it to the corresponding aidermacs
comint buffer prefixed with \"/help \"."
@@ -501,7 +483,6 @@ If cursor is inside a function, include the function name
as context."
(let ((command (aidermacs-read-string "Enter help question: ")))
(aidermacs-send-command-with-prefix "/help " command)))
-;; New function to get command from user and send it prefixed with "/architect
"
;;;###autoload
(defun aidermacs-architect-discussion ()
"Prompt the user for a command and send it to the corresponding aidermacs
comint buffer prefixed with \"/architect \"."
@@ -509,7 +490,6 @@ If cursor is inside a function, include the function name
as context."
(let ((command (aidermacs-read-string "Enter architect discussion question:
")))
(aidermacs-send-command-with-prefix "/architect " command)))
-;; New function to get command from user and send it prefixed with "/ask ",
might be tough for AI at this moment
;;;###autoload
(defun aidermacs-debug-exception ()
"Prompt the user for a command and send it to the corresponding aidermacs
comint buffer prefixed with \"/debug \",
@@ -524,7 +504,6 @@ replacing all newline characters except for the one at the
end."
(interactive)
(aidermacs--send-command "go ahead" t))
-;; New function to show the last commit using magit
;;;###autoload
(defun aidermacs-magit-show-last-commit ()
"Show the last commit message using Magit.
@@ -534,7 +513,6 @@ If Magit is not installed, report that it is required."
(magit-show-commit "HEAD")
(message "Magit is required to show the last commit.")))
-;; Modified function to get command from user and send it based on selected
region
;;;###autoload
(defun aidermacs-undo-last-change ()
"Undo the last change made by aidermacs."
@@ -566,7 +544,6 @@ If point is in a function, refactor that function."
(aidermacs--send-command command t))
(message "No region selected and no function found at point."))))
-;; New function to explain the code in the selected region
;;;###autoload
(defun aidermacs-region-explain ()
"Get a command from the user and send it to the corresponding aidermacs
comint buffer based on the selected region.
@@ -586,7 +563,6 @@ The command will be formatted as \"/ask \" followed by the
text from the selecte
(aidermacs--send-command command t))
(message "No region selected.")))
-;; New function to ask aidermacs to explain the function under the cursor
;;;###autoload
(defun aidermacs-function-explain ()
"Ask aidermacs to explain the function under the cursor.
@@ -608,7 +584,6 @@ Prompts user for specific questions about the function."
(aidermacs-region-explain)
(aidermacs-function-explain)))
-;; New function to explain the symbol at line
;;;###autoload
(defun aidermacs-explain-symbol-under-point ()
"Ask aidermacs to explain symbol under point, given the code line as
background info."
@@ -627,9 +602,6 @@ Prompts user for specific questions about the function."
(aidermacs-add-current-file)
(aidermacs--send-command (concat prefix command) t))
-;;; functions for dired related
-
-;; New function to add multiple Dired marked files to aidermacs buffer
;;;###autoload
(defun aidermacs-batch-add-dired-marked-files ()
"Add multiple Dired marked files to the aidermacs buffer with the \"/add\"
command."
@@ -640,7 +612,6 @@ Prompts user for specific questions about the function."
(aidermacs--send-command command t))
(message "No files marked in Dired."))))
-;; New function to add all files with same suffix as current file under
current directory
;;;###autoload
(defun aidermacs-add-same-type-files-under-dir ()
"Add all files with same suffix as current file under current directory to
aidermacs.
@@ -662,8 +633,6 @@ If there are more than 40 files, refuse to add and show
warning message."
(message "Added %d files with suffix .%s"
(length files) current-suffix)))))
-;;; functions for test fixing
-
;;;###autoload
(defun aidermacs-write-unit-test ()
"Generate unit test code for current buffer.