Commit Graph

347 Commits

Author SHA1 Message Date
Kartik K. Agaram
d2d54db1f9 fix a variable name 2022-07-11 22:01:30 -07:00
Kartik K. Agaram
3eb89adca6 add args to some functions
- Text.snap_cursor_to_bottom_of_screen
2022-07-08 16:22:11 -07:00
Kartik K. Agaram
abcc18002b add args to some functions
- Text.to_pos_on_line
2022-07-08 15:45:45 -07:00
Kartik K. Agaram
9fb8f25030 indent 2022-07-08 15:43:45 -07:00
Kartik K. Agaram
00c64ed6e4 add args to some functions
- Text.in_line
2022-07-08 15:37:09 -07:00
Kartik K. Agaram
a27dd15c1f add args to some functions
- Text.clip_selection
  - Text.cut_selection
  - Text.delete_selection
  - Text.delete_selection_without_undo
  - Text.mouse_pos
  - Text.to_pos
2022-07-08 15:30:10 -07:00
Kartik K. Agaram
e39269b19e start passing left/right margins everywhere
I have a set of changes that passes all tests, but I'm going to commit
them very carefully to ensure I don't miss any call-sites. In this
commit I'm adding the args to:
  - Text.draw
  - Text.tweak_screen_top_and_cursor

But calls within them don't yet pass them where they should. In this
manner I'm going to progress systematically from the top down.
2022-07-08 15:12:17 -07:00
Kartik K. Agaram
048b6d9d3a drop an arg from a function 2022-07-08 09:44:49 -07:00
Kartik K. Agaram
cff1e58cf6 switch arg for a function 2022-07-08 09:44:49 -07:00
Kartik K. Agaram
50a57d7ef6 stop scanning from start of file on every App.draw 2022-07-07 21:51:06 -07:00
Kartik K. Agaram
6dfe954c02 yet another bugfix in selection management
Thanks Leonard Schütz for the report!

Failing scenario:
  click to move cursor
  hit backspace

First backspace wasn't being doing anything earlier.
2022-07-07 07:39:01 -07:00
Kartik K. Agaram
dff4587219 just keep the cursor visible after any input events
This is much nicer.
2022-07-06 09:03:54 -07:00
Kartik K. Agaram
2973324ef6 show cursor immediately after a mouse click
I've been subtly finding myself waiting for the cursor to stop blinking
to see if I clicked on the right place.
2022-07-06 08:57:45 -07:00
Kartik K. Agaram
f2e5c4ffee bugfix: avoid scrolling on 'end'
There's multiple ways to do this, only one of them is right, and I keep
forgetting what it is. Turn it into a method.
2022-07-05 11:27:23 -07:00
Kartik K. Agaram
3422d92a00 bugfix: 'escape' to cancel a stroke
This has been broken since commit b544e8c357 on May 17 :/
I'm just undoing that commit, which turns out to be completely
unnecessary. And adding a test.
2022-07-05 11:06:55 -07:00
Kartik K. Agaram
3197bb5739 what should happen to selection while drawing?
First idea: just leave it alone. Let's see how this works.
2022-07-05 10:09:51 -07:00
Kartik K. Agaram
ea40a9b661 bugfix
Gracefully degrade if previously edited file shrinks.
2022-07-03 21:03:52 -07:00
Kartik K. Agaram
53c35241fb ugh, handle absolute as well as relative paths 2022-07-01 13:56:17 -07:00
Kartik K. Agaram
f311013200 include CWD when saving filename 2022-07-01 12:31:23 -07:00
Kartik K. Agaram
914d9c6f98 bugfix: clicking on empty lines 2022-07-01 12:16:43 -07:00
Kartik K. Agaram
79df3da04b enforce press/release state only processed once
bugfix scenario:
  press pageup
  click somewhere near the bottom

Before this change the selection was flickering when doing this.
2022-07-01 11:42:54 -07:00
Kartik K. Agaram
e839c3036a bugfix: manage screen_top and cursor when resizing 2022-07-01 11:01:20 -07:00
Kartik K. Agaram
37c5ab87ec bugfix: enable resize when loading settings 2022-06-30 23:02:24 -07:00
Kartik K. Agaram
429a42eb1c right margin 2022-06-30 22:54:34 -07:00
Kartik K. Agaram
da3f6c65b3 start loading settings as applicable 2022-06-30 22:46:45 -07:00
Kartik K. Agaram
b40dab67f2 start saving some settings to disk on quit
We're still not reading them anywhere.
2022-06-30 22:20:16 -07:00
Kartik K. Agaram
2025172e52 initialize screen width to something reasonable 2022-06-30 22:04:27 -07:00
Kartik K. Agaram
0cd678581b rip out geometry commandline arg
Let's try really hard to ignore the terminal.
2022-06-30 22:02:31 -07:00
Kartik K. Agaram
86cef33630 use the background color
I'd hoped this would reduce the blocks of black while resizing, but it
doesn't seem to have made a difference.
2022-06-30 21:59:17 -07:00
Kartik K. Agaram
e1a49c216e stop blanking screen while resizing 2022-06-30 21:56:21 -07:00
Kartik K. Agaram
8c7bea8f76 rip out notion of Line_width 2022-06-30 19:50:27 -07:00
Kartik K. Agaram
08a50b7fff rip out the line-width slider
New plan:
  - render text across the whole window
  - let people resize the window to the desired line width
  - save window size settings between sessions
