branch: elpa/aidermacs
commit b105ca5e4a8979fff98e5238b6a9d59f5199f778
Author: Mingde (Matthew) Zeng <[email protected]>
Commit: Mingde (Matthew) Zeng <[email protected]>
feat: Add output history display and last output copy functions
refactor: Remove local variable scoping for aidermacs output history
variables
---
aidermacs-backends.el | 31 ++++++++++++++++++++++++++++---
aidermacs.el | 3 +++
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/aidermacs-backends.el b/aidermacs-backends.el
index 1c10c30a7f..b320aff6da 100644
--- a/aidermacs-backends.el
+++ b/aidermacs-backends.el
@@ -32,14 +32,14 @@ of using a comint process."
:type 'integer
:group 'aidermacs-output)
-(defvar-local aidermacs--output-history nil
+(defvar aidermacs--output-history nil
"List to store aidermacs output history.
Each entry is a cons cell (timestamp . output-text).")
-(defvar-local aidermacs--last-command nil
+(defvar aidermacs--last-command nil
"Store the last command sent to aidermacs.")
-(defvar-local aidermacs--current-output nil
+(defvar aidermacs--current-output nil
"Accumulator for current output being captured.")
(defun aidermacs-get-output-history (&optional limit)
@@ -59,6 +59,31 @@ Returns a list of (timestamp . output-text) pairs, most
recent first."
(interactive)
(setq aidermacs--output-history nil))
+
+(defun aidermacs-show-output-history ()
+ "Display the AI output history in a new buffer."
+ (interactive)
+ (let ((buf (get-buffer-create "*aidermacs-history*"))
+ (history aidermacs--output-history)) ; Get history from current buffer
+ (with-current-buffer buf
+ (erase-buffer)
+ (display-line-numbers-mode 1)
+ (dolist (entry history) ; Use passed history
+ (let ((timestamp (format-time-string "%Y-%m-%d %H:%M:%S" (car entry)))
+ (output (cdr entry)))
+ (insert (format "=== %s ===\n%s\n\n" timestamp output))))
+ (goto-char (point-min)))
+ (display-buffer buf)))
+
+(defun aidermacs-copy-last-output ()
+ "Copy the most recent AI output to the kill ring."
+ (interactive)
+ (if-let ((last-output (cdr (aidermacs-get-last-output))))
+ (progn
+ (kill-new last-output)
+ (message "Copied last AI output to kill ring"))
+ (message "No AI output available")))
+
(defun aidermacs--store-output (output)
"Store OUTPUT in the history with timestamp."
(setq aidermacs--current-output output)
diff --git a/aidermacs.el b/aidermacs.el
index ca362976b6..240dfb2572 100644
--- a/aidermacs.el
+++ b/aidermacs.el
@@ -65,6 +65,7 @@ This is the file name without path."
(defvar aidermacs-read-string-history nil
"History list for aidermacs read string inputs.")
+
(if (bound-and-true-p savehist-loaded)
(add-to-list 'savehist-additional-variables 'aidermacs-read-string-history)
(add-hook 'savehist-mode-hook
@@ -167,6 +168,8 @@ Affects the system message too.")
("Q" "Ask General Question" aidermacs-general-question)
("p" "Open Prompt File" aidermacs-open-prompt-file)
("h" "Help" aidermacs-help)
+ ("H" "Show Output History" aidermacs-show-output-history)
+ ("C" "Copy Last Output" aidermacs-copy-last-output)
]
])