anchor.diff:  (in-package :SWShell)
   
   (defvar *transform-help-strings* '(("at" . "[op] Focuses on definition of op")
  +				   ("move" . "[f l n p w a s r] Focus on neighboring expressions (first last next previous widen all search reverse-search)")
  +				   ("m" . "Abbreviation for move")
   				   ("simplify" . "[rules] Applies rewriting simplifier with supplied rules.")
   				   ("fold" . "[op] folds first occurrence of definition of op")
   				   ("unfold" . "[op] unfolds first occurrence of op")
  
positive.code: (defun interpret-command (command)
    (if (null *transform-term*)
        (princ "No term chosen! (Use \"at\" command)")
        (let ((new-term (Script::interpretTerm-3 *transform-spec* command *transform-term*)))
  	(if (MetaSlang::equalTerm?-2 *transform-term* new-term)
  	    (format t "No effect!")
  	    (progn 
  	      (push-state)
  
negative.code: 	()
  	(progn
  	  (push-state)
  	  (setq *transform-term* (cons new-term new-term))
  	  (push #'(lambda (future-steps)
  		    (if (null future-steps)
  			nil
  			(Script::mkAt-2 qid future-steps)))
  		*transform-commands*)
  	  (print-current-term)))
      (values)))
  
  (defparameter *move-alist* '(("f" :|First|) ("l" :|Last|) ("n" :|Next|) ("p" :|Prev|)
  			     ("w" :|Widen|) ("a" :|All|) ("t" :|All|)
  			     ("s" . :|Search|) ("r" . :|ReverseSearch|)))
  
  (defun move-command (moves)
    (let ((move-comms (loop for move on moves
  			  for pr = (assoc (car move) *move-alist* :test 'equal)
  			 if (null pr)
  			 do (return (progn (warn "Illegal move command: ~a" (car move)) nil))
  			 else collect (if (listp (cdr pr))
  					  (cdr pr)
  					  (if (null (cdr move))
  					      (return (progn (warn "Missing search arg: ~a" (car move)) nil))
  					      (cons (cdr pr) (progn (pop move) (car move))))))))
      (when move-comms
        (interpret-command (Script::mkMove move-comms)))
      (values)))
  
  (defun apply-command (qid constr-fn)
  