GNU bug report logs - #15848
24.3.50; cperl-mode + which-function: Improve reporting (corner case)

Previous Next

Package: emacs;

Reported by: Jambunathan K <kjambunathan <at> gmail.com>

Date: Sun, 10 Nov 2013 06:59:02 UTC

Severity: minor

Found in version 24.3.50

Done: Jambunathan K <kjambunathan <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


Message #71 received at 15848 <at> debbugs.gnu.org (full text, mbox):

From: Nathan Trapuzzano <nbtrap <at> nbtrap.com>
To: Jambunathan K <kjambunathan <at> gmail.com>
Cc: 15848 <at> debbugs.gnu.org
Subject: Re: bug#15848: 24.3.50;
 cperl-mode + which-function: Improve reporting (corner case)
Date: Tue, 12 Nov 2013 09:11:02 -0500
[Message part 1 (text/plain, inline)]
Jambunathan K <kjambunathan <at> gmail.com> writes:

Try this patch.  It includes the patch for the variable I added earlier.

Also, don't try to apply this on top of the patch I sent for the outline
problem.  You'll get conflicts.  I'll wait till that patch gets
installed and then resolve the conflicts with this patch and send an
updated one.

[cperl-mode-imenu-patch.patch (text/x-diff, inline)]
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: nbtrap <at> nbtrap.com-20131112140320-if3f086us590vp5c
# target_branch: file:///home/nathan/opt/etc/bzr-repos/emacs/trunk/
# testament_sha1: 6e81494670e3d66dc1c7cb0abd95be7a9831a403
# timestamp: 2013-11-12 09:05:04 -0500
# base_revision_id: jan.h.d <at> swipnet.se-20131110121803-bv908hul7t8ji6c8
# 
# Begin patch
=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog	2013-11-10 08:35:04 +0000
+++ lisp/ChangeLog	2013-11-12 14:03:20 +0000
@@ -1,3 +1,17 @@
+2013-11-12  Nathan Trapuzzano  <nbtrap <at> nbtrap.com>
+
+	* progmodes/cperl-mode.el (cperl-imenu--function-name-regexp-perl)
+	(cperl-outline-level, cperl-imeny--create-perl-index): Index imenu
+	definitions with the positions at which they begin instead of
+	their end positions.  (Bug#15848)
+
+2013-11-10  Nathan Trapuzzano  <nbtrap <at> nbtrap.com>
+
+	* progmodes/cperl-mode.el (cperl-imenu-index-pod)
+	(cperl-imenu--create-perl-index): Define and implement
+	`cperl-imenu-index-pod' to optionally disable cperl's indexing of
+	POD directives for imenu.  (Bug#15848)
+
 2013-11-10  Michael Albinus  <michael.albinus <at> gmx.de>
 
 	* net/tramp.el (tramp-methods):

=== modified file 'lisp/progmodes/cperl-mode.el'
--- lisp/progmodes/cperl-mode.el	2013-11-04 03:44:23 +0000
+++ lisp/progmodes/cperl-mode.el	2013-11-12 13:26:52 +0000
@@ -511,6 +511,13 @@
   :type 'boolean
   :group 'cperl-help-system)
 
+(defcustom cperl-imenu-index-pod t
+  "*Whether POD `=head' directives should be indexed by imenu.
+Non-nil means `which-function-mode' won't count POD directives as
+top-level definitions."
+  :type 'boolean
+  :group 'cperl-help-system)
+
 (defcustom cperl-max-help-size 66
   "*Non-nil means shrink-wrapping of info-buffer allowed up to these percents."
   :type '(choice integer (const nil))
@@ -844,7 +851,8 @@
                 interactive sweep over the buffer);
         d) Has support for imenu, including:
                 1) Separate unordered list of \"interesting places\";
-                2) Separate TOC of POD sections;
+                2) Separate TOC of POD sections by default
+                   (cf. `cperl-imenu-index-pod');
                 3) Separate list of packages;
                 4) Hierarchical view of methods in (sub)packages;
                 5) and functions (by the full name - with package);
@@ -1439,7 +1447,7 @@
 
 ;;; Details of groups in this are used in `cperl-imenu--create-perl-index'
 ;;;  and `cperl-outline-level'.
