| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Thanks Juan Crispin Hernandez for the suggestion.
|
|
|
|
|
|
|
|
| |
Strange race condition: if I repeatedly press <enter> and <backspace> so
the screen is constantly playing catch up, it will sometimes fail these
assertions when it does eventually catch up. Somehow the cursor ends up
misplaced. Let's just take them out. It's likely some low-level implementation
detail of the terminal.
|
|
|
|
| |
Clean up a few superficial things in Caleb's commit.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
To achieve this we have to switch to a model of the screen in termbox that
is closer to the underlying terminal.
Before:
a screen is a grid of characters
writing out of bounds does nothing
After:
a screen is a scrolling raster of characters
writing out of bounds wraps to next line and scrolls if necessary
To move to the new model, it was essential that I migrate my fake screen
at the same time to mimic it. This is why the first attempt (commit 3824)
failed (commit 3858). This is also why this commit can't be split into
smaller pieces.
The fake screen now 'scrolls' by rotating screen lines from top to bottom.
There's still no notion of a scrollback buffer.
The newer model is richer; it permits repl-like apps that upstream termbox
can't do easily. It also permits us to simply use `printf` or `cout` to
write to the screen, and everything mostly works as you would expect. Exceptions:
a) '\n' won't do what you expect. You need to explicitly print both '\n'
and '\r'.
b) backspace won't do what you expect. It only moves the cursor back,
without erasing the previous character. It does not wrap.
Both behaviors exactly mimic my existing terminal's emulation of vt100.
The catch: it's easy to accidentally scroll in apps. Out-of-bounds prints
didn't matter before, but they're bugs now. To help track them down, use
the `save-top-idx`, `assert-no-scroll` pair of helpers.
An important trick is to wrap the cursor before rather after printing
a character. Otherwise we end up scrolling every time we print to the
bottom-right character. This means that the cursor position can be invalid
at the start of a print, and we need to handle that.
In the process we also lose the ability to hide and show the screen. We
have to show the prints happening. Seems apt for a "white-box" platform
like Mu.
|
|
|
|
| |
Revert commits 3824, 3850 and 3852. We'll redo them more carefully.
|
|
|
|
|
| |
Bugfix: writes out of bounds used to be skipped, but started clobbering
the screen on commit 3824.
|
| |
|
|
|
|
| |
Fix CI.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Now it's much more apparent why things are slow. You can see each repaint
happening. Already I fixed one performance bug -- in clear-rest-of-screen.
Since this subverts Mu's fake screen there may be bugs.
Another salubrious side effect: I've finally internalized that switching
to raw mode doesn't have to clear the screen. That was just an artifact
of how termbox abstracted operations. Now I can conceive of using termbox
to build a repl as well.
(I was inspired to poke into termbox internals by
http://viewsourcecode.org/snaptoken/kilo and
https://github.com/antirez/linenoise)
|
|
|
|
|
|
| |
Standardize the order of some common blocks in `render`, `render-text`
and `render-code`. This is preparation for trying to reorganize them to
reduce duplicate code.
|
|
|
|
| |
Fix a _very_ misleading comment.
|
|
|
|
|
|
| |
Move 'render-code' to the layer where it's used.
Thanks Caleb Couch for finding this bit of ugliness.
|
|
|
|
| |
Don't try to snapshot in scenarios.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I accidentally got rid of git snapshotting of lessons back when I switched
to testable file primitives last December (commit 3705).
>:-(
Bringing it back now, hopefully better. The improvement is that there's
now at most one commit every time we hit F4.
This change adds yet another reason that running `mu` from a different
directory is just not supported.
|
| |
|
|
|
|
|
|
|
| |
Stop trying to create a new layer showing how we minimize prints.
Stephen's suggestion is to create a data structure that encapsulates
instructions to `insert-at-cursor` for either just printing a character
to screen or rendering everything. Let's try that at some point.
|
| |
|
|
|
|
|
| |
We do support printing non-integer numbers for some time, albeit using
the underlying host platform.
|
| |
|
|
|
|
|
|
| |
Decouple editor initialization from rendering to screen. This hugely
simplifies the header of 'new-editor' and makes clear that it was only
using the screen for rendering.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Stop requiring jump instructions to explicitly provide a ':label' type
for jump targets.
This has been a source of repeated confusion for my students:
a) They'd add the ':label' to the label definition rather than the
jump target (label use)
b) They'd spend time thinking about whether the initial '+' prefix was
part of the label name.
In the process I cleaned up a couple of things:
- the space of names is more cleanly partitioned into labels and
non-labels (clarifying that '_' and '-' are non-label prefixes)
- you can't use label names as regular variables anymore
- you can infer the type of a label just from its name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Redo commit 3457.
Basically there were 3 unicode characters we changed back then:
solid horizontal line: 9473 -> 9472
fuzzy horizontal line: 9480 -> 9548
fuzzy vertical line: 9482 -> 9550
The solid horizontal line has no issues, so we just redo it here.
For the other two, we'll perform the substitution only when rendering
html. That gives us the best of both worlds: the scenario screens render
right in html, and alt-tabbing continues to be snappy when running the
edit/ app.
|
|
|
|
|
|
|
|
|
|
| |
Revert commit 3457, where I switched the unicode characters used in the
edit/ app to something that doesn't render double-wide in html. It turns
out that the new unicode characters made iTerm2 sluggish in alt-tabbing
between windows. (Commit 3488 only fixed the screen-clearing issue.)
I haven't reverted the html files. I'm going to redo commit 3457 next so
the html files continue to render like they do now.
|
|
|
|
|
| |
Switch around some unicode characters in the edit/ app so that it
renders more cleanly in html (with monospace fonts).
|
|
|
|
|
|
|
| |
Ugly that we didn't need 'screen' to provide a type in scenarios
(because assume-screen expands to a definition of 'screen') but we did
need a type for 'console'. Just never require types for special names in
scenarios.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A long-standing problem has been that I couldn't spread code across
'run' blocks because they were separate scopes, so I've ended up making
them effectively comments. Running code inside a 'run' block is
identical in every way to simply running the code directly. The 'run'
block is merely a visual aid to separate setup from the component under
test.
In the process I've also standardized all Mu scenarios to always run in
a local scope, and only use (raw) numeric addresses for values they want
to check later.
|
| |
|
|
|
|
|
|
|
|
|
| |
Well, almost. I can't use them in some places in C++ where I'm just
creating a temporary reagent without passing it through transforms. Like
in some unit tests. I can't use them in memory-should-contain.
And there's one remaining bug: I can't use abbreviations in a couple of
places in 075channel.mu.
|
|
|
|
|
|
|
| |
Process type abbreviations in function headers.
Still a couple of places where doing this causes strange errors. We'll
track those down next.
|
|
|
|
| |
Process type abbreviations in container definitions.
|
|
|
|
|
| |
In the process I've uncover a couple of situations we don't support type
abbreviations yet. They're next.
|
|
|
|
|
|
|
| |
This is part of efforts to allow students to transition gradually from
the sandbox to running programs directly on the commandline, writing
real scenarios, etc. Running on the commandline requires 'main', but
overriding 'main' would mess up edit/ which is itself a Mu program.
|
| |
|
|
|
|
|
|
| |
This required the fix of 3051 to first-class recipe support, and will
next enable us to keep the cursor from moving in response to resize
events.
|
|
|
|
|
| |
When I floor the down-arrow too much, don't scroll unnecessarily off the
bottom of the screen. But *do* scroll if there's errors to show.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Doesn't work as advertised yet. This is just the render piece, and
fixing all the tests.
I've been careful to try to break tests for edit once I implement the
button. Delete I can't ensure will break afterwards. Remember to test
clicking on multiple places on the menu.
Managing the screens is starting to grow onerous; maybe we need
something called normalize which clears some things. But the sandbox
menu can be on arbitrary lines..
|
| |
|
|
|
|
| |
Clean up this helper before we start redoing sandbox menubars.
|
|
|
|
| |
The actual fix is in the layer rewriting literal strings.
|
|
|
|
|
|
| |
In the process I've also simplified the sandbox/ app. Since it's
impossible for sandbox editors to span multiple pages, we can drop all
scroll support altogether.
|
|
|
|
|
| |
This had been broken ever since 2854, because we can't write tests for
restore-snapshots at the moment.
|
|
|
|
|
|
|
| |
Now that we no longer have non-shared addresses, we can just always
track refcounts for all addresses.
Phew!
|