Commit Graph

220 Commits

Author SHA1 Message Date
Kartik K. Agaram
69c5d844cc remove some memory leaks from rendered fragments
All signs so far seem to be that CPU is cheap for this application, but
memory is expensive. It's easy to get sluggish if the GC comes on.

After some experiments using https://github.com/yaukeywang/LuaMemorySnapshotDump,
one source of memory leaks is rendered fragments (https://love2d.org/wiki/Text
objects). I need to render text in approximately word-sized fragments to
mostly break lines more intelligently at word boundaries.

I've attached the files I used for my experiments (suffixed with a '.')

There's definitely still a leak in fragments. The longer I edit, the
more memory goes to them.
2022-06-10 11:16:41 -07:00
Kartik K. Agaram
6ba10b4de6 fix a corner case when selecting text
The hard part here is keeping click-drag selection working (without
pressing and holding shift).
2022-06-09 15:49:16 -07:00
Kartik K. Agaram
8f823bf430 . 2022-06-09 15:22:21 -07:00
Kartik K. Agaram
fe170fc579 experiment: blinking cursor
I've tried to keep the time period of the blinking similar to my
terminal.

Honestly I'm no longer sure if any of my experiments are showing a
statistically significant result. Let's see how it feels over a period
of time.
2022-06-09 13:47:41 -07:00
Kartik K. Agaram
712dc95985 experiment: turn off JIT
This seems to speed up copy! What does it slow down?
2022-06-09 08:15:32 -07:00
Kartik K. Agaram
ac4879bb85 more defensive resize handling
Thanks John Blommers for the report!
2022-06-07 21:55:48 -07:00
Kartik K. Agaram
ff08bbe7f4 first commandline arg: window dimensions
Hopefully there won't be too many others.
2022-06-07 14:11:09 -07:00
Kartik K. Agaram
6b628781d1 use app name in window title 2022-06-07 13:59:26 -07:00
Kartik K. Agaram
faee5f9047 warn on unused commandline args 2022-06-07 13:35:56 -07:00
Kartik K. Agaram
0337d75933 obsolete comment 2022-06-07 13:35:22 -07:00
Kartik K. Agaram
4c0095ea46 extract a function 2022-06-07 13:24:43 -07:00
Kartik K. Agaram
33ea91f8d9 allow the window to be resized
This still isn't ideal. On my Linux laptop for some reason the window
receives a signal to maximize itself soon after (but sometime after) the
program starts.
2022-06-07 13:19:17 -07:00
Kartik K. Agaram
612e08571f autosave on cut/paste 2022-06-05 12:55:36 -07:00
Kartik K. Agaram
a70d7ba8bc . 2022-06-05 10:30:23 -07:00
Kartik K. Agaram
9cafed99f4 another bugfix in scrolling while inserting text
I'm being unprincipled at the moment between pos and x,y coordinates.
Whatever is more convenient. Perhaps a cleaner approach will come to me
over time.
2022-06-05 10:08:28 -07:00
Kartik K. Agaram
5055361209 rename 2022-06-05 08:11:50 -07:00
Kartik K. Agaram
3f07ac51d2 some unnecessary mutations
Why are we not modifying Screen_top1.pos in these places? Because we
don't really need to modify Screen_top1 at all.
2022-06-05 08:11:33 -07:00
Kartik K. Agaram
4c5ac9ae5e regression: couldn't do many drawing operations because line.y was reset 2022-06-04 20:52:36 -07:00
Kartik K. Agaram
9ee5d1c913 try to maintain a reasonable line width 2022-06-04 20:10:56 -07:00
Kartik K. Agaram
557b91a5de . 2022-06-04 19:38:20 -07:00
Kartik K. Agaram
1326914d7b select text with shift + mouseclick
It's still a bit simple-minded. Most software will keep the first bound
fixed and move the second. Lines currently has the bounds in a queue of
sorts. But I have a test to indicate the behavior that is definitely
desired. We'll see if we need it to get more complex.
2022-06-04 14:54:40 -07:00
Kartik K. Agaram
06e6ecdf8f bugfix: restore state after C-f (find) 2022-06-03 13:59:40 -07:00
Kartik K. Agaram
b69801bdf1 highlight selection while dragging
Mouse stuff is pretty strenuous. For the first time I have to be careful
not to recompute too often. And I ran into a race condition for the
first time where resetting line.y within App.draw meant mouse clicks
were extremely unlikely to see line.y set.
2022-06-03 13:22:03 -07:00
Kartik K. Agaram
73cc12047e select text using mouse drag
Doesn't yet highlight while dragging.
2022-06-03 08:11:18 -07:00
Kartik K. Agaram
9efeae1f82 rename 2022-06-03 08:01:21 -07:00
Kartik K. Agaram
7301f3964c up arrow to search previous 2022-06-03 07:48:41 -07:00
Kartik K. Agaram
8047ab9b89 switch copy/paste to ctrl- hotkeys 2022-06-02 23:52:26 -07:00
Kartik K. Agaram
dcdcd07902 switch undo/redo to ctrl- hotkeys 2022-06-02 23:48:35 -07:00
Kartik K. Agaram
1fc4214029 default font size and line-height 2022-06-02 23:44:34 -07:00
Kartik K. Agaram
0b63721bb0 extract a new variable 2022-06-02 23:40:20 -07:00
Kartik K. Agaram
9bbfc2be13 crisp font rendering 2022-06-02 23:36:07 -07:00
Kartik K. Agaram
b94b007db5 find text 2022-06-02 22:53:34 -07:00
Kartik K. Agaram
9121a263a6 . 2022-06-02 19:08:06 -07:00
Kartik K. Agaram
22817492a3 rename 2022-06-02 16:44:18 -07:00
Kartik K. Agaram
b4e76eac4e bugfix: undo drawing creation
Also clean up drawing state to make sure we don't get into hard-to-debug
situations.
2022-06-02 15:51:44 -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
5b95e51c36 . 2022-05-29 16:34:36 -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
2b69b71c7a update some documentation 2022-05-29 07:56:55 -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
229e1514f2 . 2022-05-27 23:35:01 -07:00
Kartik K. Agaram
815c4f010a assert for a bug I saw a while ago but can no longer reproduce
I saw screen_top not at start of screen line, but at cursor location in
middle of line.
2022-05-25 15:00:13 -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
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
6b10c94dd5 disable all debug prints 2022-05-23 15:38:42 -07:00
Kartik K. Agaram
254ae7ad99 . 2022-05-23 13:18:34 -07:00
Kartik K. Agaram
e0b2c2dede couple of tests for cursor down 2022-05-23 10:56:39 -07:00