Robert Smith avatar Robert Smith committed ea38c14

Add lazy bracket syntax.

Comments (0)

Files changed (1)

                             genargs)
            ,@body)))))
 
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NOTATION ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defun enable-lazy-syntax ()
+  (set-macro-character
+   #\[
+   (lambda (stream char)
+     (declare (ignore char))
+     (let* ((lst (read-delimited-list #\] stream t)))
+       (if (null lst)
+           nil
+           (destructuring-bind (f . args) lst
+             `(lazycall ,(if (listp f)
+                             f
+                             `(function ,f))
+                        ,@args))))))
+
+  (set-macro-character
+   #\]
+   (get-macro-character #\))))
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EXAMPLES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (deflazy if* (pred then else)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.