From 984edd2215e74d54d387c7e8fa2fd14ee43ff5f0 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Mon, 20 Sep 2010 23:45:09 +0200 Subject: [PATCH] * lisp/simple.el (blink-matching-open): Use syntax-class. * lisp/emacs-lisp/lisp.el (up-list): Don't do nothing silently. --- lisp/ChangeLog | 4 ++++ lisp/emacs-lisp/lisp.el | 12 ++++++++---- lisp/simple.el | 7 ++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index dadc344e9fc..96c953452fa 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2010-09-20 Stefan Monnier + * emacs-lisp/lisp.el (up-list): Don't do nothing silently. + + * simple.el (blink-matching-open): Use syntax-class. + * progmodes/pascal.el (pascal-mode): Use define-derived-mode. Set invisibility spec for pascal's outline mode. (pascal-outline-change): Clean up calling convention. diff --git a/lisp/emacs-lisp/lisp.el b/lisp/emacs-lisp/lisp.el index e799dcd77c1..cfb56eb3232 100644 --- a/lisp/emacs-lisp/lisp.el +++ b/lisp/emacs-lisp/lisp.el @@ -141,15 +141,19 @@ A negative argument means move backward but still to a less deep spot. This command assumes point is not in a string or comment." (interactive "^p") (or arg (setq arg 1)) - (let ((inc (if (> arg 0) 1 -1))) + (let ((inc (if (> arg 0) 1 -1)) + pos) (while (/= arg 0) - (if forward-sexp-function + (if (null forward-sexp-function) + (goto-char (or (scan-lists (point) inc 1) (buffer-end arg))) (condition-case err - (while (let ((pos (point))) + (while (progn (setq pos (point)) (forward-sexp inc) (/= (point) pos))) (scan-error (goto-char (nth 2 err)))) - (goto-char (or (scan-lists (point) inc 1) (buffer-end arg)))) + (if (= (point) pos) + (signal 'scan-error + (list "Unbalanced parentheses" (point) (point))))) (setq arg (- arg inc))))) (defun kill-sexp (&optional arg) diff --git a/lisp/simple.el b/lisp/simple.el index 1ab737d5ec1..ca20a57ec9c 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -5525,9 +5525,10 @@ The function should return non-nil if the two tokens do not match.") ;; backward-sexp skips backward over prefix chars, ;; so move back to the matching paren. (while (and (< (point) (1- oldpos)) - (let ((code (car (syntax-after (point))))) - (or (eq (logand 65536 code) 6) - (eq (logand 1048576 code) 1048576)))) + (let ((code (syntax-after (point)))) + (or (eq (syntax-class code) 6) + (eq (logand 1048576 (car code)) + 1048576)))) (forward-char 1)) (point)) (error nil)))))) -- 2.39.2