cl-grep

Simple implementation of grep
Log | Files | Refs

commit 7fce8fc3c0344e462ad713a803b2040f448318d1
parent 023ef0b91d4493a0a16279a4c9515344debd5a84
Author: ChanderG <[email protected]>
Date:   Wed,  3 Dec 2025 19:02:17 +0530

add buffered output to stdout; NO improv in perf

Diffstat:
Mgrep.lisp | 27++++++++++++++++++++-------
1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/grep.lisp b/grep.lisp @@ -37,13 +37,26 @@ (grep-file task match-idx))))) (defun result-printer () - (loop - (let ((task (lq:pop-queue *print-queue*))) - (if (eq task :done) - (return)) - (let ((name (file-result-name task)) - (results (file-result-entries task))) - (format t "~a: ~%~{~A~%~}~%" name results))))) + (let ((bufstream (make-string-output-stream)) + (count 0)) + (loop + (handler-case + (let ((task (lq:pop-queue *print-queue*))) + (when (eq task :done) + ;; flush out remaining stuff + (princ (get-output-stream-string bufstream)) + (return)) + (let ((name (file-result-name task)) + (results (file-result-entries task))) + (write-string (format nil "~a: ~%~{~A~%~}~%" name results) bufstream)) + (incf count) + ;; buffer and print out + (when (eq count 10) + (princ (get-output-stream-string bufstream)) + (clear-output) + (setf count 0))) + (error (c) + (lo "Error in printing: ~a~%" c)))))) (defun queue-file (file) (lo "Visiting file: ~a" file)