branch: elpa/aidermacs commit 9fc3b047754a4ef3fe1d5c664f84170a86a09a4b Author: Kang Tu <tni...@gmail.com> Commit: GitHub <nore...@github.com>
Feat: Git repo find / mark / add files, and buffer send command for .aider file (#7) * add aider-send-line-under-cursor * feat: add Aider mode with key binding for .aider files * add scratch.aider, for batch / reproducible of aider command * make switch buffer shortcut for aider-mode * feat: add aider-send-paragraph function and key binding in aider-mode * reorder function, change short-cut to fit ess key binding * feat: add function to batch add Dired marked files to Aider buffer * feat: add interactive function to run find-name-dired from Git repository root * update menu * update README * remove unused function shortcut --------- Co-authored-by: Kang Tu <kang...@apple.com> --- README.org | 6 ++++- aider.el | 74 +++++++++++++++++++++++++++++++++++++++++++++-------- scratch.aider | 24 +++++++++++++++++ transient_menu.png | Bin 88948 -> 121113 bytes 4 files changed, 92 insertions(+), 12 deletions(-) diff --git a/README.org b/README.org index 8ba07305c6..5382646e3a 100644 --- a/README.org +++ b/README.org @@ -17,7 +17,7 @@ - Git Repository-Specific aider Sessions in Emacs: Automatically identify the Git repository of the current file and create a new aider session for it. Multiple aider sessions can exist for different Git repositories. -- Batch add files from dired buffer (aider-batch-add-dired-marked-files): Add multiple Dired marked files to the Aider buffer +- Batch add files from dired buffer (aider-batch-add-dired-marked-files): Add multiple Dired marked files to the Aider buffer. These files can be searched from repo with aider-repo-find-name-dired command - Region-Based Refactor Support (aider-region-refactor): You can select a region (e.g., a code block) in a file and ask aider to refactor it. @@ -39,6 +39,10 @@ (global-set-key (kbd "C-c a") 'aider-transient-menu)) #+END_SRC +** Optional + +- If you use helm, maybe you can load the helm-aider.el manually. That file added support of command history and completion from helm. + * Screenshot [[file:./screenshot.png]] diff --git a/aider.el b/aider.el index a2bed3a8a1..eae1110589 100644 --- a/aider.el +++ b/aider.el @@ -49,11 +49,15 @@ This function can be customized or redefined by the user." ["Aider: AI pair programming" ["Aider process" ("a" "Run Aider" aider-run-aider) - ("f" "Add Current File" aider-add-current-file) ("z" "Switch to Aider Buffer" aider-switch-to-buffer) ("l" "Clear Aider" aider-clear) ;; Menu item for clear command ("s" "Reset Aider" aider-reset) ;; Menu item for reset command ] + ["Add file to aider" + ("f" "Add Current File" aider-add-current-file) + ("F" "Find Files in the Git Repo" aider-repo-find-name-dired) + ("b" "Batch Add Dired Marked Files" aider-batch-add-dired-marked-files) + ] ["Code change" ("c" "Code Change" aider-code-change) ("r" "Region Code Refactor" aider-region-refactor) @@ -161,16 +165,6 @@ COMMAND should be a string representing the command to send." ;; Use the shared helper function to send the command (aider--send-command command t)))) -;; New function to add multiple Dired marked files to Aider buffer -(defun aider-batch-add-dired-marked-files () - "Add multiple Dired marked files to the Aider buffer with the \"/add\" command." - (interactive) - (let ((files (dired-get-marked-files))) - (if files - (let ((command (concat "/add " (mapconcat 'expand-file-name files " ")))) - (aider--send-command command)) - (message "No files marked in Dired.")))) - ;; Function to send a custom command to corresponding aider buffer (defun aider-general-command () "Prompt the user to input COMMAND and send it to the corresponding aider comint buffer." @@ -256,6 +250,64 @@ The command will be formatted as \"/architect \" followed by the user command an (let ((line (thing-at-point 'line t))) (aider--send-command (concat "/ask " (string-trim line))))) +;;; functions for dired related + +;; New function to add multiple Dired marked files to Aider buffer +(defun aider-batch-add-dired-marked-files () + "Add multiple Dired marked files to the Aider buffer with the \"/add\" command." + (interactive) + (let ((files (dired-get-marked-files))) + (if files + (let ((command (concat "/add " (mapconcat 'expand-file-name files " ")))) + (aider--send-command command)) + (message "No files marked in Dired.")))) + +;; New function to run `find-name-dired` from the Git repository root directory +(defun aider-repo-find-name-dired (pattern) + "Run `find-name-dired` from the Git repository root directory with the given PATTERN." + (interactive "sFind name (pattern): ") + (let* ((git-repo-path (shell-command-to-string "git rev-parse --show-toplevel")) + (repo-path (string-trim git-repo-path))) + (if (string-match-p "fatal" repo-path) + (message "Not in a git repository") + (find-name-dired repo-path pattern)))) + +;;; functions for .aider file + +;; New function to send "<line under cursor>" to the Aider buffer +(defun aider-send-line-under-cursor () + "Send the command \"ask <line under cursor>\" to the Aider buffer." + (interactive) + (let ((line (thing-at-point 'line t))) + (aider--send-command (string-trim line)))) + +;;; New function to send the current paragraph to the Aider buffer +(defun aider-send-paragraph () + "Send the current paragraph to the Aider buffer." + (interactive) + (let ((paragraph (buffer-substring-no-properties + (save-excursion + (backward-paragraph) + (point)) + (save-excursion + (forward-paragraph) + (point))))) + (aider--send-command (string-trim paragraph)))) + +(defun aider-mode-setup () + "Setup key bindings for Aider mode." + (local-set-key (kbd "C-c C-n") 'aider-send-line-under-cursor) + (local-set-key (kbd "C-c C-c") 'aider-send-paragraph)) + +(add-hook 'aider-mode-hook 'aider-mode-setup) + +(define-derived-mode aider-mode fundamental-mode "Aider" + "Major mode for editing Aider files." + ;; Add any additional setup for aider-mode here +) + +(add-to-list 'auto-mode-alist '("\\.aider\\'" . aider-mode)) + (provide 'aider) ;;; aider.el ends here diff --git a/scratch.aider b/scratch.aider new file mode 100644 index 0000000000..0750a347e8 --- /dev/null +++ b/scratch.aider @@ -0,0 +1,24 @@ + +/ask what this repo is about? + +# This repository appears to be focused on an Emacs package called "Aider," which +# provides an interactive interface for communicating with an AI tool (likely +# related to programming assistance). The package allows users to send commands +# and queries to the Aider program, which seems to facilitate AI pair programming +# or code assistance. + +# Key features of the repository include: + +# • Interactive Commands: Users can run commands like adding files, asking +# questions, and performing code changes through a transient menu. +# • Integration with Git: The package can generate buffer names based on the +# current Git repository, indicating that it is designed to work within a +# version-controlled environment. +# • Custom Commands: Users can send custom commands to the Aider buffer, allowing +# for flexible interaction with the AI. +# • File Type Association: The package defines a major mode (aider-mode) for +# files with the .aider extension, which includes specific key bindings and +# functionalities tailored for those files. + +# Overall, the repository is aimed at enhancing the coding experience by +# leveraging AI assistance within the Emacs text editor. diff --git a/transient_menu.png b/transient_menu.png index 4bd0a6dae8..22610cf5d0 100644 Binary files a/transient_menu.png and b/transient_menu.png differ