We recently pushed our replic library version 0.12, adding a couple of expected features, thanks to the input of our users user:

  • we can TAB-complete sentences (strings inside quotes)
  • we can define a different completion method for each arguments of a command.
  • we added a declarative way to automatically print a function’s result. The default function can be overriden by users (in order too, for example, color output).

So we can do something like this: we create a function (that will become a command on the readline command line):

(defun say (verb name)
  (format t "~a, ~a !~&" verb name))

We define how to TAB-complete its arguments:

(replic.completion:add-completion "say"
                                  (list "greetings" "\"nice to see you\"")
                                  (lambda () *names*))

Now if you type say TAB you get the two greeting choices. After you pick one and press TAB again, you get the names that were given to hello.

What’s beginning to be wanted now is fuzzy completion.

Hope you enjoy.

What is replic’s goal ?

Building a readline application is cool, but readline gives you the basics and you must still build a REPL around it: loop and read commands, catch a =C-c=, a =C-d=, ask confirmation to quit, print the general help, the help of a command, setup the completion of commands, the completion of their arguments, load an init file, colorize output,… =replic= does this for you.

Replic’s goal is that when you have a lisp library, with lisp functions, it should be straightforward to create a terminal application out of it.

Here’s an example in the wild. The lyrics library is cool. It is a lisp library, it must be used on the Lisp REPL. This is the amount of code that was needed to create a terminal application out of it: https://github.com/mihaiolteanu/lyrics/pull/1/files