Committed clarification of LineEnd and test with [1f9298]. Commited simplification of SCI_LINELENGTH with [c51771].
Adding a virtualSpace auxiliary here doesn't appears to me to be a net improvement. The Editor::Clear change is better since it removes a conditional and extra statement so committed with [e5cd72]. Added tests for both DelCharBack and Clear to ensure APIs remain stable.
SCI_VERTICALCENTRECARET doesn't clamp topLine to MaxScrollPos()
Committed with [fce5e5].
Add API `SCI_FINDCOLUMN(line line, position column, int tabWidth) → position`
The messaging API can only take 2 parameters. Structs are avoided to ensure binary compatibility (there have been many issues with existing use of structs) and ease calling from scripting languages. Applications can implement their own features based on currently available APIs.
Adding test. --- a/test/simpleTests.py Wed Sep 16 13:57:28 2026 +1000 +++ b/test/simpleTests.py Mon Sep 21 11:56:16 2026 +1000 @@ -2106,6 +2106,15 @@ self.assertEqual(self.ed.GetSelectionNStartVirtualSpace(0), 0) self.assertEqual(self.ed.GetSelectionNEndVirtualSpace(0), 3) + def testDelCharVirtualSpace(self): + # Feature 1589 Empty virtual selection + self.ed.SetSelection(3, 3) + self.ed.SetSelectionNCaretVirtualSpace(0, 2) + self.ed.SetSelectionNAnchorVirtualSpace(0, 2) + self.assertEqual(self.ed.GetSelectionSerialized(),...
Changing the non-ASCII condition and reinstating the LF test allows using a LineStart(line+1) cap with, what appears to me reasonable results. Sci::Position Document::FindColumn(Sci::Line line, Sci::Position column) const noexcept { Sci::Position position = LineStart(line); const Sci::Position endPos = cb.LineStart(line + 1); Sci::Position columnCurrent = 0; while ((columnCurrent < column) && (position < endPos)) { const char ch = cb.CharAt(position); if (ch == '\t') { columnCurrent = NextTab(columnCurrent,...