From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: dino chiesa Newsgroups: gmane.emacs.bugs Subject: bug#8724: 23.2; js-mode imenu should be more thorough Date: Tue, 24 May 2011 05:51:36 -0700 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="_a96799d3-bcd9-40d4-83aa-39cac8955e13_" X-Trace: dough.gmane.org 1306242974 30389 80.91.229.12 (24 May 2011 13:16:14 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 24 May 2011 13:16:14 +0000 (UTC) To: 8724@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue May 24 15:16:10 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 1QOrSz-0000DY-Di for geb-bug-gnu-emacs@m.gmane.org; Tue, 24 May 2011 15:16:09 +0200 Original-Received: from localhost ([::1]:38306 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOrSy-0006lW-SX for geb-bug-gnu-emacs@m.gmane.org; Tue, 24 May 2011 09:16:08 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:47620) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOrSu-0006lC-IW for bug-gnu-emacs@gnu.org; Tue, 24 May 2011 09:16:06 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QOrSs-0004Ak-T9 for bug-gnu-emacs@gnu.org; Tue, 24 May 2011 09:16:04 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:33823) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOrSs-0004Ag-Pp for bug-gnu-emacs@gnu.org; Tue, 24 May 2011 09:16:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1QOrSs-0002z9-Hm; Tue, 24 May 2011 09:16:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: dino chiesa Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 24 May 2011 13:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 8724 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: Original-Received: via spool by submit@debbugs.gnu.org id=B.130624295011453 (code B ref -1); Tue, 24 May 2011 13:16:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 24 May 2011 13:15:50 +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 1QOrSf-0002yf-7G for submit@debbugs.gnu.org; Tue, 24 May 2011 09:15:50 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1QOrSb-0002yT-Vf for submit@debbugs.gnu.org; Tue, 24 May 2011 09:15:47 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QOrSV-000410-CO for submit@debbugs.gnu.org; Tue, 24 May 2011 09:15:40 -0400 Original-Received: from lists.gnu.org ([140.186.70.17]:40510) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOrSV-00040w-AL for submit@debbugs.gnu.org; Tue, 24 May 2011 09:15:39 -0400 Original-Received: from eggs.gnu.org ([140.186.70.92]:47549) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOrST-0006gA-Ke for bug-gnu-emacs@gnu.org; Tue, 24 May 2011 09:15:39 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QOrSS-00040b-4G for bug-gnu-emacs@gnu.org; Tue, 24 May 2011 09:15:37 -0400 Original-Received: from blu0-omc1-s14.blu0.hotmail.com ([65.55.116.25]:52904) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QOrSR-00040X-W6 for bug-gnu-emacs@gnu.org; Tue, 24 May 2011 09:15:36 -0400 Original-Received: from BLU159-W1 ([65.55.116.9]) by blu0-omc1-s14.blu0.hotmail.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 24 May 2011 05:51:36 -0700 X-Originating-IP: [71.60.182.236] Importance: Normal X-OriginalArrivalTime: 24 May 2011 12:51:36.0583 (UTC) FILETIME=[5130F170:01CC1A11] X-detected-operating-system: by eggs.gnu.org: Windows 2000 SP4, XP SP1+ X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Tue, 24 May 2011 09:16:02 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) 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:46679 Archived-At: --_a96799d3-bcd9-40d4-83aa-39cac8955e13_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Module /emacs/lisp/progmodes/js.el =20 In js-mode=2C editing a short javascript file=2C the imenu indexing works nicely but the actual menu is incomplete=2C truncated. The defun js--pitems-to-imenu seems to make an insufficient effort=2C when nested function definitions are used in the source.=20 =20 For example=2C supposing this js source:=20 =20 jQuery(document).ready(function () { var $th =3D jQuery('thead > tr > th')=3B $th.each(function(column=2C elt) { jQuery(this).addClass('sortable').click(function() { ... })=3B })=3B })=3B =20 (this is fairly typical with javascript) =20 In this case js-mode will index all of the anonymous functions=2C but will= =20 produce an imenu that contains only the outer anonymous function. This is=20 done in js--pitems-to-imenu. Also=2C in the same defun=2C the imenu entry u= ses "Unknown" as the name of the anonymous function. =20 I propose 2 things:=20 - replace the name "unknown" with "Anonymous" - recurse into js--pitems-to-imenu for functions that define=20 child functions.=20 The proposed new code for the defun is:=20 =20 (defun js--pitems-to-imenu (pitems unknown-ctr) "Convert list of pitems PITEMS to imenu format" (let (imenu-items pitem pitem-type pitem-name subitems) (while (setq pitem (pop pitems)) (setq pitem-type (js--pitem-type pitem)) (setq pitem-name (js--pitem-strname pitem)) (when (eq pitem-name t) (setq pitem-name (format "Anonymous %s" (incf (car unknown-ctr))))) (cond ((memq pitem-type '(function macro)) (assert (integerp (js--pitem-h-begin pitem))) =3B=3B DPC check for children (nested fnc defns) (cond ((js--pitem-children pitem) (setq subitems (js--pitems-to-imenu (js--pitem-children pitem) unknown-ctr)) (cond (subitems =3B=3B DPC index "top" and "bottom" of the enclosure (push (cons "(top)" (js--maybe-make-marker (js--pitem-h-begin pitem))) subitems) (let ((b-end (js--pitem-b-end pitem))) (if b-end (setq subitems (append subitems (list (cons "(bottom)" (js--maybe-make-marker b-e= nd))) subitems)))) (push (cons pitem-name subitems) imenu-items)) (t (push (cons pitem-name (js--maybe-make-marker (js--pitem-h-begin pitem))) imenu-items)))) (t (push (cons pitem-name (js--maybe-make-marker (js--pitem-h-begin pitem))) imenu-items)))) ((consp pitem-type) =3B class definition (setq subitems (js--pitems-to-imenu (js--pitem-children pitem) unknown-ctr)) (cond (subitems (push (cons pitem-name subitems) imenu-items)) ((js--pitem-h-begin pitem) (assert (integerp (js--pitem-h-begin pitem))) (setq subitems (list (cons "[empty]" (js--maybe-make-marker (js--pitem-h-begin pitem))))) (push (cons pitem-name subitems) imenu-items)))) (t (error "Unknown item type: %S" pitem-type)))) imenu-items)) =20 =20 In GNU Emacs 23.2.1 (i386-mingw-nt6.1.7601) of 2010-05-08 on G41R2F1 Windowing system distributor `Microsoft Corp.'=2C version 6.1.7601 configured using `configure --with-gcc (3.4) --no-opt --cflags -Ic:/xpm/inc= lude' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: ENU value of $XMODIFIERS: nil locale-coding-system: cp1252 default enable-multibyte-characters: t Major mode: Emacs-Lisp Minor modes in effect: auto-revert-mode: t yas/minor-mode: t global-hl-line-mode: t hl-line-mode: t global-auto-complete-mode: t auto-complete-mode: t tooltip-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Recent messages: Mark saved where search started Mark set No closing parenthesis found Mark set Matches '(... [-73-] Matches (eval-after-load "js" [-74] Mark set [2 times] Saving file c:/Users/Dino/elisp/emacs.el... Wrote c:/Users/Dino/elisp/emacs.el Mark set Load-path shadows: /users/dino/elisp/linum hides c:/emacs/lisp/linum /users/dino/elisp/css-mode hides c:/emacs/lisp/textmodes/css-mode Features: (shadow sort mail-extr message ecomplete rfc822 mml 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 emacsbug help-mode view js find-func dired-aux flymake-for-jslint-for-wsh flymake-cursor flymake autopair espresso bytecomp byte-compile ido json thingatpt etags imenu newcomment cc-mode cc-fonts cc-menus cc-cmds multi-isearch grep compile comint ring time-stamp sgml-mode autorevert server cperl-mode paren mic-paren hideshow easymenu cc-styles cc-align cc-engine cc-vars cc-defs dired regexp-opt defaultcontent yasnippet-bundle dropdown-list yasnippet easy-mmode cl cl-19 tfs skeleton httpget hl-line advice help-fns advice-preload auto-complete-config auto-complete edmacro kmacro popup tooltip ediff-hook vc-hooks lisp-float-type mwheel dos-w32 disp-table ls-lisp w32-win w32-vars tool-bar dnd fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar mldrag mouse 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) = --_a96799d3-bcd9-40d4-83aa-39cac8955e13_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Module /emacs/lisp/progmodes/js.el
 =3B
