February 17th, 2012

Naming functions with keywords

I used to have a collection of miscellaneous utilities in a project named ZPB (after my initials). They weren't functions I used in actual source code, just little REPL conveniences, inspired in part by Rob Warnock's great suggestion to Use the Lisp environment to make your life easier!!

Even though the package prefix was short (zpb), I typed the stuff often enough that the prefix in the repl was annoying, but I didn't really want inherit everything with use-package, either. What to do?

Lately I've taken to sticking the functions in my startup file and naming them after keywords. For example:

(defun :go (&optional (thing *))
  "View THING with some appropriate viewer."
  ;; On my Mac laptop, I use "open" instead.
  (sb-ext:run-program "gnome-open" (list (princ-to-string thing))
                      :search t)

With this in my startup file, I can do something like this:

* (url-of-interest object)

* (:go)
URL is opened in Chrome

These functions are short, easy to type, and always available in any REPL context regardless of the editor settings or current package. In addition to :go, I also have :file-string, :file-vector, :file-lines, :bits, :hex, :make-project, and a few others.

Do you define any shortcuts like this?