diff --git a/scripting.lisp b/scripting.lisp index 1e987b0..87804e7 100644 --- a/scripting.lisp +++ b/scripting.lisp @@ -288,7 +288,6 @@ (defun main () "Entry point for the binary. Parse options." - (uiop:format! t "main & recompiled++…") (let ((app (top-level/command))) (clingon:run app))) diff --git a/src/scripts/finder.lisp b/src/scripts/finder.lisp new file mode 100644 index 0000000..7742f60 --- /dev/null +++ b/src/scripts/finder.lisp @@ -0,0 +1,38 @@ +#!/usr/bin/env ciel + +;; +;; $ ciel finder.lisp foo bar | xargs mpv +;; +;; Searches for files matching "foo" and "bar" (in any order) in my music directories. +;; +;; o/ +;; + +(in-package :ciel-user) + +(defparameter *directories* '("~/Music/" "~/Downloads/")) + +(defun find-on-directory (root params) + (fof:finder* + :root root + :predicates (apply #'fof/p:every-path~ params))) + +(defun find-files (&optional params) + (unless params + (format *error-output* "No search terms supplied.~&Usage: finder.lisp search terms.~&") + (return-from find-files)) + (let ((str:*ignore-case* t) + (params (ensure-list params))) + (flatten + (loop for root in *directories* + collect + (find-on-directory root params))))) + +(defun pprint-for-shell (list) + (mapcar (lambda (p) + (format t "~s~&" (fof:path p))) + list) + (terpri)) + +#+ciel +(pprint-for-shell (find-files (rest *script-args*)))