# HG changeset patch # User Steve Losh # Date 1545343866 18000 # Node ID c6afac579697ed0a5984b5b57df5c419bb8f9e26 # Parent 6ee2d1d3d487de9aae545f994faa18f90019b51d More diff -r 6ee2d1d3d487 -r c6afac579697 .hgignore --- a/.hgignore Wed Dec 19 18:49:56 2018 -0500 +++ b/.hgignore Thu Dec 20 17:11:06 2018 -0500 @@ -43,5 +43,6 @@ vim/bundle/simple-scala vim/bundle/LanguageClient-neovim weechat/sec.conf -lisp/binaries +lisp/bin +lisp/man mutt/accounts diff -r 6ee2d1d3d487 -r c6afac579697 lisp/Makefile --- a/lisp/Makefile Wed Dec 19 18:49:56 2018 -0500 +++ b/lisp/Makefile Thu Dec 20 17:11:06 2018 -0500 @@ -1,11 +1,26 @@ -.PHONY: all +files := $(shell ls *.lisp) +binaries := $(files:.lisp=) + +.PHONY: all $(binaries) -all: binaries/clhs binaries/lispindent +all: $(binaries) + +%: bin/% man/%.1 + echo + +clean: + rm -rf bin man -binaries/clhs: clhs.lisp compile - ./compile clhs.lisp - mv clhs binaries/clhs +bin/%: %.lisp bin build-binary + ./build-binary $< + mv $(@F) bin/ -binaries/lispindent: lispindent.lisp compile - ./compile lispindent.lisp --no-userinit - mv lispindent binaries/lispindent +man/%.1: %.lisp man build-manual + ./build-manual $< + mv $(@F) man/ + +bin: + mkdir -p bin + +man: + mkdir -p man diff -r 6ee2d1d3d487 -r c6afac579697 lisp/binaries/.placeholder diff -r 6ee2d1d3d487 -r c6afac579697 lisp/build-binary --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/build-binary Thu Dec 20 17:11:06 2018 -0500 @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -euo pipefail + +LISP=$1 +BINARY=$(basename "$1" .lisp) +shift + +sbcl --load "$LISP" --eval "(sb-ext:save-lisp-and-die \"$BINARY\" :executable t :save-runtime-options t :toplevel 'toplevel)" "$@" diff -r 6ee2d1d3d487 -r c6afac579697 lisp/build-manual --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/build-manual Thu Dec 20 17:11:06 2018 -0500 @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -euo pipefail + +LISP=$1 +NAME=$(basename "$LISP" .lisp) +OUT="$NAME.1" +shift + +sbcl --disable-debugger --load "$LISP" --eval "(with-open-file (f \"$OUT\" :direction :output :if-exists :supersede) (adopt:print-manual *ui* :stream f))" --quit "$@" diff -r 6ee2d1d3d487 -r c6afac579697 lisp/clhs.lisp --- a/lisp/clhs.lisp Wed Dec 19 18:49:56 2018 -0500 +++ b/lisp/clhs.lisp Thu Dec 20 17:11:06 2018 -0500 @@ -1,6 +1,9 @@ ;; Based on https://gist.github.com/fukamachi/3510ea1609c1b52830c2 -(ql:quickload '(:adopt :drakma :plump :clss :alexandria)) +(eval-when (:compile-toplevel :load-toplevel :execute) + (ql:quickload '(:adopt :drakma :plump :clss :alexandria) + :silent t)) + ;;;; Config ------------------------------------------------------------------- (defparameter *default-hyperspec-url* "http://www.lispworks.com/documentation/HyperSpec/") @@ -93,23 +96,50 @@ ;;;; User Interface ----------------------------------------------------------- -(adopt:define-interface *ui* "SYMBOL" - "Look up SYMBOL in the hyperspec and open it in a web browser." - ((help) "display help and exit" +(adopt:define-interface *ui* + (:name "clhs" + :usage "[OPTIONS] SYMBOL" + :summary "Look up a symbol in the Common Lisp HyperSpec." + :documentation + (format nil "Look up SYMBOL in the Common Lisp HyperSpec and open it in a web browser.~@ + ~@ + The first time the program is run it will create a cache of all symbols in the HyperSpec. Subsequent runs will use this cache to look up symbol links faster.") + :examples + '(("Look up STRING in the HyperSpec and open it in the default browser:" . + "clhs string") + ("Look up MAKE-ARRAY in a local copy of the HyperSpec and open it in lynx:" . + "clhs --url file:///home/sjl/doc/hyperspec/ --open lynx make-array"))) + ((help) + :documentation "display help and exit" + :manual "Display help and exit." :long "help" :short #\h :reduce (constantly t)) - ((rebuild-cache) "rebuild the symbol cache, even if it already exists" + ((rebuild-cache) + :documentation "rebuild the symbol cache, even if it already exists" + :manual "Rebuild the symbol cache, even if it already exists." :long "rebuild-cache" :reduce (constantly t)) - ((open) (format nil "program to use to open hyperspec URLs (default ~A)" - *default-open-command*) + ((open) + :documentation + (format nil "program to use to open hyperspec URLs (default ~A)" + *default-open-command*) + :manual + (format nil "The program to use to open hyperspec URLs. The default is: ~A" + *default-open-command*) :long "open" :short #\o :parameter "COMMAND" :initial-value *default-open-command* :reduce #'adopt:newest) - ((url) (format nil "base Hyperspec URL (default ~A)" *default-hyperspec-url*) + ((url) + :documentation + (format nil "base HyperSpec URL (default ~A)" *default-hyperspec-url*) + :manual + (format nil "The base HyperSpec URL. The default is: ~A~@ + ~@ + A local copy of the HyperSpec can be used with a file:// prefix." + *default-hyperspec-url*) :long "url" :short #\u :parameter "URL" diff -r 6ee2d1d3d487 -r c6afac579697 lisp/compile --- a/lisp/compile Wed Dec 19 18:49:56 2018 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -LISP=$1 -BINARY=$(basename "$1" .lisp) -shift - -sbcl --load "$LISP" --eval "(sb-ext:save-lisp-and-die \"$BINARY\" :executable t :save-runtime-options t :toplevel 'toplevel)" "$@" diff -r 6ee2d1d3d487 -r c6afac579697 lispwords --- a/lispwords Wed Dec 19 18:49:56 2018 -0500 +++ b/lispwords Thu Dec 20 17:11:06 2018 -0500 @@ -116,3 +116,6 @@ ; stumpwm (3 defcommand) + +; adopt +(2 define-interface)