let's prevent the text cursor from ever getting on a drawing

[?]
May 18, 2022, 2:15 AM
BJ5X5O4ACBBJ56LRBBSTCW6IBQP4HAEOOOPNH3SKTA4F66YTOIDAC

Dependencies

  • [2] PWHZPJJM always show current filename in window title
  • [3] 2INHXC3K position cursor by clicking on text
  • [4] 62ST7SV3 bugfix typo
  • [5] OTIBCAUJ love2d scaffold
  • [6] VVXVV2D2 change data model; text can now have metadata
  • [7] 7Q4B6M2D esc to cancel a shape mid-click
  • [8] RJGZD4IN binary search to most natural up/down with proportional fonts
  • [9] 6PUNJS5B backspace
  • [10] UTF73CBL reorg
  • [11] GVOFXXIT delete drawing using backspace
  • [12] IYW7X3WL left/right cursor movement, deleting characters
  • [13] 3CS5KKCI up/down cursor movement
  • [14] 3D5RFWHV stop handling drawings in cursor_pos computations
  • [15] 6LJZN727 handle chords
  • [*] R5QXEHUI somebody stop me
  • [*] QCQHLMST always have a filename
  • [*] 5T2E3PDV couple of bugfixes to file-handling
  • [*] XX7G2FFJ intermingle freehand line drawings with text

Change contents

  • file addition: manual_tests (----------)
    [17.2]
    file load:
    cursor_line = 1
    first line is a drawing -> cursor_line = 2
    create drawing -> cursor bumps down below drawing
    backspace
    cursor_pos == 0, previous line is a drawing -> delete drawing, cursor still visible at start of line
    cursor_pos == 0, previous line is text -> join lines, cursor still at same character
  • edit in main.lua at line 75
    [18.60]
    [2.44]
    for i,line in ipairs(lines) do
    if line.mode == 'text' then
    cursor_line = i
    end
    end
  • edit in main.lua at line 88
    [19.16]
    [2.100]
    for i,line in ipairs(lines) do
    if line.mode == 'text' then
    cursor_line = i
    end
    end
  • edit in main.lua at line 110
    [5.428]
    [20.588]
    if cursor_line >= i then
    cursor_line = cursor_line+1
    end
  • replacement in main.lua at line 531
    [5.66][5.1146:1377]()
    if cursor_line > 1 and lines[cursor_line].data == '' then
    table.remove(lines, cursor_line)
    cursor_line = cursor_line-1
    if lines[cursor_line].mode == 'text' then
    cursor_pos = #lines[cursor_line].data+1
    [5.66]
    [5.1377]
    if cursor_pos > 1 then
    local byte_start = utf8.offset(lines[cursor_line].data, cursor_pos-1)
    local byte_end = utf8.offset(lines[cursor_line].data, cursor_pos)
    if byte_start then
    if byte_end then
    lines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byte_start-1)..string.sub(lines[cursor_line].data, byte_end)
    else
    lines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byte_start-1)
    end
    cursor_pos = cursor_pos-1
    end
    elseif cursor_line > 1 then
    if lines[cursor_line-1].mode == 'drawing' then
    table.remove(lines, cursor_line-1)
  • replacement in main.lua at line 546
    [5.1388][5.1388:1411]()
    cursor_pos = 1
    [5.1388]
    [5.1411]
    -- join lines
    cursor_pos = utf8.len(lines[cursor_line-1].data)+1
    lines[cursor_line-1].data = lines[cursor_line-1].data..lines[cursor_line].data
    table.remove(lines, cursor_line)
  • edit in main.lua at line 551
    [5.1421][5.1421:1537]()
    elseif lines[cursor_line].mode == 'drawing' then
    table.remove(lines, cursor_line) -- we'll add undo soon
  • edit in main.lua at line 552
    [5.1571][5.1571:1711](),[5.99][5.139:148](),[5.1711][5.139:148](),[5.139][5.139:148](),[5.148][5.776:805](),[5.805][5.1712:1864](),[5.1864][5.947:1001](),[5.947][5.947:1001](),[5.1001][5.1865:2003](),[5.2003][5.1124:1139](),[5.1124][5.1124:1139](),[5.1139][5.2004:2095](),[5.2095][5.1220:1292](),[5.1220][5.1220:1292]()
    if lines[cursor_line].mode == 'text' then
    cursor_pos = #lines[cursor_line].data+1
    else
    cursor_pos = 1
    end
    else
    if cursor_pos > 1 then
    local byte_start = utf8.offset(lines[cursor_line].data, cursor_pos-1)
    local byte_end = utf8.offset(lines[cursor_line].data, cursor_pos)
    if byte_start then
    if byte_end then
    lines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byte_start-1)..string.sub(lines[cursor_line].data, byte_end)
    else
    lines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byte_start-1)
    end
    cursor_pos = cursor_pos-1
    end
    end
  • replacement in main.lua at line 580
    [5.553][5.553:581](),[5.581][3.438:526](),[3.526][5.49:153](),[5.49][5.49:153]()
    if cursor_line > 1 then
    if lines[cursor_line].mode == 'text' and lines[cursor_line-1].mode == 'text' then
    local old_x = cursor_x(lines[cursor_line].data, cursor_pos)
    cursor_line = cursor_line-1
    [5.553]
    [5.153]
    assert(lines[cursor_line].mode == 'text')
    local new_cursor_line = cursor_line
    while new_cursor_line > 1 do
    new_cursor_line = new_cursor_line-1
    if lines[new_cursor_line].mode == 'text' then
    local old_x = cursor_x(lines[new_cursor_line].data, cursor_pos)
    cursor_line = new_cursor_line
  • replacement in main.lua at line 588
    [5.237][5.237:248](),[5.248][4.1:37]()
    else
    cursor_line = cursor_line-1
    [5.237]
    [5.284]
    break
  • replacement in main.lua at line 592
    [5.746][5.746:779](),[5.779][3.527:615](),[3.615][5.343:447](),[5.343][5.343:447]()
    if cursor_line < #lines then
    if lines[cursor_line].mode == 'text' and lines[cursor_line+1].mode == 'text' then
    local old_x = cursor_x(lines[cursor_line].data, cursor_pos)
    cursor_line = cursor_line+1
    [5.746]
    [5.447]
    assert(lines[cursor_line].mode == 'text')
    local new_cursor_line = cursor_line
    while new_cursor_line < #lines do
    new_cursor_line = new_cursor_line+1
    if lines[new_cursor_line].mode == 'text' then
    local old_x = cursor_x(lines[new_cursor_line].data, cursor_pos)
    cursor_line = new_cursor_line
  • replacement in main.lua at line 600
    [5.531][5.531:578]()
    else
    cursor_line = cursor_line+1
    [5.531]
    [5.578]
    break