mirror of
https://github.com/roswell/roswell.git
synced 2026-09-10 07:16:17 -04:00
64 lines
2.5 KiB
Common Lisp
64 lines
2.5 KiB
Common Lisp
#!/bin/sh
|
|
#|-*- mode:lisp -*-|#
|
|
#|Show Command help
|
|
exec ros -Q -m roswell -N roswell -- $0 "$@"
|
|
|#
|
|
|
|
(progn
|
|
(roswell:include "util"))
|
|
|
|
(defpackage :ros.script.help.3668211011
|
|
(:use :cl :roswell.util))
|
|
(in-package :ros.script.help.3668211011)
|
|
|
|
(defparameter *important-commands* '("run" "install" "update" "build" "use" "init" "fmt" "list" "template" "delete" "config" "version"))
|
|
|
|
(defun command (stream path max)
|
|
(format stream " ~vA~A~%" (+ 2 max) (pathname-name path)
|
|
(ignore-errors
|
|
(with-open-file (in path)
|
|
(loop repeat 2 do (read-line in))
|
|
(subseq (read-line in) 2)))))
|
|
|
|
(defun commands (stream)
|
|
(let* ((lispdir (opt "lispdir"))
|
|
(list (nconc (when (roswell:verbose) (directory (merge-pathnames "*.ros" lispdir)))
|
|
(directory (merge-pathnames "cmds/*.ros" (homedir)))))
|
|
(max (max 8 (loop for i in list maximize (length (pathname-name i))))))
|
|
(dolist (i *important-commands*)
|
|
(setf list (delete i list :key #'pathname-name :test #'equal)))
|
|
(setf list (nconc (mapcar #'(lambda (x) (make-pathname :type "ros" :name x :defaults lispdir)) *important-commands*)
|
|
list))
|
|
(format stream "commands:~%")
|
|
(dolist (i list)
|
|
(command stream i max))
|
|
(format stream "~%")))
|
|
|
|
(defun options (stream)
|
|
(format stream "~{ ~A~%~}~%"
|
|
(sort (loop for x in (directory (merge-pathnames "help-*.lisp" (opt "lispdir")))
|
|
for name = (subseq (pathname-name x) 5)
|
|
unless (find name *important-commands* :test 'equal)
|
|
collect name)
|
|
#'string<)))
|
|
|
|
(defun main (&rest argv)
|
|
(let ((s *error-output*)
|
|
(cmd (pathname-name (opt "wargv0"))))
|
|
(cond
|
|
((not (first argv)) ;; without any options
|
|
(format s "Common Lisp environment setup Utility.~%~%")
|
|
(format s "Usage:~%~% ~A [options] Command [arguments...]~%or~%" cmd)
|
|
(format s " ~A [options] [[--] script-path arguments...]~%~%" cmd)
|
|
(commands s)
|
|
(format s "Use \"ros help [command]\" for more information about a command.~%~%")
|
|
(format s "Additional help topics:~%~%") ;; tbd
|
|
(options s)
|
|
(format s "Use \"ros help [topic]\" for more information about the topic.~%~%"))
|
|
((let ((func (module "help" (first argv))))
|
|
(when func
|
|
(funcall func argv))
|
|
func))
|
|
(t (roswell:exec `(,(opt "argv0") "roswell-internal-use" "man" ,(format nil "ros-~A" (first argv))))))))
|
|
;;; vim: set ft=lisp lisp:
|