summaryrefslogtreecommitdiff
path: root/lisp/progmodes/sh-script.el
diff options
context:
space:
mode:
authorSimon Marshall <simon@gnu.org>1997-12-04 19:47:59 +0000
committerSimon Marshall <simon@gnu.org>1997-12-04 19:47:59 +0000
commit87002f70a3ac026295ea0eb4289353cbe62d1341 (patch)
tree7960f7baea7bbc0f74d0a5b99e2e9500dff843ed /lisp/progmodes/sh-script.el
parent0561decbb52019cd265516cd3e637829d72d5a1a (diff)
downloademacs-87002f70a3ac026295ea0eb4289353cbe62d1341.tar.gz
Deal with `#'s in variable references.
Diffstat (limited to 'lisp/progmodes/sh-script.el')
-rw-r--r--lisp/progmodes/sh-script.el9
1 files changed, 8 insertions, 1 deletions
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index fa53fbca6d8..4898a16ac94 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -628,7 +628,14 @@ See `sh-feature'.")
(defconst sh-font-lock-syntactic-keywords
;; Mark a `#' character as having punctuation syntax in a variable reference.
- '(("\\$[({]?\\(#\\)" 1 (1 . nil))))
+ ;; Really we should do this properly. From Chet Ramey and Brian Fox:
+ ;; "A `#' begins a comment when it is unquoted and at the beginning of a
+ ;; word. In the shell, words are separated by metacharacters."
+ ;; To do this in a regexp would be slow as it would be anchored to the right.
+ ;; But I can't be bothered to write a function to do it properly and
+ ;; efficiently. So we only do it properly for `#' in variable references and
+ ;; do it efficiently by anchoring the regexp to the left.
+ '(("\\${?[^}#\n\t ]*\\(##?\\)" 1 (1 . nil))))
;; mode-command and utility functions