1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-09 07:40:39 -08:00

(lisp-font-lock-syntactic-face-function): Don't infinite lop at bob.

(emacs-lisp-mode): Mark its main custom group to be `lisp'.
(prin1-char): New fun.
(eval-last-sexp-1): Use it.  Use with-syntax-table as well.
(eval-defun-1): Don't replace `defvar' with `defconst'.
This commit is contained in:
Stefan Monnier 2003-05-27 14:17:17 +00:00
parent 61d41830c8
commit c689a61d1c

View file

@ -1,6 +1,6 @@
;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands ;;; lisp-mode.el --- Lisp mode, and its idiosyncratic commands
;; Copyright (C) 1985, 1986, 1999, 2000, 2001 Free Software Foundation, Inc. ;; Copyright (C) 1985, 1986, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
;; Maintainer: FSF ;; Maintainer: FSF
;; Keywords: lisp, languages ;; Keywords: lisp, languages
@ -146,7 +146,8 @@
(let ((n 0)) (let ((n 0))
(goto-char (nth 8 state)) (goto-char (nth 8 state))
(condition-case nil (condition-case nil
(while (progn (backward-sexp 1) (setq n (1+ n)))) (while (and (not (bobp))
(progn (backward-sexp 1) (setq n (1+ n)))))
(scan-error nil)) (scan-error nil))
(when (> n 0) (when (> n 0)
(let ((sym (intern-soft (let ((sym (intern-soft
@ -320,6 +321,7 @@ if that value is non-nil."
(lisp-mode-variables) (lisp-mode-variables)
(setq imenu-case-fold-search nil) (setq imenu-case-fold-search nil)
(run-hooks 'emacs-lisp-mode-hook)) (run-hooks 'emacs-lisp-mode-hook))
(put 'emacs-lisp-mode 'custom-mode-group 'lisp)
(defvar lisp-mode-map (defvar lisp-mode-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
@ -445,6 +447,20 @@ alternative printed representations that can be displayed."
(nth 1 value)) (nth 1 value))
(goto-char (min (point-max) point))))))) (goto-char (min (point-max) point)))))))
(defun prin1-char (char)
"Return a string representing CHAR as a character rather than as an integer.
If CHAR is not a character, return nil."
(and (integerp char)
(char-valid-p (event-basic-type char))
(concat
"?"
(mapconcat
(lambda (modif)
(cond ((eq modif 'super) "\\s-")
(t (string ?\\ (upcase (aref (symbol-name modif) 0)) ?-))))
(event-modifiers char) "")
(string (event-basic-type char)))))
(defun eval-last-sexp-1 (eval-last-sexp-arg-internal) (defun eval-last-sexp-1 (eval-last-sexp-arg-internal)
"Evaluate sexp before point; print value in minibuffer. "Evaluate sexp before point; print value in minibuffer.
With argument, print output into current buffer." With argument, print output into current buffer."
@ -454,9 +470,7 @@ With argument, print output into current buffer."
(opoint (point)) (opoint (point))
ignore-quotes ignore-quotes
expr) expr)
(unwind-protect (with-syntax-table emacs-lisp-mode-syntax-table
(save-excursion
(set-syntax-table emacs-lisp-mode-syntax-table)
;; If this sexp appears to be enclosed in `...' ;; If this sexp appears to be enclosed in `...'
;; then ignore the surrounding quotes. ;; then ignore the surrounding quotes.
(setq ignore-quotes (setq ignore-quotes
@ -500,16 +514,18 @@ With argument, print output into current buffer."
'(&rest args) '(&rest args)
expr expr
'args))))) 'args)))))
expr)) expr))))))
(set-syntax-table stab))))))
(let ((unabbreviated (let ((print-length nil) (print-level nil)) (let ((unabbreviated (let ((print-length nil) (print-level nil))
(prin1-to-string value))) (prin1-to-string value)))
(print-length eval-expression-print-length) (print-length eval-expression-print-length)
(print-level eval-expression-print-level) (print-level eval-expression-print-level)
(char-string (prin1-char value))
(beg (point)) (beg (point))
end) end)
(prog1 (prog1
(prin1 value) (prin1 value)
(if (and (eq standard-output t) char-string)
(princ (concat " = " char-string)))
(setq end (point)) (setq end (point))
(when (and (bufferp standard-output) (when (and (bufferp standard-output)
(or (not (null print-length)) (or (not (null print-length))
@ -544,9 +560,11 @@ Likewise for other constructs as necessary."
(cond ((not (listp form)) (cond ((not (listp form))
form) form)
((and (eq (car form) 'defvar) ((and (eq (car form) 'defvar)
(cdr-safe (cdr-safe form))) (cdr-safe (cdr-safe form))
;; Force variable to be bound. (boundp (cadr form)))
(cons 'defconst (cdr form))) ;; Force variable to be re-set.
`(progn (defvar ,(nth 1 form) nil ,@(nthcdr 3 form))
(setq ,(nth 1 form) ,(nth 2 form))))
;; `defcustom' is now macroexpanded to ;; `defcustom' is now macroexpanded to
;; `custom-declare-variable' with a quoted value arg. ;; `custom-declare-variable' with a quoted value arg.
((and (eq (car form) 'custom-declare-variable) ((and (eq (car form) 'custom-declare-variable)