branch: elpa/aidermacs
commit 550ffcc07aff4447382f5350f07869973da8095a
Author: Mingde (Matthew) Zeng <[email protected]>
Commit: Mingde (Matthew) Zeng <[email protected]>
Fix prompt, add video demo
Fixes #4
---
README.md | 60 ++++++++++++++++++++++++++++++++++++++++++---
aidermacs-backend-comint.el | 2 ++
aidermacs-backend-vterm.el | 2 ++
aidermacs-backends.el | 3 ++-
aidermacs.el | 5 ----
5 files changed, 63 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index c962f1d961..25e66d0652 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,10 @@ Missing [Cursor](https://cursor.sh) but prefer living in
Emacs? Aidermacs brings
<img style='height: auto; width: 80%; object-fit: contain'
src="./introscreen.png">
</p>
+### Video Demo!
+
+[<img src="https://img.youtube.com/vi/TPpyxaGZg1A/0.jpg"
width=400>](https://www.youtube.com/watch?v=TPpyxaGZg1A)
+
### Community-Driven Development
Aidermacs thrives on community involvement. We believe collaborative
development with user and contributor input creates the best software. We
encourage you to:
@@ -34,14 +38,14 @@ Your contributions are essential for making Aidermacs the
best AI pair programmi
<img src = "https://contrib.rocks/image?repo=MatthewZMD/aidermacs"/>
</a>
-## Installation
+## Quick Start
-### Requirements
+1. Requirements
- Emacs ≥ 28.1
- [Aider](https://aider.chat/docs/install.html)
- [Transient](https://github.com/magit/transient)
-### Sample Config
+2. Modify this **sample config** to your Emacs `init.el`:
```emacs-lisp
(use-package aidermacs
:vc (:url "https://github.com/MatthewZMD/aidermacs" :rev :newest)
@@ -57,6 +61,8 @@ Your contributions are essential for making Aidermacs the
best AI pair programmi
(aidermacs-use-architect-mode t)
(aidermacs-default-model "sonnet"))
```
+3. Open a project and run `M-x aidermacs-transient-menu` or `C-c p` (where you
bind it)
+4. Add files and start coding with AI!
## Configuration
@@ -380,3 +386,51 @@ With `Aidermacs`, you get:
- We prioritize features and improvements that directly benefit Emacs
users, ensuring a tool that evolves with your needs.
... and more to come 🚀
+
+## Troubleshooting
+
+### Aider not found
+- Ensure Aider is installed: `pip install aider-chat`
+- Check `aidermacs-program` points to correct path
+
+### No response from AI
+- Verify API keys are set correctly
+- Check model selection matches your API access
+- Try simpler prompts first
+
+### Ediff not working
+- Ensure `ediff` is installed
+- Check file permissions
+- Try restarting Emacs
+
+## Example Workflows
+
+### Implementing a Feature
+1. Add relevant files with `f` or `F`
+2. Switch to Architect mode with `3`
+3. Describe the feature: "/architect Implement user login system"
+4. Review changes with Ediff
+5. Accept/reject changes
+
+### Debugging Code
+1. Add file with error
+2. Place cursor on error
+3. Run `!` (Debug Exception)
+4. Follow AI's debugging steps
+
+### Writing Tests
+1. Add file to test
+2. Run `t` (Write Test)
+3. Review generated tests
+4. Run tests to verify
+
+## FAQ
+
+### How is this different from Copilot?
+Aidermacs uses Aider which is more focused on code modification and
architecture rather than just completion.
+
+### Can I use my own AI models?
+Yes! Aidermacs supports any OpenAI-compatible API endpoint.
+
+### Is my code sent to the AI provider?
+Yes, the code you add to the session is sent to the AI provider. Be mindful of
sensitive code.
diff --git a/aidermacs-backend-comint.el b/aidermacs-backend-comint.el
index e85f385d2d..568fa1bfa5 100644
--- a/aidermacs-backend-comint.el
+++ b/aidermacs-backend-comint.el
@@ -104,6 +104,8 @@ that was matched at the start of the current syntax block.")
(defvar-local aidermacs--comint-output-temp ""
"Temporary output variable storing the raw output string.")
+(defvar aidermacs-prompt-regexp)
+
(defun aidermacs--comint-output-filter (output)
"Accumulate OUTPUT string until a prompt is detected, then store it."
(when (and (aidermacs--is-aidermacs-buffer-p) (not (string-empty-p output)))
diff --git a/aidermacs-backend-vterm.el b/aidermacs-backend-vterm.el
index 868a463e0c..767a933cfc 100644
--- a/aidermacs-backend-vterm.el
+++ b/aidermacs-backend-vterm.el
@@ -62,6 +62,8 @@
:type 'string
:group 'aidermacs)
+(defvar aidermacs-prompt-regexp)
+
(defun aidermacs--vterm-check-finish-sequence-repeated (proc orig-filter
start-point)
"Check for the finish sequence in PROC's buffer.
PROC is the process to check. ORIG-FILTER is the original process filter.
diff --git a/aidermacs-backends.el b/aidermacs-backends.el
index 57c59a16b4..6563c66747 100644
--- a/aidermacs-backends.el
+++ b/aidermacs-backends.el
@@ -146,7 +146,8 @@ Remove any files that don't exist."
;; <file>\nAdd file to the chat?
((string-match "Add file to the chat?" line)
- (add-to-list 'aidermacs--tracked-files last-line))
+ (add-to-list 'aidermacs--tracked-files last-line)
+ (aidermacs--prepare-for-code-edit))
;; <file> is already in the chat as an editable file
((string-match "\\(\\./\\)?\\(.+\\) is already in the chat as an
editable file" line)
diff --git a/aidermacs.el b/aidermacs.el
index acd1cdcdad..60e72ad4ca 100644
--- a/aidermacs.el
+++ b/aidermacs.el
@@ -331,7 +331,6 @@ and syntax highlighting to match the original file."
This is called when all ediff sessions are complete.
Kills all pre-edit buffers that were created to store original file content."
(interactive)
- (message "Cleaning up")
(with-current-buffer (get-buffer (aidermacs-get-buffer-name))
;; Clean up buffers in the tracking list
(dolist (file-pair aidermacs--pre-edit-file-buffers)
@@ -386,7 +385,6 @@ the next file in the ediff queue if any remain."
Returns a list of files that have been modified according to the output."
(let ((edited-files nil)
(output aidermacs--current-output))
- (message "Detecting edited files from output...")
(when output
(let ((lines (split-string output "\n"))
(last-line ""))
@@ -395,14 +393,12 @@ Returns a list of files that have been modified according
to the output."
;; Case 1: Look for "Applied edit to <filename>" pattern
((string-match "Applied edit to \\(\\./\\)?\\(.+\\)" line)
(when-let ((file (match-string 2 line)))
- (message "Found edited file (applied edit): %s" file)
(push file edited-files)))
;; Case 2: Look for a filename followed by triple backticks on next
line
((string-match "^```" line)
(let ((potential-file (string-trim last-line)))
(when (not (string-empty-p potential-file))
- (message "Found potential file (code block): %s"
potential-file)
(push potential-file edited-files)))))
(setq last-line line))))
@@ -414,7 +410,6 @@ Returns a list of files that have been modified according
to the output."
(lambda (file)
(file-exists-p (expand-file-name file
project-root)))
unique-files)))
- (message "Detected valid edited files: %s" valid-files)
(nreverse valid-files))))
(defvar-local aidermacs--ediff-queue nil