about summary refs log tree commit diff stats
path: root/termbox/termbox.h
Commit message (Collapse)AuthorAgeFilesLines
* 3862Kartik K. Agaram2017-05-191-4/+4
| | | | | As the finishing touch on commit 3860, completely decouple the termbox API between moving the cursor and printing at the cursor.
* 3860 - stop buffering the screen in termboxKartik K. Agaram2017-05-181-23/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* 3858Kartik K. Agaram2017-05-131-5/+1
| | | | | | | Lose the ability to hide the cursor. If we want to stop buffering the screen in termbox, it needs to go. What's more, it has no tests.
* 3857Kartik K. Agaram2017-05-131-3/+0
|
* 3854Kartik K. Agaram2017-05-131-5/+31
| | | | Revert commits 3824, 3850 and 3852. We'll redo them more carefully.
* 3842Kartik K. Agaram2017-05-041-3/+0
| | | | | | | Always start with an untouched screen that can scroll on printing "\r\n". We can still clear the screen as needed. Also drop support for hiding the cursor.
* 3824 - experiment: stop buffering in termboxKartik K. Agaram2017-04-161-28/+5
| | | | | | | | | | | | | | | | 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)
* 3711Kartik K. Agaram2016-12-261-4/+0
| | | | | Delete '^L' characters now that I'm trying to switch from Vim to Kakoune. Pages aren't text objects in Kakoune.
* 2572Kartik K. Agaram2016-01-191-1/+1
|
* 2181 - detect shift-tabKartik K. Agaram2015-09-111-5/+4
| | | | Does nothing useful yet, though.
* 2132 - support for ctrl + arrow keysKartik K. Agaram2015-09-021-2/+6
|
* 2113 - stop updating entire screen on tb_present()Kartik K. Agaram2015-08-291-0/+3
| | | | | | | | | | | | | | | | | | | | Mu still isn't so optimized that I can be profligate with spare cycles. Instead we'll follow termbox-go's example and create a new API routine called tb_sync() (after discussion with termbox's author). Now we only need use tb_sync() on ctrl-l. For everything else use the optimized render. Now I think I've eradicated all signs of "cursor thrashing" during refresh, in spite of how slow mu is as an interpreted language. We only render the whole screen in some situations, and only if there's no more input, and even then we only refresh the parts of the screen that changed. Thanks Jack and Caleb Couch for providing the impetus behind commits 2109-2113. I've been lazy about writing tests for all this, but it's still good to know I could, if I wanted to.
* 1964 - don't mess up pasteKartik K. Agaram2015-08-091-0/+2
| | | | | | | It took me a long time to fix termbox because the escape codes it was seeing seemed all wrong. Had to stop calling tb_shutdown/printf and put in the extra 3 lines to log to a file. Then everything cleared up. Weird.
* 1731 - ah, now fully responsiveKartik K. Agaram2015-07-081-0/+2
| | | | The trick is to check for more events and not bother rendering if so.
* 1573Kartik K. Agaram2015-06-161-0/+1
|
* 1530 - switch to termbox's 256-color modeKartik K. Agaram2015-06-051-12/+5
|
* 1486 - repl: hitting enter now workingKartik K. Agaram2015-05-271-0/+2
|
* 1368 - alias carriage-return and newlineKartik K. Agaram2015-05-141-0/+3
| | | | | | | CRLF still shows as two newlines, though. Cross that bridge when we get to it. The new chessboard test is still hanging, though.
* 1314Kartik K. Agaram2015-05-091-1/+2
|
* 1276 - make C++ version the defaultKartik K. Agaram2015-05-051-0/+210
I've tried to update the Readme, but there are at least a couple of issues.