Mercurial > emacs
diff lisp/progmodes/sh-script.el @ 90614:8dd8c8286063
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 460-475)
- Update from CVS
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 145-152)
- Merge from emacs--devo--0
- Update from CVS
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-118
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sun, 15 Oct 2006 02:54:13 +0000 |
parents | bb0e318b7c53 5e9926b80061 |
children | 6588c6259dfb |
line wrap: on
line diff
--- a/lisp/progmodes/sh-script.el Thu Oct 05 12:20:23 2006 +0000 +++ b/lisp/progmodes/sh-script.el Sun Oct 15 02:54:13 2006 +0000 @@ -2460,55 +2460,45 @@ ;; (if (bolp) nil - (let (c min-point - (start (point))) - (save-restriction - (narrow-to-region - (if (sh-this-is-a-continuation) - (setq min-point (sh-prev-line nil)) - (save-excursion - (beginning-of-line) - (setq min-point (point)))) - (point)) - (skip-chars-backward " \t;") - (unless (looking-at "\\s-*;;") - (skip-chars-backward "^)}];\"'`({[") - (setq c (char-before))) - (sh-debug "stopping at %d c is %s start=%d min-point=%d" - (point) c start min-point) - (if (< (point) min-point) - (error "point %d < min-point %d" (point) min-point)) - (cond - ((looking-at "\\s-*;;") - ;; (message "Found ;; !") - ";;") - ((or (eq c ?\n) - (eq c nil) - (eq c ?\;)) - (let (done kwd next - (boundary (point))) - (skip-chars-forward " \t\n\\\\") - (while (and (not done) (not (eobp))) - (if next (setq boundary next)) - ;; skip forward over white space newline and \ at eol - (sh-debug "Now at %d start=%d" (point) start) - (if (>= (point) start) - (progn - (sh-debug "point: %d >= start: %d" (point) start) - nil) - (setq kwd (sh-get-word)) - (unless (eobp) (forward-char 1)) - (if (member kwd (sh-feature sh-leading-keywords)) - (setq next (point)) - (setq done t))) - (skip-chars-forward " \t\n\\\\")) - (goto-char boundary) - kwd)) - (t - ;; c -- return a string - (char-to-string c) - )) - )))) + (let ((start (point)) + (min-point (if (sh-this-is-a-continuation) + (sh-prev-line nil) + (line-beginning-position)))) + (skip-chars-backward " \t;" min-point) + (if (looking-at "\\s-*;;") + ;; (message "Found ;; !") + ";;" + (skip-chars-backward "^)}];\"'`({[" min-point) + (let ((c (if (> (point) min-point) (char-before)))) + (sh-debug "stopping at %d c is %s start=%d min-point=%d" + (point) c start min-point) + (if (not (memq c '(?\n nil ?\;))) + ;; c -- return a string + (char-to-string c) + ;; Return the leading keyword of the "command" we supposedly + ;; skipped over. Maybe we skipped too far (e.g. past a `do' or + ;; `then' that precedes the actual command), so check whether + ;; we're looking at such a keyword and if so, move back forward. + (let ((boundary (point)) + kwd next) + (while + (progn + ;; Skip forward over white space newline and \ at eol. + (skip-chars-forward " \t\n\\\\" start) + (if (>= (point) start) + (progn + (sh-debug "point: %d >= start: %d" (point) start) + nil) + (if next (setq boundary next)) + (sh-debug "Now at %d start=%d" (point) start) + (setq kwd (sh-get-word)) + (if (member kwd (sh-feature sh-leading-keywords)) + (progn + (setq next (point)) + t) + nil)))) + (goto-char boundary) + kwd))))))) (defun sh-this-is-a-continuation () @@ -2527,7 +2517,7 @@ (goto-char where)) (prog1 (buffer-substring (point) - (progn (skip-chars-forward "^ \t\n;&")(point))) + (progn (skip-chars-forward "^ \t\n;&|()")(point))) (unless and-move (goto-char start)))))