Common Lisp

QuickLisp hacks

Tell require to automatically quickload systems.
quicklisp-helpers.lispContains module-provide-quickload, ql-apropos & who-depends-on.
hacks.lispContains system-apropos-list, who-depends-on & who-is-required-by patches.
QuickLisp has evolved so some of these are now moot.

Gnu Common Lisp documentation lookup in Emacs

With patches to palliate some of the worst errors in gcl.info, a buggy and decrepit precursor to the HyperSpec evidently based on draft proposed ANSI Common Lisp — but worth it to stay in Emacs!
Perhaps the old Info document browser is now moot given the new eww web browser in Emacs-24, assuming you have the required external library.

gcl-info.elGnu Common Lisp documentation lookup Emacs Info library (patches included)
requires QuickLisp or slime hyperspec.el
gcl.info.tgzGnu Common Lisp manual
gcl.infopatched for gcl.info-hack
gcl.info-hackerrata for gcl-info.el

JSON path matcher in the manner of XPATH and JSONPath

;(ql:quickload "cl-json-path") ; Any day now - needs minor polishing.
jpath.lispPath matcher with :wild, :wilder and some aggregators.
cl-json-path.lispSyntax inspired by Stefan Goessner's JSONPath.
qr-json.lispLike ST-JSON but represent arrays as arrays and objects as alists.

SNOBOL4 blocks

(ql:quickload "blocks")
3D strings which facilitate 2D output layout with a 3rd dimension for overstrikes.
READMEAPI & examples.
blocks.asdDefine BLOCKS & BLOCKS-DEMO systems.
blocks.lispBox drawing API only, with stubs for full blocks.
disassemble.lispDecorate disassembly with jump arrows.
This system is far from complete but does support Unicode/MS-DOS box-drawing characters:
CL-USER> (blocks::disassemble 'car)
;; "ccl:level-0;l0-utils.lisp.newest":6453-6476
    (recover-fn-from-rip)                   ;     [7]
    (cmpl ($ 8) (% nargs))                  ;    [14]
    (jne L37)                               ;    [17]──┐
    (pushq (% rbp))                         ;    [19]  │
    (movq (% rsp) (% rbp))                  ;    [20]  │
    (pushq (% arg_z))                       ;    [23]  │
                                                       │
;;; (car x)                                            │
    (movl (% arg_z.l) (% imm0.l))           ;    [24]  │
    (andl ($ 7) (% imm0.l))                 ;    [26]  │
    (cmpl ($ 3) (% imm0.l))                 ;    [29]  │
    (jne L45)                               ;    [32]─┐│
    (movq (@ 5 (% arg_z)) (% arg_z))        ;    [34] ││
    (leaveq)                                ;    [38] ││
    (retq)                                  ;    [39] ││
                                                      ││
;;; #<no source text>                                 ││
L37                                                  ←│┘
    (uuo-error-wrong-number-of-args)        ;    [44] │
L45                                                  ←┘
    (uuo-error-reg-not-list (% arg_z))      ;    [52]

String literals with Emacs & Python style escapes

(ql:quickload "string-escape") ; Rudely change the readtable upon loading.

before (concatenate 'string '(#\A #\Tab #\B #\Tab #\C #\Newline #\1 #\Tab #\2 #\Tab #\3 #\Newline))
or (format nil "A~CB~CC~%1~C2~C3~%" #\Tab #\Tab #\Tab #\Tab)
after #"A\tB\tC\n1\t2\t3\n"   ; thanks to this simple reader macro.

string-escape.lispRead Emacsy #"…\n…" and Pythony #"""…"Foo"…""" syntax.
string-escape.tgzQuickLisp compatible system tested in CCL and SBCL.

Chinese

dragon-char.lisp Render the 1506 Chinese characters at http://dragon-char.cvs.sourceforge.net/viewvc/dragon-char/dragon-data as Scalable Vector Graphics.

more to come as time permits


Devon Sean McCullough
Last modified: 2017 Mar 10 Fri 23:33 MST