aartaka · Codeberg.org

This is mainly a shared config for Lisp REPLs.

Installation

Clone this repo as ~/.config/common-lisp. This way the ASDF registry conf ends up in the proper place too.

  git clone --recursive https://github.com/aartaka/lisp-config ~/.config/common-lisp

In case you did a non-recursive clone or need to get dependencies’ code, do

  git submodule update --init -- deps/

To propagate the config to all the installed implementation, use make

  make install

Note that this overwrites implementation-specific init files, so make sure you back them up!

Highlights

lisp.sh for better REPL experience

This script, when called with implementation name, starts it with sane rlwrap settings. Like completion and meaningful break/quote chars. When you do make install, it’s installed under then name lisp, so call it with

  lisp ecl

Dependency resolution script

/aartaka/lisp-config/src/branch/main/deps.lisp is a script to process any .asd file and spit out all of its dependencies. As Git submodule commands. So that you can bundle all of your project dependencies with it.

You can build this script into an executable with

  make deps
  ./deps
  # Use this script as
  # sbcl --load path/to/this/deps.lisp system.asd [system]
  # in the project directory. Notice the --load, not --script, because
  # SBCL --load allows using Quicklisp and ASDF (as loaded in
  # initialization file,) while --script has limitations in that.

Or run it (uncommenting the entry point invocation first) with

  sbcl --load path/to/deps.lisp system.asd system/tests

(I mostly use the compiled version, so –load way can fall behind in maintenance.)

Readline customizations

Some readline completions appended from *-completions.txt, so that

  rlwrap --remember -c -b "(){}[],^%$#@\"\";''|\\" ecl

Ends up with nice list of completions.

Graven Image Customizations

Also has lots of :around methods for my Graven Image standard-enhancing library. Mainly making printouts less overwhelming.

Experimental "Talkative Lisp" Code

This feeds REPL output and input to EspeakNG to speak the text. The plan is to turn it into a proper screenreader-ish setup. See /aartaka/lisp-config/src/branch/main/talkative.lisp.

Nicer prompt (CL-USER/D1?)

This one is made for Talkative mode convenience, because this format is most discernible when read with eSpeak. See /aartaka/lisp-config/src/branch/main/prompt.lisp.

Documentation extensions

See /aartaka/lisp-config/src/branch/main/documentation.lisp for my custom methods on documentation, including

  • Method with package doctype.
  • Intuitive T doctype method on symbols.
  • :doc command printing docs for arbitrary symbol.

Useful yet highly opinionated reader macros

See /aartaka/lisp-config/src/branch/main/reader.lisp:

  • #? to print meta information about the symbol after it:

    • documentation (#?(symbol type)),
    • apropos (#?:name or #?(:name :package)),
    • arglist (#?fname).
  • #! for shell. Harder to type than :sh command, but why not have it anyway?
  • #{} for Clojure-inspired hash tables
  • Also includes (#^ and #/) reader macros from lin-edi-table.

Read the original on codeberg.org ↗