branch: elpa/aidermacs
commit afc1937f280246c06537d1fec5d6c6b07abbba57
Author: Troy Hinckley <[email protected]>
Commit: Matthew Zeng <[email protected]>
Add markdown formatting to the aider session
---
aidermacs-backend-comint.el | 59 +++++++++++++++++++++++++++++++++------------
aidermacs.el | 2 +-
2 files changed, 45 insertions(+), 16 deletions(-)
diff --git a/aidermacs-backend-comint.el b/aidermacs-backend-comint.el
index dc12b03c93..528ba13d7a 100644
--- a/aidermacs-backend-comint.el
+++ b/aidermacs-backend-comint.el
@@ -26,6 +26,7 @@
(require 'comint)
(require 'cl-lib)
(require 'map)
+(require 'markdown-mode)
;; Forward declarations
(declare-function aidermacs--prepare-for-code-edit "aidermacs-output")
@@ -84,10 +85,8 @@ This allows for multi-line input without sending the
command."
(defvar aidermacs-font-lock-keywords
'(("^\x2500+\n?" 0 '(face aidermacs-command-separator) t)
("^\x2500+" 0 '(face nil display (space :width 2)))
- ("^\\([0-9]+\\). " 0 font-lock-constant-face)
("^>>>>>>> REPLACE" 0 'aidermacs-search-replace-block t)
("^<<<<<<< SEARCH" 0 'aidermacs-search-replace-block t)
- ("^[:space:]*\\(```\\)\\([^[:space:]]*\\)" (1 'shadow t) (2
font-lock-builtin-face t))
("^=======$" 0 'aidermacs-search-replace-block t))
"Font lock keywords for aidermacs buffer.")
@@ -317,16 +316,9 @@ BUFFER-NAME is the name for the aidermacs buffer."
(unless (comint-check-proc buffer-name)
(apply #'make-comint-in-buffer "aidermacs" buffer-name program nil args)
(with-current-buffer buffer-name
- (comint-mode)
- (setq-local comint-prompt-regexp aidermacs-prompt-regexp)
- (setq-local comint-input-sender 'aidermacs-input-sender)
+ (aidermacs-comint-mode)
(setq aidermacs--syntax-work-buffer
- (get-buffer-create (concat " *aidermacs-syntax" buffer-name)))
- (add-hook 'kill-buffer-hook #'aidermacs--comint-cleanup-hook nil t)
- (add-hook 'comint-output-filter-functions #'aidermacs-fontify-blocks
100 t)
- (add-hook 'comint-output-filter-functions
#'aidermacs--comint-output-filter)
- (aidermacs-comint-mode 1)
- (font-lock-add-keywords nil aidermacs-font-lock-keywords t)))))
+ (get-buffer-create (concat " *aidermacs-syntax"
buffer-name)))))))
(defun aidermacs--send-command-comint (buffer command)
"Send command to the aidermacs comint buffer.
@@ -376,10 +368,47 @@ The output is collected and passed to the current
callback."
map)
"Keymap used when `aidermacs-comint-mode' is enabled.")
-(define-minor-mode aidermacs-comint-mode
- "Minor mode for vterm backend buffer used by aidermacs."
- :init-value nil
- :keymap aidermacs-comint-mode-map)
+(define-derived-mode aidermacs-comint-mode comint-mode "Aider"
+ "Major mode for interacting with Aidermacs.
+Inherits from `comint-mode' with some Aider-specific customizations.
+\\{aider-comint-mode-map}"
+ :keymap aidermacs-comint-mode-map
+ (setq-local comint-prompt-regexp aidermacs-prompt-regexp)
+ (setq-local comint-input-sender 'aidermacs-input-sender)
+ (add-hook 'kill-buffer-hook #'aidermacs--comint-cleanup-hook nil t)
+ (add-hook 'comint-output-filter-functions #'aidermacs-fontify-blocks 100 t)
+ (add-hook 'comint-output-filter-functions #'aidermacs--comint-output-filter)
+
+ ;; we are going to highlight code blocks ourselves, so set those faces to
default. They will still
+ ;; be inserted, but won't be noticeable
+ (setq-local markdown-fontify-code-blocks-natively nil)
+ (let ((inline-foreground (face-attribute 'markdown-inline-code-face
:foreground nil 'default))
+ (table-foreground (face-attribute 'markdown-table-face :foreground nil
'default)))
+ (face-remap-add-relative 'markdown-pre-face :inherit 'default)
+ (face-remap-add-relative 'markdown-code-face :inherit 'default)
+ ;; preseve these two faces that inherit from markdown-code-face
+ (face-remap-add-relative 'markdown-inline-code-face :foreground
inline-foreground)
+ (face-remap-add-relative 'markdown-table-face :foreground
table-foreground))
+
+ ;; Enable markdown mode highlighting
+ (add-hook 'syntax-propertize-extend-region-functions
+ #'markdown-syntax-propertize-extend-region nil t)
+ (add-hook 'jit-lock-after-change-extend-region-functions
+ #'markdown-font-lock-extend-region-function t t)
+ (set-syntax-table (make-syntax-table markdown-mode-syntax-table))
+ (setq-local syntax-propertize-function #'markdown-syntax-propertize)
+ (setq font-lock-defaults
+ '(markdown-mode-font-lock-keywords
+ nil nil nil nil
+ (font-lock-multiline . t)
+ (font-lock-extra-managed-props
+ . (composition display invisible))))
+ ;; a regex that will never match so we don't get the prompt interpreted as a
block quote
+ (setq-local markdown-regex-blockquote "^\\_>$")
+ (if markdown-hide-markup
+ (add-to-invisibility-spec 'markdown-markup)
+ (remove-from-invisibility-spec 'markdown-markup))
+ (font-lock-add-keywords nil aidermacs-font-lock-keywords t))
(provide 'aidermacs-backend-comint)
diff --git a/aidermacs.el b/aidermacs.el
index 1c5b6c0d4b..67a1b386e0 100644
--- a/aidermacs.el
+++ b/aidermacs.el
@@ -1,7 +1,7 @@
;;; aidermacs.el --- AI pair programming with Aider -*- lexical-binding: t; -*-
;; Author: Mingde (Matthew) Zeng <[email protected]>
;; Version: 1.1
-;; Package-Requires: ((emacs "26.1") (transient "0.3.0") (compat "30.0.2.0"))
+;; Package-Requires: ((emacs "26.1") (transient "0.3.0") (compat "30.0.2.0")
(markdown-mode "2.7"))
;; Keywords: ai emacs llm aider ai-pair-programming tools
;; URL: https://github.com/MatthewZMD/aidermacs
;; SPDX-License-Identifier: Apache-2.0