From aa081e264b86e1b68eb26658cc05c5cab230bc2b Mon Sep 17 00:00:00 2001 From: 813gan <813gan@protonmail.com> Date: Tue, 25 Mar 2025 01:18:35 +0100 Subject: [PATCH 1/2] Add recursive mode to ellama-context-add-directory. Also, add ellama-context-add-directory-recursive for interactive use. --- ellama-context.el | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/ellama-context.el b/ellama-context.el index 76dc55f3..63be0792 100644 --- a/ellama-context.el +++ b/ellama-context.el @@ -723,13 +723,24 @@ the context." (ellama-context-element-add element))) ;;;###autoload -(defun ellama-context-add-directory (dir) - "Add all files in DIR to the context." +(defun ellama-context-add-directory (dir &optional recursive) + "Add all files in DIR to the context. +Exclude dot-files. Include subdirs if RECURSIVE is t." (interactive "DSelect directory: ") (dolist (file-name (directory-files dir t "^[^\.].*")) - (unless (file-directory-p file-name) + (cond + ((file-regular-p file-name) (let ((element (ellama-context-element-file :name file-name))) - (ellama-context-element-add element))))) + (ellama-context-element-add element))) + ((and (file-directory-p file-name) recursive) + (ellama-context-add-directory file-name 't))))) + +;;;###autoload +(defun ellama-context-add-directory-recursive (dir) + "Add all files in DIR to the context. +Exclude dot-files. Include all subdirs." + (interactive "DSelect directory: ") + (ellama-context-add-directory dir 't)) ;;;###autoload (defun ellama-context-add-selection () From 8c9d28dfcb37787ad3919873fb7299d9f573e620 Mon Sep 17 00:00:00 2001 From: 813gan <813gan@protonmail.com> Date: Thu, 27 Mar 2025 23:47:03 +0100 Subject: [PATCH 2/2] Add transient for ellama-context-add-directory-recursive --- ellama-context.el | 18 +++++++++++------- ellama-transient.el | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/ellama-context.el b/ellama-context.el index 63be0792..fb431543 100644 --- a/ellama-context.el +++ b/ellama-context.el @@ -727,13 +727,17 @@ the context." "Add all files in DIR to the context. Exclude dot-files. Include subdirs if RECURSIVE is t." (interactive "DSelect directory: ") - (dolist (file-name (directory-files dir t "^[^\.].*")) - (cond - ((file-regular-p file-name) - (let ((element (ellama-context-element-file :name file-name))) - (ellama-context-element-add element))) - ((and (file-directory-p file-name) recursive) - (ellama-context-add-directory file-name 't))))) + (let ((rec + (or recursive + (transient-arg-value "recursive" + (transient-args transient-current-command))))) + (dolist (file-name (directory-files dir t "^[^\.].*")) + (cond + ((file-regular-p file-name) + (let ((element (ellama-context-element-file :name file-name))) + (ellama-context-element-add element))) + ((and (file-directory-p file-name) rec) + (ellama-context-add-directory file-name 't)))))) ;;;###autoload (defun ellama-context-add-directory-recursive (dir) diff --git a/ellama-transient.el b/ellama-transient.el index 5f28cc51..1366b1c2 100644 --- a/ellama-transient.el +++ b/ellama-transient.el @@ -277,6 +277,7 @@ Otherwise, prompt the user to enter a system message." (buffer-substring (point-min) (point-max))))) ["Add" ("b" "Add Buffer" ellama-context-add-buffer) + ("-r" "Recursive mode for `Add Directory'" "recursive") ("d" "Add Directory" ellama-context-add-directory) ("f" "Add File" ellama-context-add-file) ("s" "Add Selection" ellama-context-add-selection)