anchor.diff:  		 (skip-to direction mirror (+ " " other-paren) :ls ls))))))
   
       (defun forward-sexp (mirror)
  +      (console.log mirror (map (lambda (l) (length l)) (lines (mirror-contents mirror))))
         (go-sexp :right mirror))
       (defun backward-sexp (mirror) 
         (go-sexp :left mirror))
  +
  +    (defun forward-block (mirror) (go-block :down mirror))
  +    (defun backward-block (mirror) (go-block :up mirror))
   
       (defun kill-forward-sexp (mirror))
       (defun kill-backward-sexp (mirror))
  
positive.code: 
      ;;;;;;;;;; basic s-exp navigation
      ;;;;;;;;;;;;;;;
      (defun go-sexp (direction mirror)
        (destructuring-bind (paren til)
  	  (case direction
  
negative.code:     ;;;;;;;;;; Basic codemirror-related predicates and getters
      ;;;;;;;;;;;;;;;
      ;; TODO fix and test these predicates
      (defun at-beginning? (mirror &key (ls (lines (mirror-contents mirror))))
        (with-slots (line ch) (get-cur :right mirror)
  	  (and (>= 0 line) (>= 0 ch))))
      (defun at-end? (mirror &key (ls (lines (mirror-contents mirror))))
        (with-slots (line ch) (get-cur :right mirror)
  	(and (>= line (- (length ls) 1))
  	     ;; the line length doesn't include newline
  	     ;; so we don't subtract one here
  	     (>= ch (length (last ls))))))
      (defun at-empty-line? (mirror &key (ls (lines (mirror-contents mirror))))
        (with-slots (line ch) (get-cur :right mirror)
  	(= 0 (length (aref ls line)))))
  
      (defun mirror-contents (mirror)
        (chain mirror (get-value)))
  