* etc/NEWS: New Tramp method "nc".

* lisp/emacs-lisp/lisp-mode.el (lisp-string-after-doc-keyword-p): New fun.
(lisp-string-in-doc-position-p): New function, extracted from
lisp-font-lock-syntactic-face-function.
(lisp-font-lock-syntactic-face-function): Use them.

Fixes: debbugs:9130
This commit is contained in:
Robert Brown (tiny change) 2014-06-19 10:03:45 -04:00 committed by Stefan Monnier
parent 483d1ab6c8
commit 96db005527
3 changed files with 48 additions and 26 deletions

View file

@ -72,6 +72,9 @@ performance improvements when pasting large amounts of text.
* Changes in Specialized Modes and Packages in Emacs 24.5 * Changes in Specialized Modes and Packages in Emacs 24.5
** Lisp mode
*** Strings after `:documentation' are highlighted as docstrings.
** Rectangle editing ** Rectangle editing
*** Rectangle Mark mode can have corners past EOL or in the middle of a TAB. *** Rectangle Mark mode can have corners past EOL or in the middle of a TAB.
*** C-x C-x in rectangle-mark-mode now cycles through the four corners. *** C-x C-x in rectangle-mark-mode now cycles through the four corners.

View file

@ -1,3 +1,10 @@
2014-06-19 Robert Brown <robert.brown@gmail.com> (tiny change)
* emacs-lisp/lisp-mode.el (lisp-string-after-doc-keyword-p): New fun.
(lisp-string-in-doc-position-p): New function, extracted from
lisp-font-lock-syntactic-face-function.
(lisp-font-lock-syntactic-face-function): Use them (bug#9130).
2014-06-19 Grégoire Jadi <daimrod@gmail.com> 2014-06-19 Grégoire Jadi <daimrod@gmail.com>
* net/rcirc.el (rcirc-omit-mode): Fix recenter error. (Bug#17769) * net/rcirc.el (rcirc-omit-mode): Fix recenter error. (Bug#17769)

View file

@ -413,6 +413,41 @@ It has `lisp-mode-abbrev-table' as its parent."
(defvar lisp-cl-font-lock-keywords lisp-cl-font-lock-keywords-1 (defvar lisp-cl-font-lock-keywords lisp-cl-font-lock-keywords-1
"Default expressions to highlight in Lisp modes.") "Default expressions to highlight in Lisp modes.")
(defun lisp-string-in-doc-position-p (listbeg startpos)
(let* ((firstsym (and listbeg
(save-excursion
(goto-char listbeg)
(and (looking-at "([ \t\n]*\\(\\(\\sw\\|\\s_\\)+\\)")
(match-string 1)))))
(docelt (and firstsym
(function-get (intern-soft firstsym)
lisp-doc-string-elt-property))))
(and docelt
;; It's a string in a form that can have a docstring.
;; Check whether it's in docstring position.
(save-excursion
(when (functionp docelt)
(goto-char (match-end 1))
(setq docelt (funcall docelt)))
(goto-char listbeg)
(forward-char 1)
(condition-case nil
(while (and (> docelt 0) (< (point) startpos)
(progn (forward-sexp 1) t))
(setq docelt (1- docelt)))
(error nil))
(and (zerop docelt) (<= (point) startpos)
(progn (forward-comment (point-max)) t)
(= (point) startpos))))))
(defun lisp-string-after-doc-keyword-p (listbeg startpos)
(and listbeg ; We are inside a Lisp form.
(save-excursion
(goto-char startpos)
(ignore-errors
(progn (backward-sexp 1)
(looking-at ":documentation\\_>"))))))
(defun lisp-font-lock-syntactic-face-function (state) (defun lisp-font-lock-syntactic-face-function (state)
(if (nth 3 state) (if (nth 3 state)
;; This might be a (doc)string or a |...| symbol. ;; This might be a (doc)string or a |...| symbol.
@ -420,32 +455,9 @@ It has `lisp-mode-abbrev-table' as its parent."
(if (eq (char-after startpos) ?|) (if (eq (char-after startpos) ?|)
;; This is not a string, but a |...| symbol. ;; This is not a string, but a |...| symbol.
nil nil
(let* ((listbeg (nth 1 state)) (let ((listbeg (nth 1 state)))
(firstsym (and listbeg (if (or (lisp-string-in-doc-position-p listbeg startpos)
(save-excursion (lisp-string-after-doc-keyword-p listbeg startpos))
(goto-char listbeg)
(and (looking-at "([ \t\n]*\\(\\(\\sw\\|\\s_\\)+\\)")
(match-string 1)))))
(docelt (and firstsym
(function-get (intern-soft firstsym)
lisp-doc-string-elt-property))))
(if (and docelt
;; It's a string in a form that can have a docstring.
;; Check whether it's in docstring position.
(save-excursion
(when (functionp docelt)
(goto-char (match-end 1))
(setq docelt (funcall docelt)))
(goto-char listbeg)
(forward-char 1)
(condition-case nil
(while (and (> docelt 0) (< (point) startpos)
(progn (forward-sexp 1) t))
(setq docelt (1- docelt)))
(error nil))
(and (zerop docelt) (<= (point) startpos)
(progn (forward-comment (point-max)) t)
(= (point) (nth 8 state)))))
font-lock-doc-face font-lock-doc-face
font-lock-string-face)))) font-lock-string-face))))
font-lock-comment-face)) font-lock-comment-face))