2012-10-31 Stefan Monnier <monnier@iro.umontreal.ca>
+ * progmodes/sh-script.el (sh--inside-noncommand-expression):
+ Rename from sh--inside-arithmetic-expression, handle more cases
+ (bug#11263).
+
* progmodes/sh-script.el (sh--inside-arithmetic-expression): New func.
(sh-font-lock-open-heredoc): Use it (bug#12770).
(concat "<<-?\\s-*\\\\?\\(\\(?:['\"][^'\"]+['\"]\\|\\sw\\|[-/~._]\\)+\\)"
sh-escaped-line-re "\\(\n\\)")))
-(defun sh--inside-arithmetic-expression (pos)
+(defun sh--inside-noncommand-expression (pos)
(save-excursion
(let ((ppss (syntax-ppss pos)))
(when (nth 1 ppss)
(goto-char (nth 1 ppss))
- (and (eq ?\( (char-after))
- (eq ?\( (char-before))
- (eq ?\$ (char-before (1- (point)))))))))
+ (pcase (char-after)
+ ;; $((...)) or $[...] or ${...}.
+ (`?\( (and (eq ?\( (char-before))
+ (eq ?\$ (char-before (1- (point))))))
+ ((or `?\{ `?\[) (eq ?\$ (char-before))))))))
(defun sh-font-lock-open-heredoc (start string eol)
"Determine the syntax of the \\n after a <<EOF.
Point is at the beginning of the next line."
(unless (or (memq (char-before start) '(?< ?>))
(sh-in-comment-or-string start)
- (sh--inside-arithmetic-expression start))
+ (sh--inside-noncommand-expression start))
;; We're looking at <<STRING, so we add "^STRING$" to the syntactic
;; font-lock keywords to detect the end of this here document.
(let ((str (replace-regexp-in-string "['\"]" "" string))
# This should not be treated as a heredoc (bug#12770).
2
+foo='bar<<' # bug#11263
+echo ${foo%<<aa} # bug#11263
+echo $((1<<8)) # bug#11263
+echo $[1<<8] # bug#11263
+
declare -a VERSION
for i in $(ls "$PREFIX/sbin") ; do
echo -e $N')' $i