bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#15826: 24.3.50; SMIE hangs in sh-mode


From: Stefan Monnier
Subject: bug#15826: 24.3.50; SMIE hangs in sh-mode
Date: Thu, 07 Nov 2013 23:34:38 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

> - emacs -Q
> - C-x C-f foo.sh
> - type “for i in”
> - immediately after entering the ‘n’, emacs will hang

Indeed, thank you.  I installed the patch below which should fix it.


        Stefan


=== modified file 'lisp/progmodes/sh-script.el'
--- lisp/progmodes/sh-script.el 2013-10-24 21:16:20 +0000
+++ lisp/progmodes/sh-script.el 2013-11-08 04:31:52 +0000
@@ -1730,7 +1730,7 @@
 like a keyword, then it is a keyword."
   (let ((prev (funcall smie-backward-token-function)))
     (if (zerop (length prev))
-        (looking-back "\\s(" (1- (point)))
+        (looking-back "\\`\\|\\s(" (1- (point)))
       (assoc prev smie-grammar))))
 
 (defun sh-smie--newline-semi-p (&optional tok)
@@ -1804,12 +1804,14 @@
       (setq prev (funcall smie-backward-token-function))
       (cond
        ((zerop (length prev))
-        (if newline
-            (progn (cl-assert words) (setq res 'word))
+       (cond
+        (newline (cl-assert words) (setq res 'word))
+        ((bobp) (setq res 'word))
+        (t
           (setq words t)
           (condition-case nil
               (forward-sexp -1)
-            (scan-error (setq res 'unknown)))))
+            (scan-error (setq res 'unknown))))))
        ((equal prev ";")
         (if words (setq newline t)
           (setq res 'keyword)))






reply via email to

[Prev in Thread] Current Thread [Next in Thread]