[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bad syntax highlighting in shell-script mode
From: |
Stefan Monnier |
Subject: |
Re: bad syntax highlighting in shell-script mode |
Date: |
Mon, 17 Jul 2006 17:12:55 -0400 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux) |
> I saved the following into a file called script.sh and then visited
> the file. The "echo a backquote" comment was coloured as if it was a
> string, as was the rest of the file after the comment:
> ------------------------------------------------------------------------
> #!/bin/sh
> echo "\`" # echo a backquote
> echo hello
> echo hello
> echo hello
> echo "hello"
> ------------------------------------------------------------------------
> I changed the file, removing the last 2 double quotes, and re-visited
> the file. The comment was then coloured correctly, as was the rest of
> the file:
> ------------------------------------------------------------------------
> #!/bin/sh
> echo "\`" # echo a backquote
> echo hello
> echo hello
> echo hello
> echo hello
> ------------------------------------------------------------------------
> It seems that the presence of double quotes in the file after the \`
> breaks highlighting.
No, it's the backslash before the ` which confused Emacs. I've installed
the patch below which I believe fixes it. But this code that tries to
handle backquotes and $(..) inside strings is not very reliable. Other than
the problem mentioned in the patch, there's also the fact that
echo "$(echo ") there)")"
doesn't recognize that the `there' is still within the $(...).
It's a difficult problem.
Stefan
Index: lisp/progmodes/sh-script.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/progmodes/sh-script.el,v
retrieving revision 1.181
diff -u -r1.181 sh-script.el
--- lisp/progmodes/sh-script.el 3 Jun 2006 08:37:49 -0000 1.181
+++ lisp/progmodes/sh-script.el 17 Jul 2006 21:06:14 -0000
@@ -982,7 +982,10 @@
(defun sh-quoted-subshell (limit)
"Search for a subshell embedded in a string. Find all the unescaped
\" characters within said subshell, remembering that subshells can nest."
- (if (re-search-forward "\"\\(?:.\\|\n\\)*?\\(\\$(\\|`\\)" limit t)
+ ;; FIXME: This can (and often does) match multiple lines, yet it makes no
+ ;; effort to handle multiline cases correctly, so it ends up being
+ ;; rather flakey.
+ (if (re-search-forward
"\"\\(?:\\(?:.\\|\n\\)*?[^\\]\\(\\\\\\\\\\)*\\)?\\(\\$(\\|`\\)" limit t)
;; bingo we have a $( or a ` inside a ""
(let ((char (char-after (point)))
(continue t)
- bad syntax highlighting in shell-script mode, Chris Moore, 2006/07/16
- Re: bad syntax highlighting in shell-script mode,
Stefan Monnier <=
- Re: bad syntax highlighting in shell-script mode, Chris Moore, 2006/07/17
- Re: bad syntax highlighting in shell-script mode, Stefan Monnier, 2006/07/18
- Re: bad syntax highlighting in shell-script mode, Chris Moore, 2006/07/18
- Re: bad syntax highlighting in shell-script mode, Vivek Dasmohapatra, 2006/07/20
- Re: bad syntax highlighting in shell-script mode, Chris Moore, 2006/07/18
- Re: bad syntax highlighting in shell-script mode, Stefan Monnier, 2006/07/18