bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#864: 23.0.60; Info-dir-remove-duplicates fails to remove duplicates


From: martin rudalics
Subject: bug#864: 23.0.60; Info-dir-remove-duplicates fails to remove duplicates
Date: Wed, 03 Sep 2008 08:43:34 +0200
User-agent: Thunderbird 2.0.0.16 (Windows/20080708)

> I did bellow patch to fix this. (You know, I am not a good Lisp
> programmer.)
>
> Index: lisp/info.el
> ===================================================================
> RCS file: /sources/emacs/emacs/lisp/info.el,v
> retrieving revision 1.541
> diff -u -d -w -r1.541 info.el
> --- lisp/info.el    30 Aug 2008 20:16:36 -0000    1.541
> +++ lisp/info.el    2 Sep 2008 15:05:54 -0000
> @@ -1222,9 +1222,10 @@
>            ;; Fold case straight away; `member-ignore-case' here wasteful.
>            (let ((x (downcase (match-string 1))))
>            (if (member x seen)
> -              (delete-region (match-beginning 0)
> +              (progn (delete-region (match-beginning 0)
>                       (progn (re-search-forward "^[^ \t]" nil t)
>                          (match-beginning 0)))
> +                   (forward-line 0))
>              (push x seen))))))))))
>
>  ;; Note that on entry to this function the current-buffer must be the

Looks good to me.  However, could you try the attached patch instead
which also does away with the quite obscure "limit" thing.

martin
*** info.el.~1.541.~    2008-08-31 09:48:43.390625000 +0200
--- info.el     2008-09-03 08:33:07.734375000 +0200
***************
*** 1213,1231 ****
              (delete-region (1- (point)) (point))))

          ;; Now remove duplicate entries under the same heading.
!         (let ((seen nil)
!               (limit (point-marker)))
!           (goto-char start)
!           (while (and (> limit (point))
!                       (re-search-forward "^* \\([^:\n]+:\\(:\\|[^.\n]+\\).\\)"
!                                          limit 'move))
!             ;; Fold case straight away; `member-ignore-case' here wasteful.
!             (let ((x (downcase (match-string 1))))
!               (if (member x seen)
!                   (delete-region (match-beginning 0)
!                                  (progn (re-search-forward "^[^ \t]" nil t)
!                                         (match-beginning 0)))
!                 (push x seen))))))))))

  ;; Note that on entry to this function the current-buffer must be the
  ;; *info* buffer; not the info tags buffer.
--- 1213,1232 ----
              (delete-region (1- (point)) (point))))

          ;; Now remove duplicate entries under the same heading.
!         (let (seen)
!           (save-restriction
!             (narrow-to-region start (point))
!             (goto-char (point-min))
!             (while (re-search-forward "^* \\([^:\n]+:\\(:\\|[^.\n]+\\).\\)" 
nil 'move)
!               ;; Fold case straight away; `member-ignore-case' here wasteful.
!               (let ((x (downcase (match-string 1))))
!                 (if (member x seen)
!                     (delete-region
!                      (match-beginning 0)
!                      (if (re-search-forward "^[^ \t]" nil 'move)
!                          (goto-char (match-beginning 0))
!                        (point-max)))
!                   (push x seen)))))))))))

  ;; Note that on entry to this function the current-buffer must be the
  ;; *info* buffer; not the info tags buffer.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]