git.fiddlerwoaroof.com
scripts/git-ignore
7c8efaf8
 #!/usr/bin/env -S sbcl --script
7fa89c89
 
2ae4ca3e
 (eval-when (:compile-toplevel :load-toplevel :execute)
   (require :uiop))
7fa89c89
 
2ae4ca3e
 (defpackage :fwoar.git-ignore
   (:use :cl))
a8d85c91
 (in-package :fwoar.git-ignore)
7fa89c89
 
2ae4ca3e
 (defparameter *args*
   (uiop:command-line-arguments))
7fa89c89
 
a8d85c91
 (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)
60badcc9
   (fresh-line s)
2ae4ca3e
   (if *args*
       (format s "~{~a~%~}" *args*)
a8d85c91
       (loop-until-done (line)
         (princ line s)
         (terpri s))))
0b19c0da
 
 (uiop:run-program "git add .gitignore"
                   :force-shell t
                   :output :interactive
                   :error-output :interactive)