# HG changeset patch # User Eli Zaretskii # Date 1159609125 0 # Node ID c0893cfe56854946c5039a3ff0833aa8afad197f # Parent 458d299b61855a9742bdf7eddc5dcabcae0d9c74 (sh-prev-thing): Take `sh-leading-keywords' into account. diff -r 458d299b6185 -r c0893cfe5685 lisp/progmodes/sh-script.el --- a/lisp/progmodes/sh-script.el Sat Sep 30 09:22:41 2006 +0000 +++ b/lisp/progmodes/sh-script.el Sat Sep 30 09:38:45 2006 +0000 @@ -2473,33 +2473,42 @@ (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 ?\;)) - (save-excursion - ;; skip forward over white space newline and \ at eol - (skip-chars-forward " \t\n\\\\") - (sh-debug "Now at %d start=%d" (point) start) - (if (>= (point) start) - (progn - (sh-debug "point: %d >= start: %d" (point) start) - nil) - (sh-get-word)) - )) - (t - ;; c -- return a string - (char-to-string c) - )) - ))) + (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) + )) + ))))) (defun sh-this-is-a-continuation ()