From: NeilBrown Date: Tue, 8 Aug 2023 23:17:13 +0000 (+1000) Subject: render-lines: don't look for point in line where it isn't. X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=5497755e6e361c48f12d27ca7c4c771757b7420c;p=edlib.git render-lines: don't look for point in line where it isn't. call_render_line_to_point() doesn't return an error, so calling it when point isn't on the line isn't well defined. So don't do it. This changes the number of blank lines after end-of-file, which I think I am happy with, so self-tests change. Signed-off-by: NeilBrown --- diff --git a/DOC/TODO.md b/DOC/TODO.md index 25fd6cbb..346ab4bd 100644 --- a/DOC/TODO.md +++ b/DOC/TODO.md @@ -9,10 +9,12 @@ the file. ### Triage +- [ ] find a better wat to handle "case when EOF is at the end" of + a non-empty line. - [X] call, not caLl in server.py - [X] lib-server received unexpected notification Close - [ ] should pane ->cx,cy be a struct xy?? -- [ ] revalidate_start shouldn't find cursor on line where it is known +- [X] revalidate_start shouldn't find cursor on line where it is known not to be - [ ] call_render_line_to_point() never returns negative - why do we check? - [ ] should pane_resize() report if any change happened? diff --git a/render-lines.c b/render-lines.c index 9ab3266b..1f65d00f 100644 --- a/render-lines.c +++ b/render-lines.c @@ -1148,7 +1148,8 @@ static int revalidate_start(struct rl_data *rl safe, /* Cannot make more margin space */ on_screen = True; } - } else if (pm && y >= p->h && m->seq < pm->seq) { + } else if (pm && m2 && y >= p->h && m->seq < pm->seq && + mark_ordered_not_same(pm, m2)) { /* point might be in this line, but off end * of the screen */ @@ -1167,7 +1168,12 @@ static int revalidate_start(struct rl_data *rl safe, } } } else if (pm && mark_ordered_or_same(m, pm) && m2 && - mark_ordered_or_same(pm, m2)) { + (mark_ordered_not_same(pm, m2) || + (mark_same(pm, m2) && !is_eol(doc_prior(focus,m2)))) + ) { + /* Above doc_prior handles case when EOF is at the end + * of a non-empty line. + */ if (rl->margin == 0) on_screen = True; else { diff --git a/tests.d/00-basic b/tests.d/00-basic index 8e5501d5..32da2b5a 100644 --- a/tests.d/00-basic +++ b/tests.d/00-basic @@ -20,13 +20,13 @@ Display 80,30 EC7DED6582A632077A366C3D1F1A2F9B 1,25 Key ":Enter" Display 80,30 E8DCC68C9F90AC7FD5E8A5010CFBD8E9 1,26 Key ":Backspace" -Display 80,30 D656E0ACDFE1951CCA27D8BE9091FD3C 1,25 +Display 80,30 0A5475D19D5C4C6C96B61C72805C2ED8 1,26 Key ":C-_" Display 80,30 E8DCC68C9F90AC7FD5E8A5010CFBD8E9 1,26 Key ":C-_" -Display 80,30 EC7DED6582A632077A366C3D1F1A2F9B 1,25 +Display 80,30 96FEA00E8277BE1C441E14D8872241B2 1,26 Key ":C-X" -Display 80,30 715E233203438550E2B970240D7A6186 1,25 +Display 80,30 AE83375F702EEAFB20AEC86E9C393B69 1,26 Key ":C-V" Display 80,30 453755D55FC0151ED0852A2467A28FF4 1,0 Key ":C-N" @@ -603,4 +603,4 @@ Key ":C-X" Display 80,30 84F4B35BF26F9D5EEBB67D572ADD0BBF 1,0 Key ":C-C" Display 80,30 D2E6DB1DE1E62B191C28D1B2CFF7F1C0 1,0 -Close 1577 +Close 1579 diff --git a/tests.d/01-redraw b/tests.d/01-redraw index 7140d5a5..58d1cd5c 100644 --- a/tests.d/01-redraw +++ b/tests.d/01-redraw @@ -18,11 +18,11 @@ Display 80,30 453755D55FC0151ED0852A2467A28FF4 1,0 Key ":A->" Display 80,30 EC7DED6582A632077A366C3D1F1A2F9B 1,25 Key ":Backspace" -Display 80,30 B705B791B88A97C9122E3EBCA27D0A4D 1,24 +Display 80,30 E51181F73378769AB85755E7E5D8347B 1,26 Key ":Backspace" -Display 80,30 B8D1F5A047D0CDF73A424D0E9ECDF7E6 1,23 +Display 80,30 A584CC6741CD50643F40F2346A126F6A 1,26 Key ":Backspace" -Display 80,30 83A99E8EF1C858E6C3F579BA718D51BA 58,22 +Display 80,30 DD3456DA944C7DDE0A5501D007C9BB8A 58,25 Key ":C-L" Display 80,30 DD3456DA944C7DDE0A5501D007C9BB8A 58,25 Key ":C-L" @@ -30,15 +30,15 @@ Display 80,30 E57C7503FBBA9926BA14E11A2A1DA809 58,0 Key ":A->" Display 80,30 4E53CBF083420A0A8694E4FFDA3B37D9 58,0 Key ":Enter" -Display 80,30 87488D88DC0E9290B39491C36B2A3102 1,1 +Display 80,30 A584CC6741CD50643F40F2346A126F6A 1,26 Key ":C-U" -Display 80,30 0FECC1058FFD056D9BACBCC5B317281A 1,1 +Display 80,30 2163A0D46C0DC955DAECA5C731097088 1,26 Key ":C-X" -Display 80,30 2F49E1FB67BC2A2DDC2CA32459BB574B 1,1 +Display 80,30 A3990F4AB31ED410CECCFF2D8D31E623 1,26 Key "-k" Display 80,30 CDBBFFABF0534E6F4508C0F00F8F75E0 1,8 Key ":C-X" Display 80,30 D9F43AF47815B46A3E90E0795A30B979 1,8 Key ":C-C" Display 80,30 CDBBFFABF0534E6F4508C0F00F8F75E0 1,8 -Close 185 +Close 210 diff --git a/tests.d/02-spell b/tests.d/02-spell index 495d8f31..00097c44 100644 --- a/tests.d/02-spell +++ b/tests.d/02-spell @@ -170,18 +170,13 @@ Display 80,30 D490A1144DD9D917A42AC864D0CE04BC 26,12 Display 80,30 E75396ECA8F04A0D4C74BA188CCD7379 26,12 Key ":A->" Display 80,30 475FC8D17E738BC421E226D2750645F1 1,25 -Display 80,30 90F5A60537498C9D6EB4BAE8A3D7BF85 1,25 -Display 80,30 4ADAA33B03C11382D5E500A5307BD81E 1,25 -Display 80,30 C2541DE509A02E7015A3EA1FA7EC287C 1,25 -Display 80,30 536098D3992A6E91B12DADF77059EE71 1,25 -Display 80,30 8536F6A5E7EB5822806F02815E882D88 1,25 -Display 80,30 B9BE77ED1BAE831D4F2911B667AD99FD 1,25 +Display 80,30 F61808ACA774E504E59348DDF8BBB755 1,26 Key ":A-3" -Display 80,30 92D009B2C37F6337D74B4BDFE20C8336 1,25 +Display 80,30 D404E447DED8F584462321714C25B13F 1,26 Key ":A-0" -Display 80,30 1238AB2508E8842C891F435B407462B5 1,25 +Display 80,30 36B0C9F47F36CB22ADB10DE9C476680A 1,26 Key ":A-0" -Display 80,30 83B553720D52E241B43F786EFDB2F5F4 1,25 +Display 80,30 A12F3E091B7703E4D117C5A11A88B92F 1,26 Key ":C-P" Display 80,30 2DD263F735F29160D0346F2ED8D4FCB7 1,0 Display 80,30 BC804E64A4CE8F7B1A1DB6683F9EF68C 1,0 @@ -231,4 +226,4 @@ Key ":C-X" Display 80,30 4EEC8A848EC8816669FCC7D1F8E9717F 59,24 Key ":C-C" Display 80,30 D36C7F5A8DC1106D46597F3545834A58 59,24 -Close 606 +Close 591