This system implements a very interesting idea. It makes it very easy to call any lisp function from the command line.
The cool part of this story is the ability to quickly hack on your functions in the Emacs while calling them from the command line. This can be especially useful in many cases like writing a plugin for the BitBar.
ScriptL
consists of three parts:
- a server, running in your lisp image
- a client binary for passing parameters to the server and returning results
- a thin wrapper for each command.
Here is a minimal example to show you how it works.
The first command starts the server. Second, defines the usual function and third creates a shell script “hello-world” in the current directory:
POFTHEDAY> (scriptl:start)
POFTHEDAY> (defun hello-world (&optional (name "Anonymous"))
(format t "Hello, ~A!~%" name))
POFTHEDAY> (scriptl:make-script "hello-world"
'hello-world)
Now let’s switch to the command line and call our function:
[poftheday] ./hello-world
Hello, Anonymous!
[poftheday] ./hello-world Bob
Hello, Bob!
Here is how the wrapper looks like under the hood:
[poftheday] cat hello-world
#!/bin/sh
SCRIPTLCOM="./.qlot/dists/quicklisp/software/
scriptl-20180228-git/src/scriptlcom/src/scriptlcom"
FUNCTION="POFTHEDAY::HELLO-WORLD"
ERRORS="COMMON-LISP::NIL"
SYSTEM=""
$SCRIPTLCOM --sl-version 2 -E "$ERRORS" -l "$SYSTEM" -f "$FUNCTION" -- "$@"
As you can see, it calls scriptlcom
binary, written in C.
The ScriptL
server can also be started on a remote machine, but
the documentation does not cover this setup.
Playing with this system I recall where I seen a similar way of calling the
server from the command line. It is possible with CL-Gearman
, reviewed in
post number 0095. Gearman has a command-line client but, is more
suitable for server-server communication.