branch: elpa/aidermacs commit 2a29cffb7658eeb307c730bb2ac3e631c1448c5e Author: Mingde (Matthew) Zeng (aider) <matthew...@posteo.net> Commit: Mingde (Matthew) Zeng <matthew...@posteo.net>
feat: Add aidermacs-auto-commits and M-x aidermacs-run-in-current-dir= Closes #9 Signed-off-by: Mingde (Matthew) Zeng <matthew...@posteo.net> --- README.org | 27 +++++++++++++++++++++------ aidermacs.el | 50 ++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 65 insertions(+), 12 deletions(-) diff --git a/README.org b/README.org index 6fa5ddfd1f..c2980e4c33 100644 --- a/README.org +++ b/README.org @@ -83,6 +83,7 @@ With =aidermacs=, you get: * Configuration ** Terminal Backend Selection + Choose your preferred terminal backend by setting =aidermacs-backend=: =vterm= provides better terminal compatibility and bracketed paste support, while =comint= is a simpler, built-in option. @@ -96,7 +97,19 @@ Available backends: - =comint= (default): Uses Emacs' built-in terminal emulation - =vterm=: Leverages vterm for better terminal compatibility +** Disabling Auto-Commits + +By default, Aidermacs automatically commits changes made by the AI. Some users may find this behavior disruptive. You can disable auto-commits by setting =aidermacs-auto-commits= to =nil=: + +#+BEGIN_SRC emacs-lisp +;; Disable auto-commits +(setq aidermacs-auto-commits nil) +#+END_SRC + +With auto-commits disabled, you'll need to manually commit changes using your preferred Git workflow. + ** Multiline Input Configuration + When using the comint backend, you can customize the key binding for multiline input: #+BEGIN_SRC emacs-lisp @@ -140,6 +153,7 @@ After adding files to the session, switch to the =*aidermacs*= buffer to interac *** Session Control - Run aidermacs: =M-x aidermacs-run-aidermacs= (=a= in transient menu) +- Run in current directory: =M-x aidermacs-run-in-current-dir= (=.= in transient menu) - Switch to Buffer: =M-x aidermacs-switch-to-buffer= (=z= in transient menu) - Select Model: =M-x aidermacs-change-model= (=o= in transient menu) - Clear Session: =M-x aidermacs-clear= (=l= in transient menu) @@ -215,11 +229,12 @@ Session management commands: - Access all commands through the transient menu: =M-x aidermacs-transient-menu= - The transient menu is a popup menu that provides a convenient way to access all aidermacs commands. - The menu groups commands into categories: - - "aidermacs Process": Basic session management (=a=, =z=, =o=, =l=, =s=, =x=) - - "Add File to aidermacs": File management (=f=, =R=, =w=, =d=, =b=) - - "Code Change": Code modifications (=t=, =c=, =r=, =i=, =U=, =T=, =m=, =u=) - - "Discussion": Questions and explanations (=q=, =y=, =e=, =p=, =D=) - - "Other": Additional commands (=g=, =Q=, =p=, =h=) -- Toggle options are available at the top of some sections + - "Session Control": Basic session management (=a=, .=, =z=, =o=, =l=, =s=, =x=) + - "File Management": File management (=f=, =R=, =w=, =d=, =b=, =L=, =D=) + - "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.el b/aidermacs.el index 68bc2fdcde..e9b6d6f0a7 100644 --- a/aidermacs.el +++ b/aidermacs.el @@ -40,6 +40,27 @@ :type '(repeat string) :group 'aidermacs) +(defcustom aidermacs-subtree-only nil + "When non-nil, run aider with --subtree-only flag to only consider files in current directory. +This is useful for working in monorepos where you want to limit aider's scope." + :type 'boolean + :group 'aidermacs) + +(defcustom aidermacs-auto-commits t + "When non-nil, enable auto-commits of LLM changes. +When nil, disable auto-commits requiring manual git commits." + :type 'boolean + :group 'aidermacs) + +(defun aidermacs-project-root () + "Get the project root using project.el, VC, or fallback to file directory." + (or (when (fboundp 'project-current) + (project-root (project-current))) + (vc-git-root default-directory) + (when buffer-file-name + (file-name-directory buffer-file-name)) + default-directory)) + (defcustom aidermacs--switch-to-buffer-other-frame nil "When non-nil, open aidermacs buffer in a new frame using `switch-to-buffer-other-frame'. When nil, use standard `display-buffer' behavior." @@ -131,7 +152,8 @@ Affects the system message too.") ["aidermacs: AI Pair Programming" ["Session Control" (aidermacs--infix-switch-to-buffer-other-frame) - ("a" "Run aidermacs" aidermacs-run-aidermacs) + ("a" "Start/Open Aidermacs" aidermacs-run-aidermacs) + ("." "Run in Current Dir" aidermacs-run-in-current-dir) ("z" "Switch to Buffer" aidermacs-switch-to-buffer) ("o" "Select Model" aidermacs-change-model) ("l" "Clear Session" aidermacs-clear) @@ -193,18 +215,34 @@ If not in a git repository and no buffer file exists, an error is raised." (error "Not in a git repository and current buffer is not associated with a file. Please open a file or start aidermacs from within a git repository."))))) ;;;###autoload -(defun aidermacs-run-aidermacs (&optional edit-args) +(defun aidermacs-run-aidermacs (&optional edit-args directory) "Run aidermacs process using the selected backend. -With the universal argument, prompt to edit aidermacs-args before running." +With the universal argument EDIT-ARGS, prompt to edit aidermacs-args before running. +Optional DIRECTORY parameter sets working directory, defaults to project root." (interactive "P") - (let* ((buffer-name (aidermacs-buffer-name)) + (let* ((default-directory (or directory (aidermacs-project-root))) + (buffer-name (aidermacs-buffer-name)) (current-args (if edit-args (split-string (read-string "Edit aidermacs arguments: " (mapconcat 'identity aidermacs-args " "))) - aidermacs-args))) + aidermacs-args)) + (final-args (append current-args + (when (not aidermacs-auto-commits) + '("--no-auto-commits")) + (when aidermacs-subtree-only + '("--subtree-only"))))) (if (get-buffer buffer-name) (aidermacs-switch-to-buffer) - (aidermacs-run-aidermacs-backend aidermacs-program current-args buffer-name)))) + (aidermacs-run-aidermacs-backend aidermacs-program final-args buffer-name) + (aidermacs-switch-to-buffer)))) + +;;;###autoload +(defun aidermacs-run-in-current-dir () + "Run aidermacs in the current directory with --subtree-only flag. +This is useful for working in monorepos where you want to limit aider's scope." + (interactive) + (let ((aidermacs-subtree-only t)) + (aidermacs-run-aidermacs nil default-directory))) (defun aidermacs--send-command (command &optional switch-to-buffer callback) "Send COMMAND to the corresponding aidermacs process.