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

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

[debbugs-tracker] bug#31696: closed (27.0.50; dotimes-with-progress-repo


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#31696: closed (27.0.50; dotimes-with-progress-reporter: Polimorphic 2nd argument)
Date: Sun, 17 Jun 2018 09:38:01 +0000

Your message dated Sun, 17 Jun 2018 18:36:56 +0900
with message-id <address@hidden>
and subject line Re: bug#31696: 27.0.50; dotimes-with-progress-reporter: 
Polimorphic 2nd argument
has caused the debbugs.gnu.org bug report #31696,
regarding 27.0.50; dotimes-with-progress-reporter: Polimorphic 2nd argument
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
31696: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=31696
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: 27.0.50; dotimes-with-progress-reporter: Polimorphic 2nd argument Date: Sun, 03 Jun 2018 22:15:56 +0900
Severity: Wishlist
X-Debbugs-Cc: Stefan Monnier <address@hidden>

The second arg might be a string or a progress reporter object; the
latter is useful if the programmer wish to specify the optional
parameters of the reporter.

--8<-----------------------------cut here---------------start------------->8---
commit d4d07b0d9a444cc925d0c1c6fbcc155f9709fbe9
Author: Tino Calancha <address@hidden>
Date:   Sun Jun 3 22:06:01 2018 +0900

    dotimes-with-progress-reporter: Polimorphic 2nd argument
    
    * lisp/subr.el (dotimes-with-progress-reporter): Allow 2nd arg to be
    a string or a progress reporter (Bug#31696).
    * doc/lispref/display.texi (node Progress): Update manual.

diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index ce7ec3ac10..8591fa8cef 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -469,7 +469,7 @@ Progress
 Secondly, @samp{done} is more explicit.
 @end defun
 
address@hidden dotimes-with-progress-reporter (var count [result]) message 
address@hidden
address@hidden dotimes-with-progress-reporter (var count [result]) 
reporter-or-message address@hidden
 This is a convenience macro that works the same way as @code{dotimes}
 does, but also reports loop progress using the functions described
 above.  It allows you to save some typing.
@@ -483,6 +483,18 @@ Progress
     "Collecting some mana for Emacs..."
   (sit-for 0.01))
 @end example
+
+
+The second argument @code{reporter-or-message} might be a progress
+reporter object.  This is useful if you want to specify the optional
+arguments in @code{make-progress-reporter}.
+For instance, you can write previous example as follows:
address@hidden
+(dotimes-with-progress-reporter
+    (k 500)
+    (make-progress-reporter "Collecting some mana for Emacs..." 0 500 0 1 1.5)
+  (sit-for 0.01))
address@hidden example
 @end defmac
 
 @node Logging Messages
diff --git a/lisp/subr.el b/lisp/subr.el
index 914112ccef..a1b2556239 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -5013,32 +5013,32 @@ progress-reporter-done
   "Print reporter's message followed by word \"done\" in echo area."
   (message "%sdone" (aref (cdr reporter) 3)))
 
-(defmacro dotimes-with-progress-reporter (spec message &rest body)
+(defmacro dotimes-with-progress-reporter (spec reporter-or-message &rest body)
   "Loop a certain number of times and report progress in the echo area.
 Evaluate BODY with VAR bound to successive integers running from
 0, inclusive, to COUNT, exclusive.  Then evaluate RESULT to get
 the return value (nil if RESULT is omitted).
 
-At each iteration MESSAGE followed by progress percentage is
-printed in the echo area.  After the loop is finished, MESSAGE
-followed by word \"done\" is printed.  This macro is a
-convenience wrapper around `make-progress-reporter' and friends.
+REPORTER-OR-MESSAGE is a progress reporter object or a string.  In the latter
+case, use this string to create a progress reporter.
+
+At each iteration, print the reporter message followed by progress
+percentage in the echo area.  After the loop is finished,
+print the reporter message followed by word \"done\".
+
+This macro is a convenience wrapper around `make-progress-reporter' and 
friends.
 
 \(fn (VAR COUNT [RESULT]) MESSAGE BODY...)"
   (declare (indent 2) (debug ((symbolp form &optional form) form body)))
-  (let ((temp (make-symbol "--dotimes-temp--"))
-       (temp2 (make-symbol "--dotimes-temp2--"))
-       (start 0)
-       (end (nth 1 spec)))
-    `(let ((,temp ,end)
-          (,(car spec) ,start)
-          (,temp2 (make-progress-reporter ,message ,start ,end)))
-       (while (< ,(car spec) ,temp)
-        ,@body
-        (progress-reporter-update ,temp2
-                                  (setq ,(car spec) (1+ ,(car spec)))))
-       (progress-reporter-done ,temp2)
-       nil ,@(cdr (cdr spec)))))
+  (let ((prep (make-symbol "--dotimes-prep--")))
+    `(let ((,prep ,reporter-or-message))
+       (when (stringp ,prep)
+         (setq ,prep (make-progress-reporter ,prep 0 ,(cadr spec))))
+       (dotimes ,spec
+         ,@body
+         (progress-reporter-update ,prep (1+ ,(car spec))))
+       (progress-reporter-done ,prep)
+       (or ,@(cdr (cdr spec)) nil))))
 
 
 ;;;; Comparing version strings.

--8<-----------------------------cut here---------------end--------------->8---

In GNU Emacs 27.0.50 (build 78, x86_64-pc-linux-gnu, GTK+ Version 3.22.11)
 of 2018-06-03 built on calancha-pc
Repository revision: e75c57f10ee9418599398361b0676f48d265fb12



--- End Message ---
--- Begin Message --- Subject: Re: bug#31696: 27.0.50; dotimes-with-progress-reporter: Polimorphic 2nd argument Date: Sun, 17 Jun 2018 18:36:56 +0900 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)
Tino Calancha <address@hidden> writes:

> On Sun, 3 Jun 2018, Noam Postavsky wrote:
>
>> Tino Calancha <address@hidden> writes:
>>
>>> +(defmacro dotimes-with-progress-reporter (spec reporter-or-message &rest 
>>> body)
>>
>>> +  (let ((prep (make-symbol "--dotimes-prep--"))
>>> +        ((end (make-symbol "--dotimes-end--"))))
>>> +    `(let ((,prep ,reporter-or-message)
>>> +           (,end ,(cadr spec)))
>>> +       (when (stringp ,prep)
>>> +         (setq ,prep (make-progress-reporter ,prep 0 ,end)))
>>> +       (dotimes ,spec
>>
>> That's still going to evaluate (cadr spec) twice.  You need to change
>> the spec passed to `dotimes' so that it also uses `end'.
> I did it in Bug#31697 but forgot here :-|
> Thank you very much for let me know!
Implemented in master branch as commit
'dotimes-with-progress-reporter: Polymorphic 2nd argument'
(5099b3abb2b623ce949b8efc37bee8c41d5ad754)


--- End Message ---

reply via email to

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