comparison lisp/simple.el @ 27302:1cb6c18c3163

(eval-expression): Don't bind debug-on-error if eval-expression-debug-on-error is nil. Detect changed debug-on-error, and propagate new value to global binding, if eval-expression-debug-on-error is non-nil, (eval-expression-debug-on-error): Change doc string.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 12 Jan 2000 13:06:52 +0000
parents dbaaa90ea0eb
children 8a7e3bcab064
comparison
equal deleted inserted replaced
27301:8c79b30d8475 27302:1cb6c18c3163
552 :group 'lisp 552 :group 'lisp
553 :type 'integer 553 :type 'integer
554 :version "21.1") 554 :version "21.1")
555 555
556 (defcustom eval-expression-debug-on-error t 556 (defcustom eval-expression-debug-on-error t
557 "*Value to use for `debug-on-error' when evaluating in `eval-expression'." 557 "*Non-nil means set `debug-on-error' when evaluating in `eval-expression'.
558 If nil, don't change the value of `debug-on-error'."
558 :group 'lisp 559 :group 'lisp
559 :type 'boolean 560 :type 'boolean
560 :version "21.1") 561 :version "21.1")
561 562
562 ;; We define this, rather than making `eval' interactive, 563 ;; We define this, rather than making `eval' interactive,
568 (interactive 569 (interactive
569 (list (read-from-minibuffer "Eval: " 570 (list (read-from-minibuffer "Eval: "
570 nil read-expression-map t 571 nil read-expression-map t
571 'read-expression-history) 572 'read-expression-history)
572 current-prefix-arg)) 573 current-prefix-arg))
573 (let ((debug-on-error eval-expression-debug-on-error)) 574
574 (setq values (cons (eval eval-expression-arg) values))) 575 (if (null eval-expression-debug-on-error)
576 (setq values (cons (eval eval-expression-arg) values))
577 (let ((old-value (make-symbol "t")) new-value)
578 ;; Bind debug-on-error to something unique so that we can
579 ;; detect when evaled code changes it.
580 (let ((debug-on-error old-value))
581 (setq values (cons (eval eval-expression-arg) values))
582 (setq new-value debug-on-error))
583 ;; If evaled code has changed the value of debug-on-error,
584 ;; propagate that change to the global binding.
585 (unless (eq old-value new-value)
586 (setq debug-on-error new-value))))
587
575 (let ((print-length eval-expression-print-length) 588 (let ((print-length eval-expression-print-length)
576 (print-level eval-expression-print-level)) 589 (print-level eval-expression-print-level))
577 (prin1 (car values) 590 (prin1 (car values)
578 (if eval-expression-insert-value (current-buffer) t)))) 591 (if eval-expression-insert-value (current-buffer) t))))
579 592