2022-06-30 19:36:37 -07:00
Kartik K. Agaram
510b0d1dc3 bugfix: lines that aren't drawn from the start
I can't believe I didn't catch this until now. All I had to do is open
MobyDick.markdown from https://www.hogbaysoftware.com/posts/moby-dick-workout,
press page-down and click on the top screen line (or any screen line
containing the same line as the top screen line). Easy to catch with any
file containing lots of overly long lines, as happens in particular at
the start of Moby Dick.

I _had_ seen this problem before, but it seemed to disappear after
unrelated changes, and I convinced myself I'd fixed it as a side-effect.
The bug just failed to manifest if the top line happened to start at the
top of the screen. Scroll down a few pages in Moby Dick and the dialogue
starts and line length drops precipitously.
2022-06-30 18:14:48 -07:00
Kartik K. Agaram
d009390cc4 bugfix: save previous file when dropping a new one on 2022-06-29 17:58:58 -07:00
Kartik K. Agaram
9410cccb08 avoid redundant writes on exit 2022-06-29 17:36:56 -07:00
Kartik K. Agaram
938e3ca1bb when naming points, allow backspacing back to '' 2022-06-27 17:36:10 -07:00
Kartik K. Agaram
83ba9e61d1 bugfix: typing a capital letter deletes selection 2022-06-26 17:07:27 -07:00
Kartik K. Agaram
84875f3c43 bugfix: don't delete selection when moving cursor 2022-06-23 12:05:36 -07:00
Kartik K. Agaram
39913ddbb8 show the line width when dragging the slider 2022-06-22 18:00:53 -07:00
Kartik K. Agaram
8e68c699f5 bugfix: delete selection before pasting 2022-06-21 09:56:04 -07:00
Kartik K. Agaram
0d1e6aacd9 revert selection logic to before commit 3ffc2ed8f
We still have a failing test, but now it's the one we introduced in
commit 3ffc2ed8f.
2022-06-20 13:12:29 -07:00
Kartik K. Agaram
7508a70ed5 selection bugfix 2022-06-20 12:02:51 -07:00
Kartik K. Agaram
c1b6bac187 much simpler
We just need to ensure textinput events never make use of selection
state.

All tests are passing, but I'm aware of a couple of issues. But now we
can keep all the special cases in one place.
2022-06-20 11:58:26 -07:00
Kartik K. Agaram
3986e99fe0 no, that's not right
Bugfix: we want selections to persist even when we lift up the shift
key.

This requires hoisting some code inside every case inside the whole
keypress hierarchy, to ensure we never clear selections before
textinput events can handle them.

Current cross-cutting concerns we're explicitly scattering code for.
  - autosave
  - undo
  - selection management
2022-06-20 11:31:14 -07:00
Kartik K. Agaram
3be413602a bugfix: typing should delete highlighted text
The test harness now also mimics real usage more precisely.
2022-06-20 10:48:35 -07:00
Kartik K. Agaram
3ffc2ed8f3 bugfix
To reproduce:
  click to position cursor at end of a line
  hit enter
  press any key

before:
  newline got erased and key got added to previous line

now:
  newline is preserved

The new test checks a generalization of this.
2022-06-19 09:21:32 -07:00
Kartik K. Agaram
703ed905c1 bugfix: crash in Text.up() after return
Let's just make all the utf8.offset calculations more defensive.
2022-06-19 09:06:41 -07:00
Kartik K. Agaram
2a26a260bb make sure to save right when quitting
I just noticed a few characters missing from one of my notes.
2022-06-18 16:26:45 -07:00
Kartik K. Agaram
c15ee0b4a0 correct location of the line width slider 2022-06-18 00:03:19 -07:00
Kartik K. Agaram
1ecc3f43e5 drop last couple of manual tests 2022-06-17 22:24:46 -07:00
Kartik K. Agaram
efbbdfc586 affordance to adjust width for word wrap 2022-06-17 21:36:07 -07:00
Kartik K. Agaram
0fb98d2ac9 indent 2022-06-17 20:08:18 -07:00
Kartik K. Agaram
856c51212a autosave slightly less aggressively
It might reduce wear and tear on disk, and losing 3 seconds of data
doesn't feel catastrophic (short of a C-z rampage).

