From: Stefan Monnier Date: Sat, 11 Mar 2017 21:36:23 +0000 (-0500) Subject: Improve last change X-Git-Tag: emacs-26.0.90~593 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=46fcaf3361b56306c288f2ddf4dd8a7dfab7ce2f;p=emacs.git Improve last change * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Use ppss to check escaping and add help-echo. --- 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_\\|\\\\.\\)"