branch: elpa/aidermacs commit d775ffafaa138fa9d25abc27be1af5225362c7bf Author: Mingde (Matthew) Zeng <matthew...@posteo.net> Commit: Mingde (Matthew) Zeng <matthew...@posteo.net>
Add logo --- README.org => README.md | 208 +++++++++++++++++++++++------------------------- aidermacs.png | Bin 0 -> 116788 bytes 2 files changed, 101 insertions(+), 107 deletions(-) diff --git a/README.org b/README.md similarity index 52% rename from README.org rename to README.md index 40bc2403d6..57ffbf0358 100644 --- a/README.org +++ b/README.md @@ -1,9 +1,12 @@ -#+TITLE: Aidermacs: AI Pair Programming in Emacs -#+OPTIONS: toc:2 +<p align="center"> + <img style='height: auto; width: 40%; object-fit: contain' src="./aidermacs.png"> +</p> -* Introduction +# Aidermacs: AI Pair Programming in Emacs -Miss using [[https://cursor.sh][Cursor]] but prefer working in Emacs? Aidermacs brings Cursor-like AI-powered development to your Emacs workflow by integrating [[https://github.com/paul-gauthier/aider][Aider]], one of the most powerful open-source AI pair programming tools available. As a community-driven project, Aidermacs prioritizes the needs and preferences of Emacs users. It provides the same powerful features you'd find in Cursor: +## Introduction + +Miss using [Cursor](https://cursor.sh) but prefer working in Emacs? Aidermacs brings Cursor-like AI-powered development to your Emacs workflow by integrating [Aider](https://github.com/paul-gauthier/aider), one of the most powerful open-source AI pair programming tools available. As a community-driven project, Aidermacs prioritizes the needs and preferences of Emacs users. It provides the same powerful features you'd find in Cursor: - Top performance on the SWE Bench, solving real GitHub issues in major open source projects - Seamless Git integration with automatic, sensible commit messages @@ -12,24 +15,24 @@ Miss using [[https://cursor.sh][Cursor]] but prefer working in Emacs? Aidermacs - Broad language support including Python, JavaScript, TypeScript, PHP, HTML, CSS, and more - Compatibility with leading AI models like Claude 3.5 Sonnet, DeepSeek, and GPT-4o -* Community-Driven Development +### Community-Driven Development -Aidermacs thrives on community involvement. We believe that the best software is built collaboratively, with input from users and contributors. We encourage you to: +Aidermacs thrives on community involvement. We believe that the best software is built collaboratively, with input from users and contributors. We encourage you to: -- Contribute Code: Submit pull requests with bug fixes, new features, or improvements to existing functionality. -- Report Issues: Let us know about any bugs, unexpected behavior, or feature requests through GitHub Issues. -- Share Ideas: Participate in discussions and propose new ideas for making Aidermacs even better. +- Contribute Code: Submit pull requests with bug fixes, new features, or improvements to existing functionality. +- Report Issues: Let us know about any bugs, unexpected behavior, or feature requests through GitHub Issues. +- Share Ideas: Participate in discussions and propose new ideas for making Aidermacs even better. - Improve Documentation: Help us make the documentation clearer, more comprehensive, and easier to use. Your contributions are essential to making Aidermacs the best AI pair programming tool for Emacs! -** Why Aidermacs over aider.el? +### Why Aidermacs over aider.el? -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. +Aidermacs is designed to provide a more Emacs-native experience while still integrating with [Aider](https://github.com/paul-gauthier/aider). It began as a fork of [aider.el](https://github.com/tninja/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. +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: +With `Aidermacs`, you get: 1. Intelligent Model Selection - Automatic discovery of available models from multiple providers @@ -39,7 +42,7 @@ With =Aidermacs=, you get: - Support for both popular pre-configured models and dynamically discovered ones 2. Flexible Terminal Backend Support - - =Aidermacs= supports multiple terminal backends (comint and vterm) for better compatibility and performance + - `Aidermacs` supports multiple terminal backends (comint and vterm) for better compatibility and performance - Easy configuration to choose your preferred terminal emulation - Extensible architecture for adding new backends @@ -48,174 +51,173 @@ With =Aidermacs=, you get: - Ensures clarity and readability without additional configuration. 4. Better Support for Multiline Input - - =aider= is primarily designed as a command-line program, where multiline input is restricted by terminal limitations. + - `aider` is primarily designed as a command-line program, where multiline input is restricted by terminal limitations. - Terminal-based tools require special syntax or manual formatting to handle multiline input, which can be cumbersome and unintuitive. - - =Aidermacs= eliminates these restrictions by handling multiline prompts natively within Emacs, allowing you to compose complex AI requests just like any other text input. - - Whether you're pasting blocks of code or refining AI-generated responses, multiline interactions in =Aidermacs= feel natural and seamless. + - `Aidermacs` eliminates these restrictions by handling multiline prompts natively within Emacs, allowing you to compose complex AI requests just like any other text input. + - Whether you're pasting blocks of code or refining AI-generated responses, multiline interactions in `Aidermacs` feel natural and seamless. 5. Enhanced File Management from Emacs - - List files currently in chat with =M-x aidermacs-list-added-files= - - Drop specific files from chat with =M-x aidermacs-drop-file= - - View output history with =M-x aidermacs-show-output-history= + - List files currently in chat with `M-x aidermacs-list-added-files` + - Drop specific files from chat with `M-x aidermacs-drop-file` + - View output history with `M-x aidermacs-show-output-history` - and more 6. Greater Configurability - - =Aidermacs= offers more customization options to tailor the experience to your preferences. + - `Aidermacs` offers more customization options to tailor the experience to your preferences. 7. Streamlined Transient Menu Selection - The transient menus have been completely redesigned to encompass functionality and ergonomics, prioritizing user experience. 8. Community-Driven Development - - =Aidermacs= is actively developed and maintained by the community, incorporating user feedback and contributions. + - `Aidermacs` is actively developed and maintained by the community, incorporating user feedback and contributions. - We prioritize features and improvements that directly benefit Emacs users, ensuring a tool that evolves with your needs. - ... and more to come 🚀 -* Installation +## Installation -*** Requirements +### Requirements - Emacs ≥ 26.1 -- [[https://aider.chat/docs/install.html][Aider]] -- [[https://github.com/magit/transient][Transient]] +- [Aider](https://aider.chat/docs/install.html) +- [Transient](https://github.com/magit/transient) -*** Sample Config With Straight -#+BEGIN_SRC emacs-lisp +### Sample Config With Straight +```emacs-lisp (use-package aidermacs :straight (:host github :repo "MatthewZMD/aidermacs" :files ("*.el")) :config (setq aidermacs-args '("--model" "anthropic/claude-3-5-sonnet-20241022")) (setenv "ANTHROPIC_API_KEY" anthropic-api-key) (global-set-key (kbd "C-c a") 'aidermacs-transient-menu)) -#+END_SRC +``` -*** Sample Config With Doom Emacs -#+BEGIN_SRC emacs-lisp +### Sample Config With Doom Emacs +```emacs-lisp (package! aidermacs :recipe (:host github :repo "MatthewZMD/aidermacs" :files ("*.el"))) -#+END_SRC +``` -* Configuration +## Configuration -** Terminal Backend Selection +### Terminal Backend Selection -Choose your preferred terminal backend by setting =Aidermacs-backend=: +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. +`vterm` provides better terminal compatibility and bracketed paste support, while `comint` is a simpler, built-in option. -#+BEGIN_SRC emacs-lisp +```emacs-lisp ;; Use vterm backend (default is comint) (setq aidermacs-backend 'vterm) -#+END_SRC +``` Available backends: -- =comint= (default): Uses Emacs' built-in terminal emulation -- =vterm=: Leverages vterm for better terminal compatibility +- `comint` (default): Uses Emacs' built-in terminal emulation +- `vterm`: Leverages vterm for better terminal compatibility -** Re-Enable Auto-Commits +### Re-Enable Auto-Commits -Aider by default automatically commits changes made by the AI. We find this behavior /very/ intrusive, so we disabled it for you. You can re-enable auto-commits by setting =aidermacs-auto-commits= to =t=: +Aider by default automatically commits changes made by the AI. We find this behavior /very/ intrusive, so we disabled it for you. You can re-enable auto-commits by setting `aidermacs-auto-commits` to `t`: -#+BEGIN_SRC emacs-lisp +```emacs-lisp ;; Enable auto-commits (setq aidermacs-auto-commits t) -#+END_SRC +``` With auto-commits disabled, you'll need to manually commit changes using your preferred Git workflow. -** Multiline Input Configuration +### Multiline Input Configuration When using the comint backend, you can customize the key binding for multiline input: -#+BEGIN_SRC emacs-lisp +```emacs-lisp ;; Change multiline input key (default is S-<return>) (setq aidermacs-comint-multiline-newline-key "C-<return>") -#+END_SRC +``` -This key allows you to enter multiple lines without sending the command to Aider. Press =RET= normally to send the command. +This key allows you to enter multiple lines without sending the command to Aider. Press `RET` normally to send the command. -* Usage +## Usage This section provides a step-by-step guide on how to use Aidermacs for AI-assisted pair programming in Emacs. -** Getting Started +### Getting Started The main interface to Aidermacs is through its transient menu system (similar to Magit). Access it with: -#+BEGIN_SRC +``` M-x aidermacs-transient-menu -#+END_SRC +``` Or bind it to a key in your config: -#+BEGIN_SRC emacs-lisp +```emacs-lisp (global-set-key (kbd "C-c a") 'aidermacs-transient-menu) -#+END_SRC +``` -** Core Workflow +### Core Workflow -*** 1. Start a Session +#### 1. Start a Session From the transient menu: -- =a= Start/open session (auto-detects project root) -- =.= Start in current directory (good for monorepos) -- =^= Toggle "Start in New Frame" option -- =o= Change AI model +- `a` Start/open session (auto-detects project root) +- `.` Start in current directory (good for monorepos) +- `^` Toggle "Start in New Frame" option +- `o` Change AI model -The session buffer will be named =*aidermacs:your-repo-name*= where you can interact with the AI. +The session buffer will be named `*aidermacs:your-repo-name*` where you can interact with the AI. -*** 2. Quick Actions +#### 2. Quick Actions Most common operations are available directly: -- =f= Add current file to chat -- =c= Request code changes -- =r= Refactor code at point/region -- =d= Drop current file from chat -- =g= Accept AI's proposal ("go ahead") +- `f` Add current file to chat +- `c` Request code changes +- `r` Refactor code at point/region +- `d` Drop current file from chat +- `g` Accept AI's proposal ("go ahead") -*** 3. Specialized Commands +#### 3. Specialized Commands Access more specific commands through submenus: -**** File Commands (=F=) -- Add files: current (=f=), read-only (=r=), window (=w=), directory (=d=), marked in dired (=m=) -- Drop files: specific (=j=), current (=k=) -- List files in chat (=l=) +##### File Commands (`F`) +- Add files: current (`f`), read-only (`r`), window (`w`), directory (`d`), marked in dired (`m`) +- Drop files: specific (`j`), current (`k`) +- List files in chat (`l`) -**** Code Commands (=C=) -- Code changes (=c=) -- Refactoring (=r=) -- Implement TODOs (=i=) -- Testing: write (=t=), fix (=T=) -- Debug exceptions (=x=) -- Undo changes (=u=) +##### Code Commands (`C`) +- Code changes (`c`) +- Refactoring (`r`) +- Implement TODOs (`i`) +- Testing: write (`t`), fix (`T`) +- Debug exceptions (`x`) +- Undo changes (`u`) -**** Understanding Code -- =m= Show last commit -- =q= Ask questions -- =e= Explain code at point/region -- =p= Explain symbol under point +##### Understanding Code +- `m` Show last commit +- `q` Ask questions +- `e` Explain code at point/region +- `p` Explain symbol under point -**** Other Features -- =H= View session history -- =L= Copy last AI output -- =l= Clear buffer -- =h= Get help +##### Other Features +- `H` View session history +- `L` Copy last AI output +- `l` Clear buffer +- `h` Get help -** Working with Code Blocks +### Working with Code Blocks -When editing =.aider.prompt.org= or other files, these keybindings are available: +When editing `.aider.prompt.org` or other files, these keybindings are available: -- =C-c C-n= or =C-<return>=: Send line/region line-by-line -- =C-c C-c=: Send block/region as whole -- =C-c C-z=: Switch to Aidermacs buffer +- `C-c C-n` or `C-<return>`: Send line/region line-by-line +- `C-c C-c`: Send block/region as whole +- `C-c C-z`: Switch to Aidermacs buffer -** Prompt Files +### Prompt Files -The =.aider.prompt.org= file (created with =M-x aidermacs-open-prompt-file=) is useful for: +The `.aider.prompt.org` file (created with `M-x aidermacs-open-prompt-file`) is useful for: - Storing frequently used prompts - Documenting common workflows - Quick access to complex instructions The file is automatically recognized and enables Aidermacs minor mode with the above keybindings. -** Dynamic Model Selection +### Dynamic Model Selection Aidermacs provides intelligent model selection that automatically detects and integrates with multiple AI providers: @@ -226,7 +228,7 @@ Aidermacs provides intelligent model selection that automatically detects and in - Provides model compatibility checking To change models: -1. Use =M-x aidermacs-change-model= or press =o= in the transient menu +1. Use `M-x aidermacs-change-model` or press `o` in the transient menu 2. Select from either: - Popular pre-configured models (fast) - Dynamically fetched models from all supported providers (comprehensive) @@ -235,11 +237,3 @@ The system will automatically filter models to only show ones that are: - Supported by your current Aider version - Available through your configured API keys - Compatible with your current workflow - -** Tips - -1. Start with Core Actions to begin a session -2. Use Quick Actions for common tasks -3. Explore specialized commands through submenus for more specific needs -4. The transient interface shows all available commands - no need to memorize! -5. Use =C-g= to cancel any transient menu operation diff --git a/aidermacs.png b/aidermacs.png new file mode 100644 index 0000000000..c2bf0dd66f Binary files /dev/null and b/aidermacs.png differ