430034d10981

Merge.
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Mon, 06 Jan 2020 17:03:06 -0800
parents 005c4bb9b6e6 (current diff) a47b90b61621 (diff)
children ebc3de263271
branches/tags (none)
files

Changes

--- a/bin/pastebin	Mon Jan 06 17:02:45 2020 -0800
+++ b/bin/pastebin	Mon Jan 06 17:03:06 2020 -0800
@@ -4,7 +4,7 @@
 
 PASTE_SHA=$(ssh paste.stevelosh.com 'cat > tmppaste && sha1sum tmppaste | cut -d" " -f1 && mv tmppaste /var/www/paste/`sha1sum tmppaste | cut -d" " -f1`')
 
-echo -n "http://paste.stevelosh.com/$PASTE_SHA" | pbcopy
+echo -n "https://paste.stevelosh.com/$PASTE_SHA" | pbcopy
 echo -n 'Copied '
 tput bold
 pbpaste
--- a/lisp/pick.lisp	Mon Jan 06 17:02:45 2020 -0800
+++ b/lisp/pick.lisp	Mon Jan 06 17:03:06 2020 -0800
@@ -34,7 +34,7 @@
 
 (defun filter (choices)
   (loop
-    :with width = (1+ (reduce #'max choices :key #'length))
+    :with width = (1+ (reduce #'max choices :key #'length :initial-value 0))
     :for choice :in choices
     :when (prompt "~A~vA[yN] " choice (- width (length choice)) #\space)
     :collect choice))
@@ -90,7 +90,15 @@
 (adopt:define-string *help-text*
   "pick displays its arguments one-by-one on standard error and prompts you ~
    interactively to choose some of them.  The chosen items will be printed to ~
-   standard output.")
+   standard output.~@
+   ~@
+   An argument of - will cause pick to read lines from standard input as ~
+   choices.  Using an explicit - instead of reading from standard input when no ~
+   arguments are present prevents something like 'pick `ls -1 | grep foo`' from ~
+   silently hanging forever if no files match.~@
+   ~@
+   This version was inspired by the pick program described in 'The UNIX ~
+   Programming Environment'.")
 
 (defparameter *ui*
   (adopt:make-interface
@@ -113,6 +121,10 @@
         (with-open-file (*interactive-input* "/dev/tty" :direction :input)
           (let ((*separator* (gethash 'separator options))
                 (*interactive-output* *error-output*))
-            (run (or arguments (read-lines *standard-input*))))))
+            (run (mapcan (lambda (arg)
+                           (if (string= "-" arg)
+                             (read-lines *standard-input*)
+                             (list arg)))
+                         arguments)))))
     (error (c) (adopt:print-error-and-exit c))))