branch: elpa/aidermacs
commit 5fcee0f22d7e1fc2cba90713d454fe1f18b191f3
Author: Aaron Madlon-Kay <[email protected]>
Commit: Aaron Madlon-Kay <[email protected]>
Show added files in Dired buffer
---
aidermacs.el | 40 +++++++++++++++++++++++++++++++++-------
1 file changed, 33 insertions(+), 7 deletions(-)
diff --git a/aidermacs.el b/aidermacs.el
index df1c2726fc..adcd9a2ef9 100644
--- a/aidermacs.el
+++ b/aidermacs.el
@@ -170,9 +170,10 @@ This is used when you want to target an existing session."
(`(,name) (buffer-name name))
(_ (completing-read "Select aidermacs session: " buffer-names nil t)))))
-(defun aidermacs-get-buffer-name (&optional use-existing)
+(defun aidermacs-get-buffer-name (&optional use-existing suffix)
"Generate the aidermacs buffer name based on project root or current
directory.
-If USE-EXISTING is non-nil, use an existing buffer instead of creating new."
+If USE-EXISTING is non-nil, use an existing buffer instead of creating new.
+If supplied, SUFFIX is appended to the buffer name within the earmuffs."
(if use-existing
(aidermacs-select-buffer-name)
(let* ((root (aidermacs-project-root))
@@ -209,8 +210,9 @@ If USE-EXISTING is non-nil, use an existing buffer instead
of creating new."
(closest-parent closest-parent)
;; Fall back to project root for new non-subtree
session
(t root))))
- (format "*aidermacs:%s*"
- (file-truename display-root)))))
+ (format "*aidermacs:%s%s*"
+ (file-truename display-root)
+ (or suffix "")))))
;;;###autoload
(defun aidermacs-run ()
@@ -635,13 +637,37 @@ Returns a deduplicated list of such file names."
(defun aidermacs-list-added-files ()
"List all files currently added to the chat session.
-Sends the \"/ls\" command and returns the list of files via callback."
+Sends the \"/ls\" command and displays the results in a Dired buffer."
(interactive)
(aidermacs--get-files-in-session
(lambda (files)
- (message "%S" files)
(setq aidermacs--tracked-files files)
- files)))
+ (let ((buf-name (aidermacs-get-buffer-name nil " Files")))
+ ;; Unfortunately find-dired-with-command doesn't allow us to specify the
+ ;; buffer name, so we manually rename it after the fact and recreate it
+ ;; on each call.
+ (when (get-buffer buf-name)
+ (kill-buffer buf-name))
+ (if files
+ (let* ((git-root (vc-git-root default-directory))
+ (files-arg (mapconcat #'shell-quote-argument files " "))
+ (cmd (format "find %s %s" files-arg (car find-ls-option))))
+ (find-dired-with-command git-root cmd)
+ (let ((buf (get-buffer "*Find*")))
+ (when buf
+ (with-current-buffer buf
+ (rename-buffer buf-name)
+ (save-excursion
+ ;; The executed command is on the 2nd line; it can get
+ ;; quite long, so we delete it to avoid cluttering the
+ ;; buffer.
+ (goto-line 2)
+ (when (looking-at "^ *find " t)
+ (let ((inhibit-read-only t))
+ (delete-region (line-beginning-position)
(line-end-position)))))
+ (setq revert-buffer-function
+ (lambda (&rest _) (aidermacs-list-added-files)))))))
+ (message "No files added to the chat session"))))))
(defun aidermacs-drop-file ()
"Drop a file from the chat session by selecting from currently added files."