From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#9130: 23.3; Lisp mode doc string enhancment Date: Tue, 02 Aug 2011 16:01:54 -0400 Message-ID: References: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1312315363 413 80.91.229.12 (2 Aug 2011 20:02:43 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 2 Aug 2011 20:02:43 +0000 (UTC) Cc: 9130@debbugs.gnu.org To: Robert Brown Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Aug 02 22:02:39 2011 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1QoLAk-0007jJ-PT for geb-bug-gnu-emacs@m.gmane.org; Tue, 02 Aug 2011 22:02:39 +0200 Original-Received: from localhost ([::1]:57539 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QoLAk-0007dd-9T for geb-bug-gnu-emacs@m.gmane.org; Tue, 02 Aug 2011 16:02:38 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:33477) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QoLAg-0007d2-Ht for bug-gnu-emacs@gnu.org; Tue, 02 Aug 2011 16:02:35 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QoLAe-00022u-Qy for bug-gnu-emacs@gnu.org; Tue, 02 Aug 2011 16:02:34 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:50465) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QoLAe-00022o-Nt for bug-gnu-emacs@gnu.org; Tue, 02 Aug 2011 16:02:32 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1QoLB7-0002cL-Hx; Tue, 02 Aug 2011 16:03:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 02 Aug 2011 20:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9130 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 9130-submit@debbugs.gnu.org id=B9130.131231535110011 (code B ref 9130); Tue, 02 Aug 2011 20:03:01 +0000 Original-Received: (at 9130) by debbugs.gnu.org; 2 Aug 2011 20:02:31 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1QoLAa-0002bN-GD for submit@debbugs.gnu.org; Tue, 02 Aug 2011 16:02:29 -0400 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.181] helo=ironport2-out.pppoe.ca) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1QoLAX-0002bC-Ck; Tue, 02 Aug 2011 16:02:26 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAGFXOE5FxKfe/2dsb2JhbABCp2d4gUABAQQBVhMBDwULCzAEEhQYDSSHfwS/coNEgn4En0qEMQ X-IronPort-AV: E=Sophos;i="4.67,307,1309752000"; d="scan'208";a="128460175" Original-Received: from 69-196-167-222.dsl.teksavvy.com (HELO ceviche.home) ([69.196.167.222]) by ironport2-out.pppoe.ca with ESMTP/TLS/ADH-AES256-SHA; 02 Aug 2011 16:01:54 -0400 Original-Received: by ceviche.home (Postfix, from userid 20848) id 67268660CF; Tue, 2 Aug 2011 16:01:54 -0400 (EDT) In-Reply-To: (Robert Brown's message of "Wed, 20 Jul 2011 12:50:41 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Tue, 02 Aug 2011 16:03:01 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 1) X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:49834 Archived-At: severity 9130 wishlist tags 9130 patch thanks > Here is a change that enhances Lisp mode fontification to handle > documentation of the form > (:documentation "the doc string") Thanks. That looks like a useful addition. Could you try and make it an actual patch (as output by `diff' and friends), also could you also make sure your code uses a proper prefix ("lisp-") for all the functions it defines, and finally could you make sure it's only enabled when it's useful (I don't think we support such :documentation thingies in Elisp (tho maybe EIEIO does) so it should only be enabled in lisp-mode but not in emacs-lisp-mode). There's time for that: we're in feature freeze for Emacs-24.1, so we won't install such a change before early next year. Stefan > These kinds of documentation forms are used in Common Lisp code for CLOS > class and slot documentation. > To apply the patch, replace lisp-font-lock-syntactic-face-function in > share/emacs/23.3/lisp/emacs-lisp/lisp-mode.el with the three functions > below: > (defun string-in-doc-position-p (state) > (let* ((listbeg (nth 1 state)) > (firstsym (and listbeg > (save-excursion > (goto-char listbeg) > (and (looking-at "([ \t\n]*\\(\\(\\sw\\|\\s_\\)+\\)") > (match-string 1))))) > (docelt (and firstsym (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) (nth 8 state))))))) > (defun string-after-documentation-keyword-p (state) > (and (nth 1 state) ; we are inside a Lisp form > (let ((startpos (nth 8 state))) > (and startpos > (let ((ok nil) > (prevsym (save-excursion > (goto-char startpos) > (condition-case nil > (progn (backward-sexp 1) (setf ok t)) > (error nil)) > (and ok > (looking-at "\\(\\sw+\\)") > (match-string 1))))) > (equal prevsym ":documentation")))))) > (defun lisp-font-lock-syntactic-face-function (state) > (if (nth 3 state) > ;; This might be a (doc)string or a |...| symbol. > (let ((startpos (nth 8 state))) > (if (eq (char-after startpos) ?|) > ;; This is not a string, but a |...| symbol. > nil > (if (or (string-in-doc-position-p state) > (string-after-documentation-keyword-p state)) > font-lock-doc-face > font-lock-string-face))) > font-lock-comment-face)) > In GNU Emacs 23.3.1 (x86_64-unknown-linux-gnu) > of 2011-07-15 on paradicsom.nyc.corp.google.com > configured using `configure '--prefix' '/local/software/package/emacs-23.3.1' '--without-x'' > Important settings: > value of $LC_ALL: nil > value of $LC_COLLATE: C > value of $LC_CTYPE: nil > value of $LC_MESSAGES: nil > value of $LC_MONETARY: C > value of $LC_NUMERIC: C > value of $LC_TIME: C > value of $LANG: en_US.UTF-8 > value of $XMODIFIERS: nil > locale-coding-system: utf-8-unix > default enable-multibyte-characters: t > Major mode: Emacs-Lisp > Minor modes in effect: > file-name-shadow-mode: t > global-font-lock-mode: t > font-lock-mode: t > auto-encryption-mode: t > auto-compression-mode: t > line-number-mode: t > Recent input: > ESC [ > 1 ; 2 3 0 5 ; 0 c C-x C-f . e m a c s RET C-v > C-v C-v C-v C-v C-v C-v C-v C-v C-v C-v C-v ESC v ESC > v ESC v ESC v ESC v ESC v C-v C-v C-v C-v C-a C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-l C-v C-v C-v ESC v ESC v ESC v ESC v ESC v ESC v > ESC v ESC v ESC v ESC v ESC v ESC v ESC v ESC v ESC > v ESC v ESC v C-v C-l C-u C-u C-n C-n C-n DEL C-x SPC > SPC C-a C-x C-s C-v C-x C-s C-v C-v C-v C-v ESC v C-v > C-n C-n C-n C-n C-n C-n C-n C-n C-l C-u C-p C-p C-p > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n > C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-n C-l ESC > x r e p o r t - e m a c s - b u g RET > Recent messages: > ("emacs") > Loading /local/software/source-trees/emacs-jabber/jabber-autoloads.el (source)...done > call-interactively: Beginning of buffer [3 times] > Saving file /home/brown/.emacs... > Wrote /home/brown/.emacs > (No changes need to be saved) > Load-path shadows: > /local/software/source-trees/cc-mode/cc-fonts hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-fonts > /local/software/source-trees/cc-mode/cc-align hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-align > /local/software/source-trees/cc-mode/cc-menus hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-menus > /local/software/source-trees/cc-mode/cc-engine hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-engine > /local/software/source-trees/cc-mode/cc-mode hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-mode > /local/software/source-trees/cc-mode/cc-awk hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-awk > /local/software/source-trees/cc-mode/cc-defs hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-defs > /local/software/source-trees/cc-mode/cc-vars hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-vars > /local/software/source-trees/cc-mode/cc-styles hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-styles > /local/software/source-trees/cc-mode/cc-bytecomp hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-bytecomp > /local/software/source-trees/cc-mode/cc-compat hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-compat > /local/software/source-trees/cc-mode/cc-cmds hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-cmds > /local/software/source-trees/cc-mode/cc-langs hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/progmodes/cc-langs > /local/software/package/org-5.13e/org-publish hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/org/org-publish > /local/software/package/org-5.13e/org hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/org/org > /local/software/package/org-5.13e/org-install hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/org/org-install > /local/software/package/org-5.13e/org-mouse hides /local/software/package/emacs-23.3.1/share/emacs/23.3/lisp/org/org-mouse > Features: > (shadow sort mail-extr message ecomplete rfc822 mml easymenu mml-sec > password-cache mm-decode mm-bodies mm-encode mailcap mail-parse rfc2231 > rfc2047 rfc2045 qp ietf-drums mailabbrev nnheader gnus-util netrc > time-date mm-util mail-prsvr gmm-utils wid-edit mailheader canlock sha1 > hex-util hashcash mail-utils warnings emacsbug uniquify advice help-fns > advice-preload slime-autoloads regexp-opt cl cl-19 ediff-hook vc-hooks > lisp-float-type lisp-mode register page menu-bar rfn-eshadow timer > jit-lock font-lock syntax facemenu font-core frame cham georgian > utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean > japanese hebrew greek romanian slovak czech european ethiopic indian > cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev > loaddefs button minibuffer faces cus-face files text-properties overlay > md5 base64 format env code-pages mule custom widget > hashtable-print-readable backquote make-network-process multi-tty emacs)