ron at flownet.com
Mon Sep 4 12:28:54 PDT 2017
On Sep 4, 2017, at 12:20 PM, Ron Garret <ron at flownet.com> wrote:
> I just filed this ticket:
> Some time between version 1.10 and 1.11 the *echo-expression-to-listener* functionality of the "Editor Execute Expression" Hemlock command stopped working. This seems to be because writing to (HEMLOCK-EXT:TOP-LISTENER-OUTPUT-STREAM) inside the context of a Hemlock command is no longer working.
> I started looking through the commit log (hooray git!) and found this:
> commit 70dac57d412f3952771a42884511ce9ae32d1006
> Author: Bill St. Clair <wws at clozure.com>
> Date: Tue Sep 1 15:31:53 2015 +0000
> Radically speed up IDE listener output and make it interruptible.
> The IDE listener output is now double-buffered. Printing threads fill
> one buffer, and the GUI thread empties the other.
> To avoid me having to hurt my brain preventing deadlock, output from
> the GUI thread to an IDE listener is dropped on the floor; you'll
> never see it. Since it's unusual to output from the GUI thread to an
> IDE listener (the default is the AltConsole, or, if you started CCL
> from a command-line shell, that shell), this shouldn't be a practical
> Fixes #1307.
> Which is awesome because 1307 was also driving me nuts, but I think this may have broken *echo-expression-to-listener*.
> Is there no way to have our cake and eat it too?
Hm, this seems to do the trick, though it seems rather hacky:
(defcommand "Editor Execute Expression" (p)
"Executes the current region in the editor Lisp. Ensures the result is visible."
(declare (ignore p))
(let* ((region (copy-region (current-form-region)))
(form (when *echo-expression-to-listener* (region-to-string region)))
(buf (when doc (gui::hemlock-buffer doc))))
(let ((HI::*CURRENT-BUFFER* buf))
(move-mark (current-point) (region-end (buffer-region buf)))))
(let ((s (HEMLOCK-EXT:TOP-LISTENER-OUTPUT-STREAM)))
(ccl:process-run-function "foo" #'format s "~A~&" form)))
More information about the Openmcl-devel