emacs-devel
[Top][All Lists]
Advanced

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

Re: texinfo-show-structure and occur


From: Juri Linkov
Subject: Re: texinfo-show-structure and occur
Date: Mon, 15 Mar 2010 23:51:45 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (x86_64-pc-linux-gnu)

> `occur' already displays this information in the first line of the output
> buffer.  I think we don't need to duplicate this information in the echo area
> that should be as concise as possible, like:
>
>   Searched 1 buffer; found 573 matches

This patch ensures that the length of the message in the echo area
never gets more than the width of the window:

=== modified file 'lisp/replace.el'
--- lisp/replace.el     2010-01-13 08:35:10 +0000
+++ lisp/replace.el     2010-03-15 21:49:59 +0000
@@ -1162,12 +1162,13 @@ (defun occur-1 (regexp nlines bufs &opti
                      (not (eq occur-excluded-properties t)))))
          (let* ((bufcount (length active-bufs))
                 (diff (- (length bufs) bufcount)))
-           (message "Searched %d buffer%s%s; %s match%s for `%s'"
+           (message "Searched %d buffer%s%s; %s match%s%s"
                     bufcount (if (= bufcount 1) "" "s")
                     (if (zerop diff) "" (format " (%d killed)" diff))
                     (if (zerop count) "no" (format "%d" count))
                     (if (= count 1) "" "es")
-                    regexp))
+                    (if (> (length regexp) (- (window-width) 42))
+                        "" (format " for `%s'" regexp))))
          (setq occur-revert-arguments (list regexp nlines bufs))
           (if (= count 0)
               (kill-buffer occur-buf)

There is also a related problem with multi-occur.  In the output it duplicates
the regexp for every found buffer.  For instance, see how the string
`for "chapter"' is repeated:

2 matches for "chapter" in buffer: commands.texi
      6:@chapter Characters, Keys and Commands
      8:  This chapter explains the character sets used by Emacs for input
1 match for "chapter" in buffer: cmdargs.texi
     31:in batch mode.  The sections of this chapter describe the available

and there is no information about the total number of the found matches.

The following patch adds a line with total number of matches and the regexp,
and removes duplicate regexp output for multi-occur, so the above example
becomes:

3 matches for "chapter":
2 matches in buffer: commands.texi
      6:@chapter Characters, Keys and Commands
      8:  This chapter explains the character sets used by Emacs for input
1 match in buffer: cmdargs.texi
     31:in batch mode.  The sections of this chapter describe the available

=== modified file 'lisp/replace.el'
--- lisp/replace.el     2010-01-13 08:35:10 +0000
+++ lisp/replace.el     2010-03-15 21:47:14 +0000
@@ -1294,9 +1295,11 @@ (defun occur-engine (regexp buffers out-
                (goto-char headerpt)
                (let ((beg (point))
                      end)
-                 (insert (format "%d match%s for \"%s\" in buffer: %s\n"
+                 (insert (format "%d match%s%s in buffer: %s\n"
                                  matches (if (= matches 1) "" "es")
-                                 regexp (buffer-name buf)))
+                                 (if (> (length buffers) 1)
+                                     "" (format " for \"%s\"" regexp))
+                                 (buffer-name buf)))
                  (setq end (point))
                  (add-text-properties beg end
                                       (append
@@ -1304,6 +1307,17 @@ (defun occur-engine (regexp buffers out-
                                          `(font-lock-face ,title-face))
                                        `(occur-title ,buf))))
                (goto-char (point-min)))))))
+      (when (and (not (zerop globalcount)) (> (length buffers) 1))
+       (goto-char (point-min))
+       (let ((beg (point))
+             end)
+         (insert (format "%d match%s for \"%s\":\n"
+                         globalcount (if (= globalcount 1) "" "es")
+                         regexp))
+         (setq end (point))
+         (add-text-properties beg end (when title-face
+                                        `(font-lock-face ,title-face))))
+       (goto-char (point-min)))
       (if coding
          ;; CODING is buffer-file-coding-system of the first buffer
          ;; that locally binds it.  Let's use it also for the output

-- 
Juri Linkov
http://www.jurta.org/emacs/




reply via email to

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