Thanks to the love2d.org community for the suggestion:
  https://love2d.org/forums/viewtopic.php?f=14&t=93173
2022-06-17 15:43:31 -07:00
Kartik K. Agaram
1aa2590236 test: undo naming a point
Also ensure we autosave.
2022-06-14 22:39:05 -07:00
Kartik K. Agaram
4f9789db41 test: naming a point 2022-06-14 21:07:04 -07:00
Kartik K. Agaram
0c57f6bbdc drop non-existent feature from comment 2022-06-14 14:59:51 -07:00
Kartik K. Agaram
e3c7e9c96b extract variables for drawing padding 2022-06-14 10:49:10 -07:00
Kartik K. Agaram
f277a78455 extract variable Margin_left 2022-06-14 10:49:06 -07:00
Kartik K. Agaram
c1d8201d44 mouse buttons are integers, not strings
Not sure where that idiom comes from or why strings work in some places
(auto-coercion?). I picked it up off some example apps. But
https://love2d.org/wiki/love.mouse.isDown says it should be an integer.
2022-06-14 09:05:02 -07:00
Kartik K. Agaram
b97daf7733 cleanup 2022-06-14 08:03:02 -07:00
Kartik K. Agaram
e20935ad7a bugfix
manifestation: clicking past end of a long, wrapping line containing
non-ASCII would cause the cursor to disappear rather than position past
end of screen line. Hitting enter would then throw an assertion with the
following stack trace:

  Error: text.lua:381: bad argument #2 to 'sub' (number expected, got nil)
  stack traceback:
    [love "boot.lua"]:345: in function <[love "boot.lua"]:341>
    [C]: in function 'sub'
    text.lua:381: in function 'insert_return'
    text.lua:179: in function 'keychord_pressed'
    main.lua:495: in function 'keychord_pressed'
    keychord.lua:10: in function <keychord.lua:5>
    app.lua:34: in function <app.lua:25>
    [C]: in function 'xpcall'

cause: the click caused a call to Text.to_pos_on_line whose result was
not on a UTF-8 character boundary.

fix: make to_pos_on_line utf8-aware.
2022-06-14 08:02:25 -07:00
Kartik K. Agaram
9b0577f79e bugfix: UTF-8 in compute_fragments 2022-06-14 08:01:53 -07:00
Kartik K. Agaram
059efba79d override mouse state lookups in tests
If I'd had this stuff in my test harness earlier, two recent commits
would have failed tests and given me early warning:
  ff88238ff1
  ff88a2a927
2022-06-12 09:04:21 -07:00
Kartik K. Agaram
ff88a2a927 bugfix in commit e51ce12969
Any time I press a ctrl- chord LÖVE actually sees two key chords:
  C-lctrl
  C-... (the real one)

But it's not just that. There's also a lot in the codebase that's just
habit-based. I need more tests.
2022-06-12 07:03:35 -07:00
Kartik K. Agaram
ff88238ff1 bugfix: BSOD in #4.
I messed up a function call in commit 391d764e13.
2022-06-11 20:54:17 -07:00
Kartik K. Agaram
e51ce12969 bugfix: autosave and undo in a couple of cases
This fixes part of #4, but not the BSOD.
2022-06-11 20:47:04 -07:00
Kartik K. Agaram
24a0d162ef bugfix: missed fixing a callsite 2022-06-11 20:41:51 -07:00
Kartik K. Agaram
391d764e13 stop handling nil screen_line_starting_pos everywhere
Things seem to be working..
2022-06-10 15:07:11 -07:00
Kartik K. Agaram
299890f593 more precise scroll on paste 2022-06-10 14:19:02 -07:00
Kartik K. Agaram
feedc51227 faster paste
We don't need to perform the scroll calculations after inserting every
single character from the clipboard.
2022-06-10 14:19:02 -07:00
Kartik K. Agaram
41521518a3 revert previous commit 2022-06-10 13:59:39 -07:00
Kartik K. Agaram
019a3b48f1 experiment: extremely precise scrolling on paste
But this is too slow.
2022-06-10 13:59:15 -07:00
Kartik K. Agaram
88209ec343 while we're at it, undo naming points 2022-06-10 13:45:50 -07:00
Kartik K. Agaram
c875f7be46 stop saving the entire file when modifying drawings
Now we just disallow that entirely.
2022-06-10 11:48:32 -07:00
Kartik K. Agaram
79a1241370 undo creating new drawings 2022-06-10 11:45:53 -07:00
Kartik K. Agaram
fcacb6e63d extract scrolling logic out of insert_at_cursor 2022-06-10 11:29:01 -07:00
Kartik K. Agaram
31418976d4 extract scrolling logic out of insert_return 2022-06-10 11:21:41 -07:00
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