From 9dffb5b69353cd041027b334a9c5aadf4163ec2d Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 1 Dec 2012 13:09:12 +0800 Subject: [PATCH] Fix last change. * emacs-lisp/lisp-mode.el (lisp-current-defun-name): * progmodes/m4-mode.el (m4-current-defun-name): * progmodes/perl-mode.el (perl-current-defun-name): * textmodes/tex-mode.el (tex-current-defun-name): * textmodes/texinfo.el (texinfo-current-defun-name): Use save-excursion. --- lisp/emacs-lisp/lisp-mode.el | 45 ++++++++++++++++++++++---------------------- lisp/progmodes/cperl-mode.el | 5 +++-- lisp/progmodes/m4-mode.el | 7 ++++--- lisp/progmodes/perl-mode.el | 6 ++++-- lisp/textmodes/tex-mode.el | 15 ++++++++------- lisp/textmodes/texinfo.el | 5 +++-- 6 files changed, 45 insertions(+), 38 deletions(-) diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index 11dd6dc6ee2..c0380c60e11 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -240,28 +240,29 @@ font-lock keywords will not be case sensitive." (defun lisp-current-defun-name () "Return the name of the defun at point, or nil." - (let ((location (point))) - ;; If we are now precisely at the beginning of a defun, make sure - ;; beginning-of-defun finds that one rather than the previous one. - (or (eobp) (forward-char 1)) - (beginning-of-defun) - ;; Make sure we are really inside the defun found, not after it. - (when (and (looking-at "\\s(") - (progn (end-of-defun) - (< location (point))) - (progn (forward-sexp -1) - (>= location (point)))) - (if (looking-at "\\s(") - (forward-char 1)) - ;; Skip the defining construct name, typically "defun" or - ;; "defvar". - (forward-sexp 1) - ;; The second element is usually a symbol being defined. If it - ;; is not, use the first symbol in it. - (skip-chars-forward " \t\n'(") - (buffer-substring-no-properties (point) - (progn (forward-sexp 1) - (point)))))) + (save-excursion + (let ((location (point))) + ;; If we are now precisely at the beginning of a defun, make sure + ;; beginning-of-defun finds that one rather than the previous one. + (or (eobp) (forward-char 1)) + (beginning-of-defun) + ;; Make sure we are really inside the defun found, not after it. + (when (and (looking-at "\\s(") + (progn (end-of-defun) + (< location (point))) + (progn (forward-sexp -1) + (>= location (point)))) + (if (looking-at "\\s(") + (forward-char 1)) + ;; Skip the defining construct name, typically "defun" or + ;; "defvar". + (forward-sexp 1) + ;; The second element is usually a symbol being defined. If it + ;; is not, use the first symbol in it. + (skip-chars-forward " \t\n'(") + (buffer-substring-no-properties (point) + (progn (forward-sexp 1) + (point))))))) (defvar lisp-mode-shared-map (let ((map (make-sparse-keymap))) diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 5b5097803c3..0a952cf3870 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -1745,8 +1745,9 @@ or as help on variables `cperl-tips', `cperl-problems', (make-local-variable 'add-log-current-defun-function) (setq add-log-current-defun-function (lambda () - (if (re-search-backward "^sub[ \t]+\\([^({ \t\n]+\\)" nil t) - (match-string-no-properties 1)))) + (save-excursion + (if (re-search-backward "^sub[ \t]+\\([^({ \t\n]+\\)" nil t) + (match-string-no-properties 1))))) (make-local-variable 'paragraph-start) (setq paragraph-start (concat "^$\\|" page-delimiter)) diff --git a/lisp/progmodes/m4-mode.el b/lisp/progmodes/m4-mode.el index 9cf98d979f6..7904033e68e 100644 --- a/lisp/progmodes/m4-mode.el +++ b/lisp/progmodes/m4-mode.el @@ -143,9 +143,10 @@ (defun m4-current-defun-name () "Return the name of the M4 function at point, or nil." - (if (re-search-backward - "^\\(\\(m4_\\)?define\\|A._DEFUN\\)(\\[?\\([A-Za-z0-9_]+\\)" nil t) - (match-string-no-properties 3))) + (save-excursion + (if (re-search-backward + "^\\(\\(m4_\\)?define\\|A._DEFUN\\)(\\[?\\([A-Za-z0-9_]+\\)" nil t) + (match-string-no-properties 3)))) ;;;###autoload (define-derived-mode m4-mode prog-mode "m4" diff --git a/lisp/progmodes/perl-mode.el b/lisp/progmodes/perl-mode.el index 82f742de274..46940457d36 100644 --- a/lisp/progmodes/perl-mode.el +++ b/lisp/progmodes/perl-mode.el @@ -581,8 +581,10 @@ create a new comment." (defun perl-current-defun-name () "The `add-log-current-defun' function in Perl mode." - (if (re-search-backward "^sub[ \t]+\\([^({ \t\n]+\\)" nil t) - (match-string-no-properties 1))) + (save-excursion + (if (re-search-backward "^sub[ \t]+\\([^({ \t\n]+\\)" nil t) + (match-string-no-properties 1)))) + (defvar perl-mode-hook nil "Normal hook to run when entering Perl mode.") diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el index 966fa60e6de..16689b1ad02 100644 --- a/lisp/textmodes/tex-mode.el +++ b/lisp/textmodes/tex-mode.el @@ -424,13 +424,14 @@ An alternative value is \" . \", if you use a font with a narrow period." (defun tex-current-defun-name () "Return the name of the TeX section/paragraph/chapter at point, or nil." - (when (re-search-backward - "\\\\\\(sub\\)*\\(section\\|paragraph\\|chapter\\)" - nil t) - (goto-char (match-beginning 0)) - (buffer-substring-no-properties - (1+ (point)) ; without initial backslash - (line-end-position)))) + (save-excursion + (when (re-search-backward + "\\\\\\(sub\\)*\\(section\\|paragraph\\|chapter\\)" + nil t) + (goto-char (match-beginning 0)) + (buffer-substring-no-properties + (1+ (point)) ; without initial backslash + (line-end-position))))) ;;;; ;;;; Font-Lock support diff --git a/lisp/textmodes/texinfo.el b/lisp/textmodes/texinfo.el index 0e45b603c1a..253b56f09b1 100644 --- a/lisp/textmodes/texinfo.el +++ b/lisp/textmodes/texinfo.el @@ -513,8 +513,9 @@ Subexpression 1 is what goes into the corresponding `@end' statement.") (defun texinfo-current-defun-name () "Return the name of the Texinfo node at point, or nil." - (if (re-search-backward "^@node[ \t]+\\([^,\n]+\\)" nil t) - (match-string-no-properties 1))) + (save-excursion + (if (re-search-backward "^@node[ \t]+\\([^,\n]+\\)" nil t) + (match-string-no-properties 1)))) ;;; Texinfo mode -- 2.11.4.GIT