summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorDaniel Colascione <dancol@dancol.org>2014-01-21 15:42:59 -0800
committerDaniel Colascione <dancol@dancol.org>2014-01-21 15:42:59 -0800
commit00d2a6bb2663106a6584ea229958d5bba32703d2 (patch)
treefa274994b05763327efef2c713f0dc61dff7e3f9 /lisp
parent79b61bccf841e33df9f457df1d0dc5c45667efbc (diff)
downloademacs-00d2a6bb2663106a6584ea229958d5bba32703d2.tar.gz
Fix here-doc highlighting
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog9
-rw-r--r--lisp/progmodes/sh-script.el16
2 files changed, 19 insertions, 6 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 94966f657c1..6bdf4463a6f 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2014-01-21 Daniel Colascione <dancol@dancol.org>
+
+ * progmodes/sh-script.el (sh--inside-noncommand-expression):
+ Correctly detect when we're inside an arithmetic expansion form
+ containing nested parenthesis.
+ (sh--maybe-here-document): Use `sh--inside-noncommand-expression`
+ to detect cases where we shouldn't expand "<<" to a heredoc
+ skeleton.
+
2014-01-21 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/eldoc.el: Properly remove message in minibuffer case.
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index daf8d299663..f41378f2f53 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -975,11 +975,14 @@ See `sh-feature'.")
(let ((ppss (syntax-ppss pos)))
(when (nth 1 ppss)
(goto-char (nth 1 ppss))
- (pcase (char-after)
- ;; $((...)) or $[...] or ${...}.
- (`?\( (and (eq ?\( (char-before))
- (eq ?\$ (char-before (1- (point))))))
- ((or `?\{ `?\[) (eq ?\$ (char-before))))))))
+ (or
+ (pcase (char-after)
+ ;; ((...)) or $((...)) or $[...] or ${...}. Nested
+ ;; parenthesis can occur inside the first of these forms, so
+ ;; parse backward recursively.
+ (`?\( (eq ?\( (char-before)))
+ ((or `?\{ `?\[) (eq ?\$ (char-before))))
+ (sh--inside-noncommand-expression (1- (point))))))))
(defun sh-font-lock-open-heredoc (start string eol)
"Determine the syntax of the \\n after a <<EOF.
@@ -4265,7 +4268,8 @@ The document is bounded by `sh-here-document-word'."
(or (not (looking-back "[^<]<<"))
(save-excursion
(backward-char 2)
- (sh-quoted-p))
+ (or (sh-quoted-p)
+ (sh--inside-noncommand-expression (point))))
(nth 8 (syntax-ppss))
(let ((tabs (if (string-match "\\`-" sh-here-document-word)
(make-string (/ (current-indentation) tab-width) ?\t)