freenode/#clim - IRC Chatlog
Search
3:56:54
loke
Then, restart SBCL fully, and recompile the file again using C-c C-k. Then press C-C C-k again to compile it again (i.e. compile the file twice after restarting SBCL). Then start the program again and type something. notice how you don't get an error this time.
4:13:13
beach
It is a bit after 6am. The cleaning lady comes in two hours. I must get rid of all the junk that prevents her from working, and I must make sure I have had my shower, that the dishwasher is empty, etc., etc.
4:16:01
beach
loke: My guess is that your EVAL-WHEN are not sufficient for the presentation types and such.
4:17:05
beach
I mean, put the code that depends on the type existing in a separate file to be loaded later.
4:17:30
loke
Yeah. I do that in climaxima, but in this case I wantd to create a simple singe-file test case for you :-)
4:18:50
beach
There are a bunch of phrases in the CLIM spec, like "Implementation are allowed to...." that might be taken advantage of by McCLIM and that make this example not work.
4:20:40
beach
loke: I grepped for :history in the McCLIM source code, and I don't see it used the way you use it here. Not even in the listener.
4:22:21
loke
If you look at like 142 for example, the use of :HISTORY there is superflouous. It becaically replicates the default behvaiour
4:22:43
loke
Anyway, If you type a few commands in the test case, and then type M-p you'll see the weird behaviour
4:25:30
loke
Also, press M-p a few times, and you'll find yourself with an error because it tries to display NIL from the history
4:25:52
loke
When I added some tracing I noted that it alwas seems to add a NIL to the history no matter what I do. I have no idea where that one comes from
4:26:42
loke
However, the CLIM code has some special-casing for the type CLIM:EXPRESSION (which is a supertype of CLIM:FORM)
4:27:52
loke
It seems to me that much of the input framework is centred around the idea that you will always type Lisp forms. EVen doing plain text input isn't part of the standard infrstructure (hence, by READ-PLAIN-TEXT function in my example)
4:29:13
loke
I'm starting to think that I might be the first person in history to try to create a CLIM REPL which is not Lisp :-)
4:33:09
loke
If I get the history working, the main strangeness right now is that I would like to be able to click on a Maxima expression and in doing so insert the formula into the expression that is being typed. CLIM-Listener can do it, but when I click on one now, it simply replaces what I'm typing with the forumla and immediately submits the command.
4:36:16
loke
The solution might be relating to PRESENTATION-REPLACE-INPUT. You can see that I already had to implement that one. Note how I had to specialise on DREI:DREI-INPUT-EDITING-MIXIN so that my version gets called. I think that this generic function should probably have the OBJECT as its first argument rather than the STREAM, for this reason.
5:37:53
beach
Thanks. I'll research it later too. Only half an hour until all hell breaks loose here.
5:41:01
loke
Found a picture of Beach: https://www.gettyimages.co.uk/detail/photo/office-worker-wearing-astronaut-space-helmet-royalty-free-image/878003694
5:43:19
pillton
That is it except the facial expression is wrong. It should be a scowl or show angst.
7:51:01
beach
loke: The listener also stores commands that start with `,' on the history. I understood that you were saying that it didn't. I must have misunderstood.
7:53:29
loke
In more general terms; I'd like to have some degree of control as to what and how the entries are displayed.
8:19:04
beach
loke: The listener also calls CLIMI:PRESENTATION-HISTORY-ADD when I think it shouldn't. But it deals with it by defining it to enter something of type EMPTY-INPUT. Se the method on read-frame-command in listener.lisp
8:26:41
loke
I just put a breakpoint on PRESENTATION-HISTORY-ADD, and it's funny thast this function is called before I even type a single command.
8:27:27
beach
So it somehow avoids putting it on the history by using the type empty-input, whereas you are using foo-argument.
8:27:47
loke
And if I type a command, it adds _three_ entries to history: the EXPR, the COMMAND-OR-EXPR, and a NIL
8:28:49
loke
I believe those are added to different histories, because of I dump the historyes I get different content. _either_ an EXPR or EXPR-OR-COMMAND. So either the historyes are begine completely rewritten, or there is more than one active.
8:29:25
loke
(well, “it” refers to the code path inside clim/drei that eventually leads to PRESENTATION-HISTORY-ADD being called)
8:31:19
loke
beach: I don't know... I could rewrite the sentence as: “when I type a command, PRESENTATION-HISTORY-ADD is called three times with different arguments”
8:32:09
loke
But I beliebe it happens in my test application too, although I haven't tested... Let me check that.
8:32:11
beach
And the difference between the listener is that in your application NIL is of the correct type to be added.
8:32:30
beach
But in the listener, the "hello" (the default) is of a different type, namely empty-input.
8:32:57
beach
I think that is why your NIL gets added, whereas the "hello" of the listener does not.
8:33:03
loke
Right. But maxima-empty-input in my code, corresponds to empty-imput in the CLIM-Listener.
8:34:35
loke
But in climaxima I do that, and I have the same behaviour there. Let me change my test code to better emulate.
8:41:13
beach
What happens if you use something other than NIL. There must be a reason the listener uses "hello".
8:42:21
beach
Like, I don't understand why presentation-history-add is called before anyone is typing anything.
8:42:55
loke
hmm... Wait a second... I now recall seeing something in the ocmments that might explain that... Hang on
9:00:09
beach
loke: Do you want me to investigate further, or can I count on you to make some progress first?
9:02:25
beach
OK, I'll see what I can do. I can't really work on it full time as you probably understand.
9:03:43
loke
And I am grateful. I would never have gotten to the point where I am right now without your help.
9:04:21
beach
The new "purpose" is to do less coding, more specification, more delegation, and more of helping others getting their work done.
9:35:51
beach
loke: There is a special variable *active-history-type* that lets you filter the types that you get from the history with M-p.
9:36:18
beach
Perhaps if you restrict that type to exclude commands, it will do something closer to what you want.
9:45:56
loke
OK, as best as I can tell, *active-history-type* gets set to whatever the :HISTORY argument is set to
9:46:36
loke
The problem is that if I set it to 'MAXIMA-NATIVE-EXPR (or, in the test case, 'FOO-ARGUMENT) I don't get any history at all. Presumably because it's looking at the wrong history object?
9:48:03
loke
beach: Right, but where should I bind it? It's already bound in the ACCEPT method, so that would override the previous binding.
9:49:58
loke
Yes. Even if I bind that variable prior to calling ACCEPT, inside ACCEPT said varaible gets re-bound to whatever I passed as :HISTORY
9:52:44
beach
So, it seems natural that if you accept a particular type with ACCEPT, then that same time is what the history is scanned for.
9:52:53
loke
Did you try changing my test code? Speicfically, the :HISTORY argument in the READ-FRAME-COMMAND function. If you chaneg that from FOO-ARGUMENT-OR-COMMAND into FOO-ARGUMENT, then I get no history whatsoever.
9:53:30
beach
... therefore, the only solution appears to be to avoid that commands are entered onto the history in the first place.
9:54:12
loke
Unless there is actually a bug in the behaviour, but I'd be damned if I had any idea where that bug would be.
9:56:35
beach
Did you check whether not giving NIL as the default avoids getting the default for M-p?
9:57:35
beach
OK, I am off for a while. Got to tell the cleaning lady goodbye, then put everything back that she moved, then lunch, then rest. Back in a few hours at most.
9:59:12
loke
the NIL seems to be inserted at the point where I was in the history list when I typed th enew command.
15:03:43
beach
loke: I am tracing PRESENTATION-HISTORY-INSERT in both the listener and in your stripped-down application.
15:05:09
beach
Your stripped-down application does not increase the fill pointer when it inserts FOO, but only when it inserts NIL.
15:22:10
loke
beach: Did you also notice that both the NIL and the actial value gets inserted on each command?
15:23:19
beach
The return value of presentation-history-insert is the index of the inserted element.
15:26:13
beach
It appears that in the listener, the empty thing is not overwritten, but in your application, the NIL is overwritten.
15:26:35
loke
Remember how I said that I found it irritating that the index stayed where I was when I used M-p to find a previous command?
15:26:48
loke
Well, turns out that CLIM-Listener doesn't do that. The index is restored to the last element
15:29:32
beach
Another clue: in the listener, when I type M-p, I get the previous input, but not as a presentation. I think that must have something to do with the type that you assign to what you push on the history.