Commits

evhan committed 4560c88

chicken-select: optional argument specifies desired chicken
Signed-off-by: Moritz Heidkamp <moritz@twoticketsplease.de>

  • Participants
  • Parent commits b048c74

Comments (0)

Files changed (1)

File chicken-select.scm

 (assert-chicken-coop-exists)
 
 (define verbose? #f)
-
-(unless (null? (command-line-arguments))
-  (if (equal? "-v" (car (command-line-arguments)))
-      (set! verbose? #t)
-      (fail "Invalid arguments: ~S" (command-line-arguments))))
+(define target-chicken #f)
 
 (define (available-chickens)
   (filter (lambda (p) (not (equal? chicken-link p)))
           (directory chicken-coop)))
 
+(for-each
+  (lambda (arg)
+    (cond ((equal? "-v" arg)
+           (set! verbose? #t))
+          ((member arg (available-chickens))
+           (set! target-chicken arg))
+          (else
+           (fail "Invalid argument: ~S" arg))))
+  (command-line-arguments))
+
 (define (current-chicken path link)
   (let ((p (make-pathname path link)))
     (and (symbolic-link? p)
         (string-concatenate (list csi " -n -p " "'(chicken-version #t)'"))
       (lambda () (printf "\t~a~%" (read-line))))))
 
-(let* ((all-chicks (sort (available-chickens) string<?))
-       (current (list-index (cut equal? (current-chicken chicken-coop chicken-link) <>) all-chicks)))
-  (let select ((abort #f))
-    (if (equal? abort #\return)
-        (begin
-          (print "Aborted.")
-          (exit 0))
-        (begin
-          (for-each (lambda (c n)
-                      (printf "~a [~a]: ~a~%"
-                              (if (equal? n current) "->" "  ")
-                              n c)
-                      (when verbose?
-                        (print-chicken-version c)))
-                    all-chicks
-                    (iota (length all-chicks)))
-          (newline)
-          (print* "Select a new Chicken, press ENTER to abort: ")
-          (let ((choice-raw (read-line)))
-            (if (equal? choice-raw "")
-                (exit)
-                (let ((num (string->number choice-raw)))
-                  (if (and
-                       num
-                       (<= 0 num)
-                       (< num (length all-chicks)))
-                      (begin
-                        (print "Setting current Chicken to " (list-ref all-chicks num))
-                        (set-current-chicken (list-ref all-chicks
-                                                       num)
-                                             chicken-link))
-                      (select choice-raw)))))))))
+(if target-chicken
+  (set-current-chicken target-chicken chicken-link)
+  (let* ((all-chicks (sort (available-chickens) string<?))
+         (current (list-index (cut equal? (current-chicken chicken-coop chicken-link) <>) all-chicks)))
+    (let select ((abort #f))
+      (if (equal? abort #\return)
+          (begin
+            (print "Aborted.")
+            (exit 0))
+          (begin
+            (for-each (lambda (c n)
+                        (printf "~a [~a]: ~a~%"
+                                (if (equal? n current) "->" "  ")
+                                n c)
+                        (when verbose?
+                          (print-chicken-version c)))
+                      all-chicks
+                      (iota (length all-chicks)))
+            (newline)
+            (print* "Select a new Chicken, press ENTER to abort: ")
+            (let ((choice-raw (read-line)))
+              (if (equal? choice-raw "")
+                  (exit)
+                  (let ((num (string->number choice-raw)))
+                    (if (and
+                         num
+                         (<= 0 num)
+                         (< num (length all-chicks)))
+                        (begin
+                          (print "Setting current Chicken to " (list-ref all-chicks num))
+                          (set-current-chicken (list-ref all-chicks
+                                                         num)
+                                               chicken-link))
+                        (select choice-raw))))))))))