anchor.diff:  	      (other-paren (matching-brace paren)))
   	  (skip-whitespace direction mirror :ls ls)
   	  (cond ((and (string-at-cursor? direction mirror) (not (char-at-cursor? direction mirror "\"" :ls ls)))
  -		 (skip-to direction mirror " \"" :ls ls))
  -		;; ((= :string (token-type-at-cursor mirror))
  -		;;  ;; skip to end of string
  -		;;  )
  +		 (skip-to direction mirror (list " " "\"" undefined) :ls ls))
  +		((string-at-cursor? direction mirror)
  +		 (skip-until 
  +		  (lambda (c) (not (string-at-cursor? direction mirror)))
  +		  mirror direction :ls ls))
  +		((token-type-at-cursor? direction mirror :comment)
  +		 (skip-to direction mirror (list " " undefined) :ls ls))
   		((and (bracket-at-cursor? direction mirror)
   		      (char-at-cursor? direction mirror other-paren :ls ls))
   		 (go-char direction mirror))
  
positive.code: 			      (not (string-at-cursor? direction mirror)))
  		      do (decf tally)
  		    until (and (char-at-cursor? direction mirror other-paren :ls ls) (= 0 tally)))
  		 (unless (= :left direction) (go-char direction mirror)))
  		(t 
  		 (skip-to direction mirror (+ " " other-paren) :ls ls))))))
  
      (defun forward-sexp (mirror) (go-sexp :right mirror))
      (defun backward-sexp (mirror) (go-sexp :left mirror))
  
      (defun kill-forward-sexp (mirror))
      (defun kill-backward-sexp (mirror))
  
negative.code:     ;; TODO fix and test these predicates
      (defun at-beginning? (mirror &key ls)
        (with-slots (line ch) (get-cur :right mirror)
  	  (and (>= 0 line) (>= -1 ch))))
      (defun at-end? (mirror &key (ls (lines (mirror-contents mirror))))
        (with-slots (line ch) (get-cur :right mirror)
  	(and (>= line (- (length ls) 1))
  