In js-mode=2C editing a short javascript file=2C the imenu indexing worksnicely but the actual menu is incomplete=2C truncated. The defun
js--p= items-to-imenu seems to make an insufficient effort=2C when
nested funct= ion definitions =3Bare used in the source.
 =3B
For example=2C supposing this js source:
 =3B
 =3B jQuery(document).ready(function () {
 =3B =3B =3B =3B =3B var $th =3D jQuery('thead >=3B t= r >=3B th')=3B
 =3B =3B =3B =3B =3B $th.each(function(column=2C elt) {=
 =3B =3B =3B =3B =3B =3B =3B =3B =3B jQ= uery(this).addClass('sortable').click(function() {
 =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B= ...
 =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B })=3B
 =3B =3B =3B =3B =3B })=3B
 =3B }= )=3B
 =3B
(this is fairly typical with javascript)
 =3B
In this case =3Bjs-mode will index all of the anonymous functions=2C bu= t will
produce an imenu that contains only the outer anonymous function= . This is
done in js--pitems-to-imenu. Also=2C in the same defun=2C the= imenu entry uses
"Unknown" as the name of the anonymous function.
 =3B
I propose 2 things:
 =3B - replace the name "unknown" with "Anonymous"
 =3B - recurse into js--pitems-to-imenu for functions that define
