'clear' equivalent in DrRacket

222 views
Skip to first unread message

Aman

unread,
Oct 4, 2015, 1:28:04 PM10/4/15
to Racket Users
Hi all,

I am new to DrRacket. I am using swindle language and want to know a way so that I can clear my evaluation window(interaction window) after I do some direct runs there.

For example if i run following

> (define a 3)
> (define b 2)

Now i want something like
> clear
which could clear the window but still keep a and b in environment (memory). Is it possible somehow?

After going through a lot of posts all I was able to figure out was to hit "Run" and use "Esc:p" to again load the needed commands which seems to me a very bad way.

Thanks!

Laurent

unread,
Oct 5, 2015, 4:56:50 AM10/5/15
to Aman, Racket Users
I don't think there is anything like this right now, but in case anyone wants to do that, my first impression is,  that such a command should not completely erase the previous content but only hide it (by scrolling down for example). I tried very quickly to do that using `set-position` of `text%` but I couldn't make it leave a blank space after the cursor position when at the end of the editor.


--
You received this message because you are subscribed to the Google Groups "Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to racket-users...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Paolo Giarrusso

unread,
Oct 5, 2015, 1:51:05 PM10/5/15
to Racket Users, amang...@gmail.com
On Monday, October 5, 2015 at 10:56:50 AM UTC+2, Laurent Orseau wrote:
> I don't think there is anything like this right now, but in case anyone wants to do that, my first impression is,  that such a command should not completely erase the previous content but only hide it (by scrolling down for example). I tried very quickly to do that using `set-position` of `text%` but I couldn't make it leave a blank space after the cursor position when at the end of the editor.

I'm guessing you (or who does this) will need to insert whitespace (newlines) with some insert method, after setting the position, probably with
(send a-text insert string)

You'll also need to act on the editor-canvas% to scroll it down (text% can't do that because it's just a MVC Model, while editor-canvas% is the corresponding View). (It seems you'll have to call allow-scroll-to-last and scroll-to).

I can't do the rest myself because I haven't learned enough APIs to "try something quickly" — only hacked slowly a plugin. But if you share your attempt I might be able to try.

Cheers,
Paolo

Aman

unread,
Oct 5, 2015, 7:45:39 PM10/5/15
to Racket Users
Thanks Laurent and Paolo. When you say (send a-text insert string), how are you getting a-text ?
What I wanted was not to design a new editor window, but to modify or 'send' some command to current editor (the default one when we launch DrRacket) to clear some content or scroll down to hide the content, but I am not able to find a way to get handle for editor%, text% or anything else that can be helpful while executing 'send'

Paolo Giarrusso

unread,
Oct 5, 2015, 11:12:14 PM10/5/15
to Aman, Racket Users
On 6 October 2015 at 01:45, Aman <amang...@gmail.com> wrote:
>
> Thanks Laurent and Paolo. When you say (send a-text insert string), how are you getting a-text ?

> What I wanted was not to design a new editor window, but to modify or 'send' some command to current editor (the default one when we launch DrRacket) to clear some content or scroll down to hide the content, but I am not able to find a way to get handle for editor%, text% or anything else that can be helpful while executing 'send'

Yeah, a very good question, that's why I asked Laurent for his "quick
attempt" :-).

The two ways I can imagine are writing a plugin or modifying DrRacket,
and I expect the latter to be easier; my only experience is modifying
a DrRacket plugin, and I don't think this is quick, but it's possible.

For that, I think you want to look at
drracket:get/extend:extend-interactions-text. To be in the context to
do that, see http://docs.racket-lang.org/tools/implementing-tools.html
and the examples shown there using
drracket:get/extend:extend-definitions-text.

Below's I'll give an outline anyway of what I actually did, in case
it's helpful — though the docs are probably better.
==

I've been hacking a DrRacket plugin (the handin client), where I use
something more complex because I assumed I only had a editor% (so I
used insert-port). My call is in
https://github.com/racket/handin/pull/27/files#diff-cf0f873382d5f6c351cee18d851376c3R734;
the code around it does a number of potentially useful things.

The starting point is the call drracket:get/extend:extend-unit-frame,
in the context of

