Mercurial > emacs
changeset 81313:8021008d25bf
(sh-font-lock-backslash-quote, sh-font-lock-flush-syntax-ppss-cache): New funs.
(sh-font-lock-syntactic-keywords): Use them to distinguish the
different possible cases for \'.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 11 Jun 2007 22:16:43 +0000 |
parents | b6eaf964a6cf |
children | 5671bcc5449a |
files | lisp/ChangeLog lisp/progmodes/sh-script.el |
diffstat | 2 files changed, 24 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Mon Jun 11 22:10:24 2007 +0000 +++ b/lisp/ChangeLog Mon Jun 11 22:16:43 2007 +0000 @@ -1,5 +1,10 @@ 2007-06-11 Stefan Monnier <monnier@iro.umontreal.ca> + * progmodes/sh-script.el (sh-font-lock-backslash-quote) + (sh-font-lock-flush-syntax-ppss-cache): New functions. + (sh-font-lock-syntactic-keywords): Use them to distinguish the + different possible cases for \'. + * complete.el (PC-bindings): Don't bind things already bound in the parent keymap.
--- a/lisp/progmodes/sh-script.el Mon Jun 11 22:10:24 2007 +0000 +++ b/lisp/progmodes/sh-script.el Mon Jun 11 22:16:43 2007 +0000 @@ -884,7 +884,7 @@ (defconst sh-here-doc-syntax (string-to-syntax "|")) ;; generic string (defconst sh-escaped-line-re - ;; Should match until the real end-of-continued line, but if that is not + ;; Should match until the real end-of-continued-line, but if that is not ;; possible (because we bump into EOB or the search bound), then we should ;; match until the search bound. "\\(?:\\(?:.*[^\\\n]\\)?\\(?:\\\\\\\\\\)*\\\\\n\\)*.*") @@ -1062,6 +1062,19 @@ (when (save-excursion (backward-char 2) (looking-at ";;\\|in")) sh-st-punc))) +(defun sh-font-lock-backslash-quote () + (if (eq (save-excursion (nth 3 (syntax-ppss (match-beginning 0)))) ?\') + ;; In a '...' the backslash is not escaping. + sh-st-punc + nil)) + +(defun sh-font-lock-flush-syntax-ppss-cache (limit) + ;; This should probably be a standard function provided by font-lock.el + ;; (or syntax.el). + (syntax-ppss-flush-cache (point)) + (goto-char limit) + nil) + (defun sh-apply-quoted-subshell () "Apply the `sh-st-punc' syntax to all the matches in `match-data'. This is used to flag quote characters in subshell constructs inside strings @@ -1080,7 +1093,11 @@ ;; of the shell command language (under `quoting') but with `$' removed. `(("[^|&;<>()`\\\"' \t\n]\\(#+\\)" 1 ,sh-st-symbol) ;; In a '...' the backslash is not escaping. - ("\\(\\\\\\)'" 1 ,sh-st-punc) + ("\\(\\\\\\)'" (1 (sh-font-lock-backslash-quote))) + ;; The previous rule uses syntax-ppss, but the subsequent rules may + ;; change the syntax, so we have to tell syntax-ppss that the states it + ;; has just computed will need to be recomputed. + (sh-font-lock-flush-syntax-ppss-cache) ;; Make sure $@ and @? are correctly recognized as sexps. ("\\$\\([?@]\\)" 1 ,sh-st-symbol) ;; Find HEREDOC starters and add a corresponding rule for the ender.