summary refs log tree commit diff
AgeCommit message (Collapse)Author
13 hoursrename a bunch of the terminal helpersIrene Knapp
they had quirky names as a result of being the first things written; they're more consistent now Force-Push: yes Change-Id: I61a1fe9df1d4491c383fb368547a829f5b66c197
14 hoursfully implement the first-nonblank-column thing for H and LIrene Knapp
surprisingly intricate, but although it looks messy now, this approach will clean up nicely Force-Push: yes Change-Id: Ic9c90982787a58110ec0a189844742a1e6c2216f
15 hoursimplement the 'H' and 'L' commandsIrene Knapp
and handle the neutral column in a way that requires less code duplication Force-Push: yes Change-Id: I33b9983912f0699836e80d2b13b3fb355bb51e8a
18 hoursrefactor screen drawing to be invokable row by rowIrene Knapp
and use it to make scrolling efficient in terms of redraws! yay! Force-Push: yes Change-Id: Ib6de76f6ca1603c4e7a0f11e9a4f2371a145b7c6
19 hoursscrolling now uses the terminal scroll feature when possibleIrene Knapp
it doesn't redraw the newly blank lines in that case though, so it's broken, but that can come next Force-Push: yes Change-Id: I52c90249852331e5f9bbcdee4d645ee33e4c671a
21 hoursthere is now a concept of a scroll-topIrene Knapp
scrolling is handled in the most naive possible way, which is way too much redrawing and also doesn't have the desired centering behavior for longer movements Force-Push: yes Change-Id: I611b02d25553873a93f2c4c17e303356735581f7
22 hoursdeal with broken UTF8 even betterIrene Knapp
now it should self-synchronize properly if there's something really weird happening also, that code is all refactored into encodings.rs Force-Push: yes Change-Id: I8bd9682448fc309b7aa6c0513e9b94cb5a4ace11
24 hoursimplement the 0 and $ commandsIrene Knapp
Force-Push: yes Change-Id: I0a056ed4e021124f05e56c893d47c3b3dc5f3cd7
24 hourscount_lines() wasn't handling empty lines properlyIrene Knapp
remember, they can occur in the middle, not just at the end! heh Force-Push: yes Change-Id: I52d2c29e40597c0bfc9484fec5cef7f13612cb19
25 hourshandling of the neutral column is implemented fully nowIrene Knapp
this is what POSIX seems to call the "current column", but that's a confusing name... POSIX also seems to think in terms of the cursor's actual position not being a thing that persists, but that feels wrong so here it's a separate concept. Force-Push: yes Change-Id: I0c3a171ebdf9ca74a1a8faaeeb85cd7d2a37b2ff
26 hourshjkl movement is now capped to the dimensions of the buffer... sort ofIrene Knapp
it only checks in the direction of movement, which means it's possible to get outside the text by going up or down off a longer line, onto a shorter one also, non-printing characters are passed through raw and treated as being exactly one cell wide, and both those things will need to change at some point (try editing a file with color codes in it) Force-Push: yes Change-Id: Ie3e82b45a0dba3e52c06c775652d95335242c39b
26 hoursadded a handle_movement() abstractionIrene Knapp
right now, the main thing it takes care of is checking whether it's actually necessary to move the cursor, and doing it. the hope is to be very parsimonious of bandwidth, like to 1980s standards, and to also be deliberate about making sure the portions of the screen that are redrawn follow logically from the user's actions. this is meant to help in high-latency situations as well as with screen readers. also, it just feels right. Force-Push: yes Change-Id: Ib26ae484a34e0aaa0e8382f5ad4966226bada223
27 hoursthe hjkl commands are partly implementedIrene Knapp
it's now possible to move the cursor around the screen, but it doesn't interact with the buffer in any way. in particular it isn't forced to stay within the buffer, it just moves wherever. Force-Push: yes Change-Id: If56d044b97c761a2070ffc2cc3f541b35ef9965f
27 hoursadd a loop that reads a character of user inputIrene Knapp
(right now it exits after the first time, doing nothing) Force-Push: yes Change-Id: I89f8d3d298e6a42e373e536121e6b434e30ef66f
28 hoursimplement abstractions Terminal and BufferIrene Knapp
Terminal encapsulates most of the already-existing logic for drawing things Buffer corresponds directly to the user-facing concept of a buffer. it has facilities for creating a new empty one; for loading itself from a file; and for scanning its contents to compute the offsets to the start of each line. at the moment, the assumption is that buffers are always entirely in-memory, but this will not always be true, so significant attention has been paid to aysnc behavior. there's locks in a few places which may or may not turn out to be how it ultimately works, but they seem like a credible first attempt. the draw() routine is the heart of what exists so-far, doing all the really interesting stuff. Force-Push: yes Change-Id: Ifddc5debb12628233113c0bd6db3ea8cf10e6a5a
31 hoursinitial commit; draws the traditional tildesIrene Knapp
Force-Push: yes Change-Id: I18ada127a4c78e5ac74f5002ed3716c53a1e141b