about summary refs log tree commit diff stats
path: root/termbox/termbox.c
Commit message (Collapse)AuthorAgeFilesLines
* 3862Kartik K. Agaram2017-05-191-13/+12
| | | | | As the finishing touch on commit 3860, completely decouple the termbox API between moving the cursor and printing at the cursor.
* 3861 - screen untouched when entering console modeKartik K. Agaram2017-05-181-1/+0
|
* 3860 - stop buffering the screen in termboxKartik K. Agaram2017-05-181-171/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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/+2
| | | | | | | 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-12/+2
|
* 3854Kartik K. Agaram2017-05-131-7/+149
| | | | Revert commits 3824, 3850 and 3852. We'll redo them more carefully.
* 3842Kartik K. Agaram2017-05-041-16/+5
| | | | | | | 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-146/+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)
* 3222Kartik K. Agaram2016-08-181-0/+4
| | | | | | | | | | | | | Commit 3191 stopped defining _XOPEN_SOURCE when building termbox/ to get Mu to build on OpenBSD. However, that had the side effect of not declaring the prototype for wcwidth() on some versions of Linux. Ugh. Just hack around this morass. In general the direction we want to go in Mu is fewer feature #defines. At least explicit ones. Should be an internal detail of the underlying platform our code shouldn't have to worry about. If headers don't cooperate, just start explicitly declaring prototypes and damn the consequences.
* 2131 - better tb_sync()Kartik K. Agaram2015-09-021-6/+10
| | | | | | | | | For some reason porting the termbox-go implementation was still leaving some gunk from git on screen when I ran my usual test: $ mkdir lesson; cd lesson; git init; mu edit.mu Then hit F4, generating messages from git on the initial commit. Then hit ctrl-l to clear all git gunk.
* 2113 - stop updating entire screen on tb_present()Kartik K. Agaram2015-08-291-0/+9
| | | | | | | | | | | | | | | | | | | | 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.
* 2078 - update entire screen on tb_present()Kartik K. Agaram2015-08-261-4/+0
| | | | | | | | | | | | | | | | | | | Termbox had been taking shortcuts when it thinks the screen hasn't changed, which doesn't work if some other process messes up the screen. The Go version has a Sync method in addition to Flush/tb_present for precisely this eventuality. But it feels like an unnecessary optimization given C's general speed. Just drop it altogether. --- This took me a long time to track down, and interestingly I found myself writing a new tracing primitive before I remembered how to selectively trace just certain layers during manual tests. I'm scared of generating traces not because of performance but because of the visual noise. Be aware of this. I'm going to clean up $log now. Maybe I should also stop using $print..
* 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/+5
| | | | The trick is to check for more events and not bother rendering if so.
* 1573Kartik K. Agaram2015-06-161-0/+8
|
* 1531 - enable termbox's mouse supportKartik K. Agaram2015-06-051-0/+1
|
* 1530 - switch to termbox's 256-color modeKartik K. Agaram2015-06-051-34/+10
|
* 1486 - repl: hitting enter now workingKartik K. Agaram2015-05-271-0/+5
|
* 1327 - better error handling in chessboardKartik K. Agaram2015-05-101-2/+10
| | | | | Also a bugfix in break to label, because I noticed the screen wasn't being cleaned up on quit.
* 1323 - keyboard supports backspace and newlineKartik K. Agaram2015-05-101-4/+1
| | | | | | Lots mixed into this commit: some off-by-one errors in display.cc a new transform to translate jump labels that I'd somehow never gotten around to supporting
* 1276 - make C++ version the defaultKartik K. Agaram2015-05-051-0/+562
I've tried to update the Readme, but there are at least a couple of issues.
lic key on PEP' href='/danisanti/profani-tty/commit/src/xmpp/ox.c?id=5a179572535805022580b264a99df60a47cb935d'>5a179572 ^
0552e50c ^
5a179572 ^










a2726b6a ^


5a179572 ^

2a011e69 ^
5a179572 ^
a2726b6a ^

5a179572 ^







a2726b6a ^

5a179572 ^


a2726b6a ^
5a179572 ^
a2726b6a ^
5a179572 ^


a2726b6a ^
5a179572 ^


a2726b6a ^


5a179572 ^

a2726b6a ^

5a179572 ^
0552e50c ^


31a78e26 ^
0552e50c ^

2a011e69 ^
0552e50c ^


17b1b431 ^
0552e50c ^
31a78e26 ^
0552e50c ^




31a78e26 ^
0552e50c ^




31a78e26 ^
0552e50c ^


17b1b431 ^
0552e50c ^
31a78e26 ^
0552e50c ^






2a011e69 ^
10df93ee ^
2a011e69 ^


10df93ee ^
0552e50c ^



























2a011e69 ^
0552e50c ^
31a78e26 ^
0552e50c ^






















































31a78e26 ^
0552e50c ^


31a78e26 ^
0552e50c ^


17b1b431 ^
0552e50c ^

31a78e26 ^
0552e50c ^





31a78e26 ^
0552e50c ^





31a78e26 ^
0552e50c ^


17b1b431 ^
0552e50c ^

31a78e26 ^
0552e50c ^

b584a1ec ^
0552e50c ^
b584a1ec ^



0552e50c ^
b584a1ec ^









0552e50c ^




5a179572 ^
a2726b6a ^


5a179572 ^







a4cadf78 ^
bddbfa58 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470