]> git.eshelyaron.com Git - emacs.git/commitdiff
(sh-prev-thing): Take `sh-leading-keywords' into account.
authorEli Zaretskii <eliz@gnu.org>
Sat, 30 Sep 2006 09:39:35 +0000 (09:39 +0000)
committerEli Zaretskii <eliz@gnu.org>
Sat, 30 Sep 2006 09:39:35 +0000 (09:39 +0000)
lisp/ChangeLog
lisp/progmodes/sh-script.el

index 9286c8d1d78ad414fbaa090500616caa0af2b8e5..04e754852976f6bc0c65f1a2bdd9d7f193a6cc53 100644 (file)
@@ -1,3 +1,8 @@
+2006-09-30  Michael Welsh Duggan  <md5i@cs.cmu.edu>
+
+       * progmodes/sh-script.el (sh-prev-thing): Take
+       `sh-leading-keywords' into account.
+
 2006-09-29  Glenn Morris  <rgm@gnu.org>
 
        * custom.el (defcustom): Doc fix.
index f828c36917bff1bda198d6d5dc0d82b94d3787f0..4032c9ce933aae44dc0c700c2acf51e0c9bd5433 100644 (file)
@@ -2473,33 +2473,42 @@ we go to the end of the previous line and do not check for continuations."
        (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 ()