-;;;; Was: 2=sub|package; now 2=package-group, 5=package-name 8=sub-name (+3)
+;;;; Was: 2=sub|package; now 2=package-group, 5=package-name 9=sub-name (+4)
 (defvar cperl-imenu--function-name-regexp-perl
   (concat
    "^\\("				; 1 = all
@@ -1448,12 +1456,13 @@
 	    cperl-white-and-comment-rex ; 4 = pre-package-name
 	       "\\([a-zA-Z_0-9:']+\\)\\)?\\)" ; 5 = package-name
        "\\|"
-          "[ \t]*sub"
-	  (cperl-after-sub-regexp 'named nil) ; 8=name 11=proto 14=attr-start
-	  cperl-maybe-white-and-comment-rex	; 15=pre-block
+          "\\([ \t]*sub"
+	  (cperl-after-sub-regexp 'named nil) ; 9=name 12=proto 15=attr-start
+	  cperl-maybe-white-and-comment-rex	; 16=pre-block
+          "\\)"
    "\\|"
-     "=head\\([1-4]\\)[ \t]+"		; 16=level
-     "\\([^\n]+\\)$"			; 17=text
+     "=head\\([1-4]\\)[ \t]+"		; 17=level
+     "\\([^\n]+\\)$"			; 18=text
    "\\)"))
 
 (defvar cperl-outline-regexp
@@ -5486,17 +5495,16 @@
       (while (re-search-forward
 	      (or regexp cperl-imenu--function-name-regexp-perl)
 	      nil t)
-	;; 2=package-group, 5=package-name 8=sub-name
+	;; 2=package-group, 5=package-name 9=sub-name
 	(cond
 	 ((and				; Skip some noise if building tags
 	   (match-beginning 5)		; package name
 	   ;;(eq (char-after (match-beginning 2)) ?p) ; package
-	   (not (save-match-data
-		  (looking-at "[ \t\n]*;")))) ; Plain text word 'package'
+	   (not (looking-at-p "[ \t\n]*;"))) ; Plain text word 'package'
 	  nil)
 	 ((and
 	   (or (match-beginning 2)
-	       (match-beginning 8))		; package or sub
+	       (match-beginning 9))		; package or sub
 	   ;; Skip if quoted (will not skip multi-line ''-strings :-():
 	   (null (get-text-property (match-beginning 1) 'syntax-table))
 	   (null (get-text-property (match-beginning 1) 'syntax-type))
@@ -5535,10 +5543,13 @@
 	  (if (and is-proto (not is-pack)) nil
 	    (or is-pack
 		(setq name
-		      (buffer-substring (match-beginning 8) (match-end 8)))
+		      (buffer-substring (match-beginning 9) (match-end 9)))
 		(set-text-properties 0 (length name) nil name))
 	    (setq marker (make-marker))
-	    (set-marker marker (match-end (if is-pack 2 8)))
+	    (set-marker marker (save-excursion
+                                 (goto-char (match-beginning (if is-pack 2 6)))
+                                 (skip-chars-forward " \t")
+                                 (point)))
 	    (cond (is-pack nil)
 		  ((string-match "[:']" name)
 		   (setq meth t))
@@ -5551,13 +5562,13 @@
 	      (push index index-alist))
 	    (if meth (push index index-meth-alist))
 	    (push index index-unsorted-alist)))
-	 ((match-beginning 16)		; POD section
-	  (setq name (buffer-substring (match-beginning 17) (match-end 17))
+	 ((and cperl-imenu-index-pod (match-beginning 17))	; POD section
+	  (setq name (buffer-substring (match-beginning 18) (match-end 18))
 		marker (make-marker))
-	  (set-marker marker (match-beginning 17))
+	  (set-marker marker (- (match-beginning 17) 5))
 	  (set-text-properties 0 (length name) nil name)
 	  (setq name (concat (make-string
-			      (* 3 (- (char-after (match-beginning 16)) ?1))
+			      (* 3 (- (char-after (match-beginning 17)) ?1))
 			      ?\ )
 			     name)
 		index (cons name marker))
@@ -5624,11 +5635,11 @@
 (defun cperl-outline-level ()
   (looking-at outline-regexp)
   (cond ((not (match-beginning 1)) 0)	; beginning-of-file
-;;;; 2=package-group, 5=package-name 8=sub-name 16=head-level
+;;;; 2=package-group, 5=package-name 9=sub-name 17=head-level
 	((match-beginning 2) 0)		; package
-	((match-beginning 8) 1)		; sub
-	((match-beginning 16)
-	 (- (char-after (match-beginning 16)) ?0)) ; headN ==> N
+	((match-beginning 9) 1)		; sub
+	((match-beginning 17)
+	 (- (char-after (match-beginning 17)) ?0)) ; headN ==> N
 	(t 5)))				; should not happen
 
 

# Begin bundle
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
FbZA

This bug report was last modified 11 years and 250 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.