(define tool@
(unit
(import drracket:tool^)
(export drracket:tool-exports^)
...

drracket:get/extend:extend-unit-frame subclasses the unit-frame
DrRacket component, and inside it you can call get-definitions-text
and get-interactions-text to get access to the two text%.

For that, refer to the docs extensively, starting from
http://docs.racket-lang.org/tools/, its index, and the introduction
into how to do a plugin.
By doing that, I just found out about
drracket:get/extend:get-interactions-text, which allows you to
subclass the interactions-text directly.

While this is a lot, I've found I managed to get something done
without needing to understand every detail, also thanks to Racket
syntax-check. It's sad it doesn't understand units as well as the
rest.
(OTOH, I'm scared that I'm writing code without understanding every
single line around it. I usually never do that, but I'm new at
Racket).

Cheers,
Paolo
> You received this message because you are subscribed to a topic in the Google Groups "Racket Users" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/racket-users/_XWopH-iMNw/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to racket-users...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.




--
Paolo G. Giarrusso - Ph.D. Student, Tübingen University
http://ps.informatik.uni-tuebingen.de/team/giarrusso/

--
Paolo G. Giarrusso - Ph.D. Student, Tübingen University
http://ps.informatik.uni-tuebingen.de/team/giarrusso/

Laurent

unread,
Oct 6, 2015, 5:36:55 AM10/6/15
to Paolo Giarrusso, Aman, Racket Users
I'm using the script plugin [*]  to test things quickly. You get direct access to the current editor, either the interactions or the definitions one. Possibly it would be even more helpful to have an interaction window with access to the same things for quick hacks. That could be either a standalone plugin or I think that should also be easy with the script plugin. 

Disclaimer: I wrote this. I have no idea if anyone else is using it, but I personally use it all the time.

Paolo Giarrusso

unread,
Oct 6, 2015, 6:31:54 AM10/6/15
to Racket Users, p.gia...@gmail.com, amang...@gmail.com
So, a skeleton calling insert, relying on `script-plugin`, is the following. It doesn't work yet, but it took like 1 minute, so it's a cool starting point. With script-plugin, you can just edit it and rerun it without restarting Racket:

```
#lang racket/base
(require racket/class)

; Sample identity function:
;; string? -> (or/c string? #f)
(provide item-callback)
(define (item-callback str #:interactions interactions)
(send interactions insert "\n\n\n\n")
str)
```

On Tuesday, October 6, 2015 at 11:36:55 AM UTC+2, Laurent Orseau wrote:
> I'm using the script plugin [*]  to test things quickly. You get direct access to the current editor, either the interactions or the definitions one. Possibly it would be even more helpful to have an interaction window with access to the same things for quick hacks.

Yes, that would be even cooler (Emacs-style), but this tool is already really cool.

> That could be either a standalone plugin or I think that should also be easy with the script plugin. 
>
>
>
> [*]  http://pkgs.racket-lang.org/#[script-plugin] 
> Disclaimer: I wrote this. I have no idea if anyone else is using it, but I personally use it all the time.

Don't take this the wrong way, but once you have a solution to such a big problem, I think you probably should to advertise it a bit to get it to your users — try to get a link in the plugin guide, make this an official plugin, ... This takes much less effort than the work, and increases the positive impact on the community.

Furthermore, your plugin enables a the birth of *lots* of simple editor extensions — you empower your users to do much more work.
Here's an example of more people who would have needed it:
http://comments.gmane.org/gmane.comp.lang.racket.user/24630

I think the above would hold as soon as script-plugin was decent for you; in fact, I think it's already great.

Cheers,
Paolo

Paolo Giarrusso

unread,
Oct 6, 2015, 10:09:53 AM10/6/15
to Racket Users, p.gia...@gmail.com, amang...@gmail.com
After more playing around, I got to this — which scrolls down a bit but not enough. Now it's down to actually understanding `(send an-editor-canvas scroll-to ...)` docs — in particular, what are editor coordinates. I'm fearing it's in pixels.

#lang racket/base
(require racket/class)

;; string? -> (or/c string? #f)
(provide item-callback)
(define (item-callback str #:interactions interactions #:frame frame)
;(send interactions insert "\n\n\n\n(void)")
(define interaction-canvas (send frame get-interactions-canvas))
(send* interaction-canvas
(allow-scroll-to-last #t)
;(scroll-with-bottom-base #f)
(scroll-to 0 300 1 1 #t 'end))
str)
Reply all
Reply to author
Forward
0 new messages