Log in

No account? Create an account

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?


zeal couple of useful ones

some :keyword functions I use frequently are :printv (based on printv from gbbopen) and :break , :break/print , :break/inspect etc.

I've always worried that defining functions on keywords was somehow not kosher -- although it never stopped me from indulging myself for the really really useful ones like the above. Is it actually an officially sanctioned practice?

Re: zeal couple of useful ones

I've only heard, anecdotally, of problems on LispWorks, which issues a continuable error when you use a keyword as the name in DEFUN.