summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2017-03-11 16:36:23 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2017-03-11 16:36:23 -0500
commit46fcaf3361b56306c288f2ddf4dd8a7dfab7ce2f (patch)
treee5410fd7960b55e431121d5d21d1b889b1b34cd3
parent4086d850dc02c95615095adddd1e798377f03cec (diff)
downloademacs-46fcaf3361b56306c288f2ddf4dd8a7dfab7ce2f.tar.gz
Improve last change
* lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Use ppss to check escaping and add help-echo.
-rw-r--r--lisp/emacs-lisp/lisp-mode.el18
1 files changed, 11 insertions, 7 deletions
diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el
index 3ed0d062e34..c2f5f42ace8 100644
--- a/lisp/emacs-lisp/lisp-mode.el
+++ b/lisp/emacs-lisp/lisp-mode.el
@@ -412,13 +412,17 @@ This will generate compile-time constants from BINDINGS."
(,(concat "\\\\\\\\\\[\\(" lisp-mode-symbol-regexp "\\)\\]")
(1 font-lock-constant-face prepend))
;; Ineffective backslashes (typically in need of doubling).
- ("\\(?:[^\\]\\|^\\)\\(?:\\\\\\\\\\)*\\(\\(\\\\\\)\\([^\"\\]\\)\\)"
- (2 (and (nth 3 (syntax-ppss))
- (equal (ignore-errors
- (car (read-from-string
- (format "\"%s\"" (match-string 1)))))
- (match-string 3))
- font-lock-warning-face)
+ ("\\(\\\\\\)\\([^\"\\]\\)"
+ (1 (let ((ppss (save-excursion (syntax-ppss (match-beginning 0)))))
+ (and (nth 3 ppss) ;Inside a string.
+ (not (nth 5 ppss)) ;The \ is not itself \-escaped.
+ (equal (ignore-errors
+ (car (read-from-string
+ (format "\"%s\""
+ (match-string-no-properties 0)))))
+ (match-string-no-properties 2))
+ `(face ,font-lock-warning-face
+ help-echo "This \\ has no effect")))
prepend))
;; Words inside ‘’ and `' tend to be symbol names.
(,(concat "[`‘]\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)"