From: Nick Dokos <ndokos@gmail.com>
To: emacs-orgmode@gnu.org
Subject: Re: progress indicator for code blocks?
Date: Wed, 03 Sep 2014 00:55:31 -0400 [thread overview]
Message-ID: <8738c9mhfg.fsf@alphaville.dokosmarshall.org> (raw)
In-Reply-To: m2vbp6jea9.fsf@andrew.cmu.edu
John Kitchin <jkitchin@andrew.cmu.edu> writes:
> No, it does not seem to work for me. C-g kills the current evaluation
> for me.
>
> Rainer M Krug <Rainer@krugs.de> writes:
>
>> Thanks for this snippet - I think something along these lines should be
>> included into org out-of-the-box.
>>
>> There are many cases where I simply use C-g to go back to emacs while
>> the evaluation is still running - would your snippet still work?
>>
>> Rainer
>>
>>
>> John Kitchin <jkitchin@andrew.cmu.edu> writes:
>>
>>> John Kitchin <jkitchin@andrew.cmu.edu> writes:
>>>
>>> I am currently using this bit of advice to change the color of code
>>> blocks while they are being executed so there is a visual hint something
>>> is happening.
>>>
>>> ;; give us some hint we are running
>>> (defadvice org-babel-execute-src-block (around progress nil activate)
>>> (set-face-attribute
>>> 'org-block-background nil :background "LightSteelBlue")
>>> (message "Running your code block")
>>> ad-do-it
>>> (set-face-attribute 'org-block-background nil :background "gray")
>>> (message "Done with code block"))
>>>
>>>
>>>> Hi all,
>>>> I am using org-mode in a class, and some students wondered if it was
>>>> possible for there to be a progress bar of some kind while a code block
>>>> is running. Right now Emacs just appears to lock up and there is no
>>>> indication anything is happening, especially the first time we run a
>>>> python block.
>>>>
>>>> I found make-progress-reporter and tried something like this::
>>>>
>>>> #+BEGIN_SRC emacs-lisp
>>>> (defadvice org-babel-execute-src-block (around progress nil activate)
>>>> (let ((pr (make-progress-reporter "Running")))
>>>> ad-do-it
>>>> (progress-reporter-done pr)))
>>>> #+END_SRC
>>>>
>>>> but there is no way to update it, so it doesn't quite do anything
>>>> useful.
>>>>
>>>> What I would really like is an hourglass or some spinning thing. Does
>>>> anyone know how to get that (in a cross-platform way)?
Until emacs becomes multi-threaded, this will be a difficult thing
to do. You can create two asynchronous processes, one to do the
computation and the other to do the spinning: you wait on the first one
and when it finishes, you kill the second, e.g.
#+BEGIN_SRC emacs-lisp
(defvar gq nil)
(defun foo ()
(let* ((p (start-process "computation" "foo" "sleep" "10"))
(sentinel (lambda (p event) (delete-process gq))))
(setq gq (start-process "spinner" "bar" "spin-the-bottle"))
(set-process-sentinel p sentinel))
)
(foo)
#+END_SRC
where spin-the-bottle is a program that pops up a spinner[fn:1].
Or you can use coroutines: the computation "thread" yields every second
(or half-second or whatever) to the spinner "thread" which advances the
spinner (e.g. with progress-reporter-update) and yields control
back to the computation "thread". There is even a coroutine.el but
I have no idea how to use it or how well it works.
The first one works better if the computation is done externally (if
it's done by a lisp function, then you'll have to write a script that
starts another emacs instance to call the function). The second one
might work better if the computation is done by a lisp function.
In any case, things get complicated very quickly, so most people don't
bother.
Footnotes:
[fn:1] Here's my poor-man's "spinner":
--8<---------------cut here---------------start------------->8---
#!/usr/bin/env python
import gtk
import sys
text = 'Spinning'
dialog = gtk.MessageDialog(None,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
gtk.MESSAGE_INFO, gtk.BUTTONS_NONE,
text)
dialog.run()
dialog.destroy()
--8<---------------cut here---------------end--------------->8---
--
Nick
prev parent reply other threads:[~2014-09-03 4:55 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-30 13:02 progress indicator for code blocks? John Kitchin
2014-08-31 12:03 ` John Kitchin
2014-09-02 9:18 ` Rainer M Krug
2014-09-02 14:19 ` John Kitchin
2014-09-03 4:55 ` Nick Dokos [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8738c9mhfg.fsf@alphaville.dokosmarshall.org \
--to=ndokos@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.