Kartik K. Agaram
283c4e5804
bugfix: pasting newlines
2022-06-02 18:35:18 -07:00
Kartik K. Agaram
4f76ea37d7
more efficient undo/redo
...
Now the bottleneck shifts to applying undo/redo in large files. But
things should be snappy if you don't use the sluggish feature.
2022-06-02 17:46:30 -07:00
Kartik K. Agaram
22817492a3
rename
2022-06-02 16:44:18 -07:00
Kartik K. Agaram
477216a051
this implementation undo load-tests quite poorly
...
Even a 10KB file gets sluggish within the first 1k characters inserted.
We're not running out of memory, we're just overloading Lua's GC.
2022-06-02 16:29:18 -07:00
Kartik K. Agaram
670886240f
after much struggle, a brute-force undo
...
Incredibly inefficient, but I don't yet know how to efficiently encode
undo mutations that can span multiple lines.
There seems to be one bug related to creating new drawings; they're not
spawning events and undoing past drawing creation has some weird
artifacts. Redo seems to consistently work, though.
2022-06-02 15:45:25 -07:00
Kartik K. Agaram
819cb4b1cc
avoid scrolling down if possible
2022-05-30 17:24:23 -07:00
Kartik K. Agaram
b22bfe82db
support non-text lines in Text.to2
...
Originally I was only using it on cursor line, but there's no reason
that has to be true in general.
2022-05-30 15:40:36 -07:00
Kartik K. Agaram
3b4dacaee8
regression: typing uppercase letters in text
2022-05-30 15:36:53 -07:00
Kartik K. Agaram
6aeb89386c
.
2022-05-29 16:03:02 -07:00
Kartik K. Agaram
f17f5a1192
cut/copy selected text to clipboard
2022-05-29 15:33:24 -07:00
Kartik K. Agaram
23e9be3e10
selecting text and deleting selections
...
I've written a few tests for delete_selection, but the way different
operations initialize the selection seems fairly standard and not worth
testing so far.
2022-05-29 08:12:47 -07:00
Kartik K. Agaram
524157fb8a
bugfix for non-ASCII
2022-05-29 07:57:35 -07:00
Kartik K. Agaram
b0bb105cbe
extract a couple of methods
2022-05-28 23:11:53 -07:00
Kartik K. Agaram
d58aabe867
extract a couple more methods
2022-05-28 22:45:53 -07:00
Kartik K. Agaram
86532eef4b
move some code
...
I had this idea originally to keep text.lua oblivious to drawings.
But that hasn't been true for some time. Losing battle.
2022-05-28 22:45:08 -07:00
Kartik K. Agaram
18c62fb146
extract a few methods
2022-05-28 22:38:35 -07:00
Kartik K. Agaram
e79c895c7d
move
2022-05-28 22:27:47 -07:00
Kartik K. Agaram
10c1a70dd0
.
2022-05-28 22:24:17 -07:00
Kartik K. Agaram
916e4ce341
scroll on backspace
2022-05-28 09:41:02 -07:00
Kartik K. Agaram
cf94d36a5f
.
2022-05-28 09:35:06 -07:00
Kartik K. Agaram
95592b83fb
.
2022-05-28 09:31:51 -07:00
Kartik K. Agaram
3266262b1f
fix a regression in line wrapping
2022-05-28 09:04:21 -07:00
Kartik K. Agaram
8a3b66c813
scroll on enter
2022-05-28 08:38:49 -07:00
Kartik K. Agaram
0fab1b499d
paste in text with M-v
2022-05-26 20:40:50 -07:00
Kartik K. Agaram
d1f893a98e
M-left/M-right for word-based motions
2022-05-25 15:47:11 -07:00
Kartik K. Agaram
9892bc5d7c
extract couple of functions
2022-05-25 15:25:10 -07:00
Kartik K. Agaram
cb943b9aeb
couple of renames
2022-05-25 15:20:18 -07:00
Kartik K. Agaram
1fa295e599
keep repeated cursor up/down motions from drifting left
2022-05-25 15:08:53 -07:00
Kartik K. Agaram
34950353b9
bugfix: don't append metadata when it already exists
2022-05-25 14:56:21 -07:00
Kartik K. Agaram
fd213e6f49
bugfix
...
I spent 20 minutes converting a manual test to a reproducible automated
one, but in the process I knew exactly what the problem was. Nice.
2022-05-25 14:31:16 -07:00
Kartik K. Agaram
c2eee640cf
test and App helper for mouse clicks
2022-05-25 13:38:33 -07:00
Kartik K. Agaram
442133fe7f
no, make sure to compute line width after screen dimensions
2022-05-25 13:35:32 -07:00
Kartik K. Agaram
fa103ca2e8
couple more tests
...
Along with the App helpers needed for them.
2022-05-25 12:59:12 -07:00
Kartik K. Agaram
2999605530
bugfix: down arrow doesn't scroll up unnecessarily
...
up arrow doesn't seem to have the symmetric issue.
2022-05-24 15:03:06 -07:00
Kartik K. Agaram
84973b09e3
bugfix
...
Found while reading https://www.gutenberg.org/ebooks/52091
2022-05-24 14:34:58 -07:00
Kartik K. Agaram
e581a2b7d1
get rid of debug variables
2022-05-23 23:00:07 -07:00
Kartik K. Agaram
8d5ac5da75
keep one screen line of overlap on pagedown
...
I'm now extracting the concern of computing
line.screen_line_starting_pos out of Text.draw. Earlier
I had to make sure I ran through the whole line to compute
screen_line_starting_pos, but that had the side-effect of updating
Screen_bottom1.pos as well with lines that had never been rendered.
In this process I hit my first bug due to an accidental global. It
doesn't show up in the patch because I accidentally deleted a local
declaration. (I thought I didn't need screen_line_starting_pos anymore,
deleted everywhere, then brought it back everywhere from the bottom of
the function up, but forgot to put back the very first occurrence.)
The amount of yoyoing this caused between App.draw and Text.draw, I very
much have spaghetti on my hands.
Accidental globals are _terrible_ in a program with tests. Cross test
contamination X-(
2022-05-23 22:51:52 -07:00
Kartik K. Agaram
b3251b23b5
a few tests for pageup, and a bugfix
...
It wasn't screen-line aware. Now it is.
2022-05-23 20:57:56 -07:00
Kartik K. Agaram
6b093fe3b4
clean up test progress indicators
2022-05-23 17:40:44 -07:00
Kartik K. Agaram
a35b130f08
one bug I've repeatedly run into while testing with Moby Dick
...
https://www.hogbaysoftware.com/posts/moby-dick-workout
2022-05-23 17:39:00 -07:00
Kartik K. Agaram
288d8426f1
scrolling with up arrow
2022-05-23 16:36:26 -07:00
Kartik K. Agaram
6b10c94dd5
disable all debug prints
2022-05-23 15:38:42 -07:00
Kartik K. Agaram
8b5fdffd7d
quite the frustrating bugfix
2022-05-23 15:34:05 -07:00
Kartik K. Agaram
c9434e4f17
snapshot
...
Why the fuck is this so fucking hard?
2022-05-23 15:22:16 -07:00
Kartik K. Agaram
4490c5034f
similar tests for cursor up
2022-05-23 11:02:37 -07:00
Kartik K. Agaram
e0b2c2dede
couple of tests for cursor down
2022-05-23 10:56:39 -07:00
Kartik K. Agaram
4f6a324975
bugfix: don't rely on Screen_bottom1 while scrolling
...
Setting up the test just right to test the thing I want to test was a
rube goldberg machine of constants.
2022-05-23 08:52:13 -07:00
Kartik K. Agaram
37f1313b16
first successful pagedown test, first bug found by test
...
I also really need to rethink how people debug my programs. My approach
of inserting and deleting print() takes a lot of commitment. I need my
old trace-based whitebox testing idea. However, in my past projects I
never did figure out a good framework for tweaking how verbose a trace
to emit.
Perhaps that's too many knobs. Perhaps we just need a way to run a
single test with the most verbose trace possible. Then it's just a
matter of having the trace tell a coherent story? But even if the trace
stays out of program output in that situation, it's still in the
programmer's face in the _code_. Ugh.
Current plan: ship program with maximum tests and zero commented-out
prints. If you want to debug, insert prints. This is better than
previous, text-mode, projects just by virtue of the stdout channel being
dedicated to debug stuff.
2022-05-23 08:17:40 -07:00
Kartik K. Agaram
46d4c4de10
first test!
2022-05-22 23:17:06 -07:00
Kartik K. Agaram
f1eba43ed3
yet another bugfix. But for how long?
2022-05-22 10:40:34 -07:00
Kartik K. Agaram
5b9d8337c1
up and down arrow now moving by screen line where possible
...
Drawings can't be drawn partially, which sometimes makes things jerky.
2022-05-21 23:02:08 -07:00
Kartik K. Agaram
84898ed43a
bugfix: printing the first part of a line at the bottom made it seem non-wrapping
...
Still lots wrong here.
2022-05-21 22:32:43 -07:00
Kartik K. Agaram
96dfe4f669
cleaner
2022-05-21 21:08:21 -07:00
Kartik K. Agaram
1e63bf0e0a
I feel confident now that page-down is working.
2022-05-21 20:52:44 -07:00
Kartik K. Agaram
6550a4c6d7
couple of TODOs
2022-05-21 16:42:22 -07:00
Kartik K. Agaram
c0df6f86a4
beginning of a new approach to scroll+wrap
...
So far I've just changed how existing variables are organized, and put
some scaffolding in place for dealing with the new types. Next up:
rewriting the code for scrolling to something that feels more obviously
correct.
2022-05-21 16:42:22 -07:00
Kartik K. Agaram
bb9e23a638
support for naming points
...
There's still an absence of affordance showing when you're in naming mode.
2022-05-21 14:03:06 -07:00
Kartik K. Agaram
da250585c0
disable some debug prints
...
I'm still very much in the region where this is valuable sensor data.
This is a new domain.
2022-05-20 22:46:32 -07:00
Kartik K. Agaram
0773b986dd
more precise height calculation when scrolling up as much as possible while keeping cursor on screen
2022-05-20 22:45:49 -07:00
Kartik K. Agaram
e420245ee3
keep cursor on screen when pressing 'down'
2022-05-20 22:18:39 -07:00
Kartik K. Agaram
e3dc4c330b
rename
2022-05-20 22:17:47 -07:00
Kartik K. Agaram
a3f72abbde
reduce ambitions a bit: page up/down need not start screen from the middle of a line
...
But we still have work to do for cursor up/down.
2022-05-20 21:30:59 -07:00
Kartik K. Agaram
6b91c0688e
first stab at equally hacky cursor down support
2022-05-20 20:33:30 -07:00
Kartik K. Agaram
ec5706e1ea
stop recomputing Cursor_x now that we're saving it
2022-05-20 20:32:55 -07:00
Kartik K. Agaram
e223df41bc
clearer comments
2022-05-20 20:32:00 -07:00
Kartik K. Agaram
7d9125b0b0
some more logging
...
Still lots of signs it's all messed up, but I can't be sure until I
bring all the other keyboard shortcuts in sync.
I just need a better data structure that simplifies the logic. Perhaps
talk in terms of screen lines. In which case:
We'll need to convert lines to screen lines at some point.
We'll need to fix up screen lines when inserting and deleting
characters.
2022-05-20 18:16:13 -07:00
Kartik K. Agaram
c28f6ba031
snapshot - no, that's all wrong
...
I've been only thinking about up arrow when cursor is at top of screen.
Hopefully this is better.
2022-05-20 16:56:04 -07:00
Kartik K. Agaram
ce94f8bf79
another piece of support for line wrapping in cursor up
2022-05-20 15:19:43 -07:00
Kartik K. Agaram
7e6705a113
first stab at supporting wrapping in cursor up
...
Looks pretty clean.
2022-05-20 08:55:45 -07:00
Kartik K. Agaram
1c20d514f2
bugfix
...
I'd wrapped currx in two conditionals, and not noticed that it gets
reclaimed within the other.
The hint is clearly more work than it's worth. Just take it out.
2022-05-20 08:02:03 -07:00
Kartik K. Agaram
3ec8019cc0
new globals: draw partial screen line up top
...
I'm not setting these yet. Rendering seems to be working after manually
setting them.
2022-05-20 06:58:17 -07:00
Kartik K. Agaram
1573dd8425
start using some globals
2022-05-20 06:10:04 -07:00
Kartik K. Agaram
bca0c1fab9
bugfix
2022-05-20 05:44:04 -07:00
Kartik K. Agaram
7fd3c92efe
start remembering where the cursor is drawn in px
...
We'll start using this in cursor up/down motions.
2022-05-20 05:41:25 -07:00
Kartik K. Agaram
5f2ef2faaf
extract a function
2022-05-20 05:40:42 -07:00
Kartik K. Agaram
e223182ad5
move
2022-05-19 22:58:04 -07:00
Kartik K. Agaram
d622043284
planning out cursor up/down over wrapped lines
2022-05-19 22:56:55 -07:00
Kartik K. Agaram
a7c7fd6bce
bugfix: cursor past end of screen line
2022-05-19 22:41:24 -07:00
Kartik K. Agaram
e2b371ea37
bugfix: text past cursor was rendered red on wrapped lines
2022-05-19 22:41:03 -07:00
Kartik K. Agaram
2f8d727c0b
bugfix: show cursor when past end of line
2022-05-19 22:35:26 -07:00
Kartik K. Agaram
7749e459a7
change text cursor shape
2022-05-19 22:34:28 -07:00
Kartik K. Agaram
8f85b29893
clicking to the right of a wrapped line
2022-05-19 22:26:15 -07:00
Kartik K. Agaram
d4daac442b
clicking now moves the cursor even on long, wrapped lines
2022-05-19 22:07:12 -07:00
Kartik K. Agaram
4fb4e0eb25
rename
2022-05-19 22:02:49 -07:00
Kartik K. Agaram
839d2df3ea
bugfix
...
As usual, binary search is hard to get right. This time I was never
actually selecting between left and right when they were just one
character apart.
2022-05-19 21:53:08 -07:00
Kartik K. Agaram
f7ff4dc9c2
eliminate assumptions that line length == size in bytes
2022-05-19 17:46:02 -07:00
Kartik K. Agaram
a9398e499b
snapshot: wrapping long lines at word boundaries
...
Still not working:
clicking on text to move the cursor aborts
up/down motions still move by logical lines rather than screen lines
2022-05-19 17:29:14 -07:00
Kartik K. Agaram
21f166689a
a few more integer coordinates
2022-05-19 16:35:52 -07:00
Kartik K. Agaram
76dbb4bd1e
drop unused arg
2022-05-19 08:17:34 -07:00
Kartik K. Agaram
35d14c8aff
delete another arg that can be deduced
2022-05-19 05:44:57 -07:00
Kartik K. Agaram
b63a33dd06
handle tab characters
2022-05-18 20:22:57 -07:00
Kartik K. Agaram
ec410d5223
bugfix: ensure Cursor_line is always on a text line
...
Manual test used here:
abc
```lines
{"p1":{"y":72,"x":82},"mode":"line","p2":{"y":29,"x":169}}
```
def
```lines
{"p1":{"y":36,"x":56},"mode":"line","p2":{"y":59,"x":163}}
```
```lines
```
ghi
jkl
Hitting page-down moves the cursor from abc to ghi. The 'ghi' line
should be fully visible on screen.
2022-05-18 18:19:27 -07:00
Kartik K. Agaram
f91e520124
scroll past first page
...
Still some limitations. The text cursor has to be visible on screen, so
if you have a long series of drawings without intervening lines of text
you won't be able to scroll through them all.
2022-05-18 17:42:08 -07:00
Kartik K. Agaram
92bd6839c7
split mouse_pressed events between Text and Drawing
2022-05-17 22:53:09 -07:00
Kartik K. Agaram
222a11a8dd
split keyboard handling between Text and Drawing
2022-05-17 22:43:41 -07:00
Kartik K. Agaram
476bbcdadf
beginnings of a module for the text editor
2022-05-17 20:29:08 -07:00