#!/usr/bin/env -S sbcl --script (eval-when (:compile-toplevel :load-toplevel :execute) (require :uiop)) (defpackage :fwoar.git-ignore (:use :cl)) (in-package :fwoar.git-ignore) (defparameter *args* (uiop:command-line-arguments)) (defun trim-spaces (string) (string-trim '(#\space #\tab #\newline) string)) (defun get-to-ignore () (format *query-io* "ignore? ") (finish-output *query-io*) (read-line *query-io* nil)) (defun not-terminator (line) (and line (not (string= line "")) (not (string= line ".")))) (defmacro loop-until-done ((line) &body body) `(loop for ,line = (trim-spaces (get-to-ignore)) while (not-terminator ,line) do ,@body)) (with-open-file (s ".gitignore" :direction :output :if-exists :append :if-does-not-exist :create) (fresh-line s) (if *args* (format s "~{~a~%~}" *args*) (loop-until-done (line) (princ line s) (terpri s)))) (uiop:run-program "git add .gitignore" :force-shell t :output :interactive :error-output :interactive)