(defun ledit-atom-cmd (cmd) (case cmd ((h ?) (ledit-help)) (p (level-prin1 *sexp*)) ((ok q quit) (throw 'edit-sexp-end cmd)) (pp (pprint *sexp*)) (mark (push *sexp* *markstack*)) ((! ^ top) (setq *sexp* *sexp0*)) ((0 u) (setq *sexp* *sexp1*)) (< (setq *sexp* (cond (*markstack* (pop *markstack*)) (t *sexp0*)))) (cdr (setq *sexp* (cdr *sexp*))) (nx (setq *sexp* (cadr (member *sexp* *sexp1* :test #'equal)))) (t (if (numberp cmd) (ledit-atom-number-cmd cmd) (princ "?"))))) ;;; (defun ledit-atom-number-cmd (num) (cond ((and (> num 0) (< num (1+ (length *sexp*)))) (setq *sexp1* *sexp*) (setq *sexp* (nth (1- num) *sexp*))) ((and (< num 0) (< (- num) (1+ (length *sexp*)))) (setq *sexp1* *sexp*) (setq *sexp* (nth (- 0 num 1) (reverse *sexp*))))))