&= nbsp=3B =3B =3B child functions.

The proposed new code for the defun is:
 =3B
 =3B =3B =3B =3B (defun js--pitems-to-imenu (pitems unknown= -ctr)
 =3B =3B =3B =3B =3B =3B "Convert list of = pitems PITEMS to imenu format"
 =3B =3B =3B =3B =3B =3B (let (imenu-items pitem pi= tem-type pitem-name subitems)
 =3B =3B =3B =3B =3B =3B =3B =3B (while (se= tq pitem (pop pitems))
 =3B =3B =3B =3B =3B =3B&= nbsp=3B =3B =3B =3B (setq pitem-type (js--pitem-type pitem)) =3B =3B =3B =3B =3B =3B =3B =3B =3B&n= bsp=3B (setq pitem-name (js--pitem-strname pitem))
 =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B (when (eq pitem= -name t)
 =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B (setq pitem-name (format "Anonymous %s"=
 =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B (incf (car unknown-ctr)))))
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B (cond
 =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B =3B =3B =3B ((memq pitem-type '(function macro))
 = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B (assert (integerp (js--pitem-h-begin pitem)))
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B=3B DPC check for children (nested fnc defns)
&= nbsp=3B =3B =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B =3B =3B (cond
 =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B ((js--pitem-chi= ldren pitem)
 =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B (setq subitems (js--p= items-to-imenu
 =3B =3B =3B =3B =3B =3B =3B&= nbsp=3B =3B =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B (js--pitem-children pitem)
 =3B&= nbsp=3B =3B =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B unknown-ctr))
 =3B =3B =3B =3B =3B =3B&= nbsp=3B =3B =3B =3B =3B =3B =3B =3B (cond
&n= bsp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B (subitems
 =3B =3B&n= bsp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B=3B DPC index "top" and "bottom" of = the enclosure
 =3B =3B =3B =3B =3B =3B =3B&n= bsp=3B =3B =3B =3B =3B =3B =3B =3B =3B (pus= h (cons "(top)"
 =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B (js--maybe-make-marker
 =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B (js--pitem-h-begin pi= tem)))
 =3B =3B =3B =3B =3B =3B =3B =3B&= nbsp=3B =3B =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B =3B =3B =3B =3B subitems)
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B (let ((b-end (js--pit= em-b-end pitem)))
 =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B (if b-end
 =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B (setq subitems
=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B= (append subitems
 =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B (list (cons "(bottom)"
 =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B (js--maybe-make-marker b-e= nd)))
 =3B =3B =3B =3B =3B =3B =3B =3B&n= bsp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B su= bitems))))
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B (push (cons pitem-nam= e subitems)
 =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B imenu-items))
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B (t
 =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B (push (cons pitem-name
 =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B (js--maybe-make= -marker
 =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B (js--pitem-h-begin pitem)))
 =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B imenu-items))))
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B (t
 =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B= (push (cons pitem-name
 =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B (js--maybe-make-marker
 =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B (js--pitem-h-begin pitem)))
 =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B im= enu-items))))
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B ((consp pitem-type) =3B class definition
 =3B =3B&= nbsp=3B =3B =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B (setq subitems (js--pitems-to-imenu
 =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B (js--pitem-children pitem) =3B =3B =3B =3B =3B =3B =3B =3B =3B&n= bsp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B= unknown-ctr))
 =3B =3B =3B =3B =3B =3B =3B&= nbsp=3B =3B =3B =3B =3B (cond (subitems
 =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B (push (cons p= item-name subitems)
 =3B =3B =3B =3B =3B =3B&nbs= p=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B= imenu-items))
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B ((js-= -pitem-h-begin pitem)
 =3B =3B =3B =3B =3B =3B&n= bsp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B (assert (integerp (js--pitem-h-begin pitem))) =3B =3B =3B =3B =3B =3B =3B =3B =3B&= nbsp=3B =3B =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B (setq subitems (list
 =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B (cons "[empty]"
 =3B =3B =3B =3B =3B&nbs= p=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B (js--maybe-ma= ke-marker
 =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B (js--pitem-h-begin pite= m)))))
 =3B =3B =3B =3B =3B =3B =3B =3B&= nbsp=3B =3B =3B =3B =3B =3B =3B =3B =3B&nbs= p=3B =3B (push (cons pitem-name subitems)
 =3B =3B =3B&n= bsp=3B =3B =3B =3B =3B =3B =3B =3B =3B = =3B =3B =3B =3B =3B =3B =3B =3B =3B =3B=  =3B =3B =3B imenu-items))))
 =3B =3B =3B =3B =3B =3B =3B =3B =3B&nb= sp=3B =3B (t (error "Unknown item type: %S" pitem-type))))
 =3B =3B =3B =3B =3B =3B =3B =3B imenu-item= s))
 =3B
 =3B
In GNU Emacs 23.2.1 (i386-mingw-nt6.1.7601)
 =3Bof 2010-05-08 on G41= R2F1
Windowing system distributor `Microsoft Corp.'=2C version 6.1.7601<= BR>configured using `configure --with-gcc (3.4) --no-opt --cflags -Ic:/xpm/= include'
Important settings:
 =3B value of $LC_ALL: nil
 =3B value of = $LC_COLLATE: nil
 =3B value of $LC_CTYPE: nil
 =3B value of $= LC_MESSAGES: nil
 =3B value of $LC_MONETARY: nil
 =3B value o= f $LC_NUMERIC: nil
 =3B value of $LC_TIME: nil
 =3B value of = $LANG: ENU
 =3B value of $XMODIFIERS: nil
 =3B locale-coding-= system: cp1252
 =3B default enable-multibyte-characters: t
Major mode: Emacs-Lisp
Minor modes in effect:
 =3B auto-revert-mode: t
 =3B yas/mino= r-mode: t
 =3B global-hl-line-mode: t
 =3B hl-line-mode: t =3B global-auto-complete-mode: t
 =3B auto-complete-mode: t =3B tooltip-mode: t
 =3B mouse-wheel-mode: t
 =3B menu-= bar-mode: t
 =3B file-name-shadow-mode: t
 =3B global-font-lo= ck-mode: t
 =3B font-lock-mode: t
 =3B blink-cursor-mode: t =3B auto-encryption-mode: t
 =3B auto-compression-mode: t
=  =3B line-number-mode: t
 =3B transient-mark-mode: t

Recent messages:
Mark saved where search started
Mark set
No c= losing parenthesis found
Mark set
Matches =3B =3B '(... [-73-= ]
Matches (eval-after-load "js" [-74]
Mark set [2 times]
Saving fi= le c:/Users/Dino/elisp/emacs.el...
Wrote c:/Users/Dino/elisp/emacs.elMark set
Load-path shadows:
/users/dino/elisp/linum hides c:/emacs/lisp/linum
= /users/dino/elisp/css-mode hides c:/emacs/lisp/textmodes/css-mode
Features:
(shadow sort mail-extr message ecomplete rfc822 mml mml-secpassword-cache mm-decode mm-bodies mm-encode mailcap mail-parse rfc2231rfc2047 rfc2045 qp ietf-drums mailabbrev nnheader gnus-util netrc
time-= date mm-util mail-prsvr gmm-utils wid-edit mailheader canlock sha1
hex-u= til hashcash mail-utils emacsbug help-mode view js find-func
dired-aux f= lymake-for-jslint-for-wsh flymake-cursor flymake autopair
espresso bytec= omp byte-compile ido json thingatpt etags imenu newcomment
cc-mode cc-fo= nts cc-menus cc-cmds multi-isearch grep compile comint ring
time-stamp s= gml-mode autorevert server cperl-mode paren mic-paren
hideshow easymenu = cc-styles cc-align cc-engine cc-vars cc-defs dired
regexp-opt defaultcon= tent yasnippet-bundle dropdown-list yasnippet
easy-mmode cl cl-19 tfs sk= eleton httpget hl-line advice help-fns
advice-preload auto-complete-conf= ig auto-complete edmacro kmacro popup
tooltip ediff-hook vc-hooks lisp-f= loat-type mwheel dos-w32 disp-table
ls-lisp w32-win w32-vars tool-bar dn= d fontset image fringe lisp-mode
register page menu-bar rfn-eshadow time= r select scroll-bar mldrag mouse
jit-lock font-lock syntax facemenu font= -core frame cham georgian
utf-8-lang misc-lang vietnamese tibetan thai t= ai-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-prope= rties overlay
md5 base64 format env code-pages mule custom widget
has= htable-print-readable backquote make-network-process multi-tty emacs)
= --_a96799d3-bcd9-40d4-83aa-39cac8955e13_--