From 08ba2769abb7a36817a725d30d64cfd36f5bcf32 Mon Sep 17 00:00:00 2001 From: Colin Okay Date: Fri, 11 Mar 2022 08:35:55 -0600 Subject: separated app and lib modules, -osicat dep, +packages.lisp --- lib/util.lisp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 lib/util.lisp (limited to 'lib/util.lisp') diff --git a/lib/util.lisp b/lib/util.lisp new file mode 100644 index 0000000..290d541 --- /dev/null +++ b/lib/util.lisp @@ -0,0 +1,37 @@ +;;;; util.lisp + +(in-package :oneliners.cli) + +(defun make-temp-file-name () + "Simply makes a file name for a temp file. Uses +UIOP:TEMPORARY-DIRECTORY for the directory." + (namestring + (merge-pathnames (format nil "~a~a" (gensym "oneliners") (get-universal-time)) + (uiop:temporary-directory)))) + + +(defun string-from-editor (&optional contents) + (let ((filename (make-temp-file-name))) + (when contents (a:write-string-into-file contents filename :if-exists :supersede)) + (unwind-protect + (magic-ed:magic-ed filename :eval nil :output :string) + (uiop:delete-file-if-exists filename)))) + + +(defun executable-on-system-p (name) + "A hack that heuristically determines whether or not an executable +with the provided name is on the system. It is not perfect. It +consults the environment PATH, and looks for the command in any of +the directories that appear in the value of that variable." + #+unix + (loop for path in (str:split ":" (uiop:getenv "PATH")) + for directory = (cons :absolute + (cdr (str:split "/" path))) + thereis (uiop:file-exists-p + (make-pathname :name name :directory directory)))) + +(defun print-to-file (printable-object pathname &optional (if-exists :supersede)) + "Prints an object to a file, ensuring that the containing directory exists first." + (ensure-directories-exist pathname) + (with-open-file (out pathname :direction :output :if-exists if-exists) + (print printable-object out))) -- cgit v1.2.3