diff options
-rw-r--r-- | src/Document.cxx | 4 | ||||
-rw-r--r-- | src/Document.h | 1 | ||||
-rw-r--r-- | src/ScintillaBase.cxx | 18 | ||||
-rw-r--r-- | src/ScintillaBase.h | 2 |
4 files changed, 15 insertions, 10 deletions
diff --git a/src/Document.cxx b/src/Document.cxx index ada7f4436..10c8e9ce5 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -1336,6 +1336,10 @@ Sci::Position Document::InsertString(Sci::Position position, const char *s, Sci: return insertLength; } +Sci::Position Document::InsertString(Sci::Position position, std::string_view sv) { + return InsertString(position, sv.data(), sv.length()); +} + void Document::ChangeInsertion(const char *s, Sci::Position length) { insertionSet = true; insertion.assign(s, length); diff --git a/src/Document.h b/src/Document.h index 114316d37..1cda253e1 100644 --- a/src/Document.h +++ b/src/Document.h @@ -360,6 +360,7 @@ public: void CheckReadOnly(); bool DeleteChars(Sci::Position pos, Sci::Position len); Sci::Position InsertString(Sci::Position position, const char *s, Sci::Position insertLength); + Sci::Position InsertString(Sci::Position position, std::string_view sv); void ChangeInsertion(const char *s, Sci::Position length); int SCI_METHOD AddData(const char *data, Sci_Position length) override; void * SCI_METHOD ConvertToDocument() override; diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index e72f1b1d6..d47d289dd 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -211,11 +211,11 @@ void ScintillaBase::ListNotify(ListBoxEvent *plbe) { } } -void ScintillaBase::AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, const char *text, Sci::Position textLen) { +void ScintillaBase::AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, std::string_view text) { UndoGroup ug(pdoc); if (multiAutoCMode == MultiAutoComplete::Once) { pdoc->DeleteChars(startPos, removeLen); - const Sci::Position lengthInserted = pdoc->InsertString(startPos, text, textLen); + const Sci::Position lengthInserted = pdoc->InsertString(startPos, text); SetEmptySelection(startPos + lengthInserted); } else { // MultiAutoComplete::Each @@ -228,7 +228,7 @@ void ScintillaBase::AutoCompleteInsert(Sci::Position startPos, Sci::Position rem positionInsert -= removeLen; pdoc->DeleteChars(positionInsert, removeLen); } - const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text, textLen); + const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text); if (lengthInserted > 0) { sel.Range(r).caret.SetPosition(positionInsert + lengthInserted); sel.Range(r).anchor.SetPosition(positionInsert + lengthInserted); @@ -245,14 +245,14 @@ void ScintillaBase::AutoCompleteStart(Sci::Position lenEntered, const char *list if (ac.chooseSingle && (listType == 0)) { if (list && !strchr(list, ac.GetSeparator())) { - const char *typeSep = strchr(list, ac.GetTypesep()); - const Sci::Position lenInsert = typeSep ? - (typeSep-list) : strlen(list); + // list contains just one item so choose it + const std::string_view item(list); + const std::string_view choice = item.substr(0, item.find_first_of(ac.GetTypesep())); if (ac.ignoreCase) { // May need to convert the case before invocation, so remove lenEntered characters - AutoCompleteInsert(sel.MainCaret() - lenEntered, lenEntered, list, lenInsert); + AutoCompleteInsert(sel.MainCaret() - lenEntered, lenEntered, choice); } else { - AutoCompleteInsert(sel.MainCaret(), 0, list + lenEntered, lenInsert - lenEntered); + AutoCompleteInsert(sel.MainCaret(), 0, choice.substr(lenEntered)); } ac.Cancel(); return; @@ -430,7 +430,7 @@ void ScintillaBase::AutoCompleteCompleted(char ch, CompletionMethods completionM endPos = pdoc->ExtendWordSelect(endPos, 1, true); if (endPos < firstPos) return; - AutoCompleteInsert(firstPos, endPos - firstPos, selected.c_str(), selected.length()); + AutoCompleteInsert(firstPos, endPos - firstPos, selected); SetLastXChosen(); scn.nmhdr.code = Notification::AutoCCompleted; diff --git a/src/ScintillaBase.h b/src/ScintillaBase.h index 3cfad8684..820f88daa 100644 --- a/src/ScintillaBase.h +++ b/src/ScintillaBase.h @@ -57,7 +57,7 @@ protected: void CancelModes() override; int KeyCommand(Scintilla::Message iMessage) override; - void AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, const char *text, Sci::Position textLen); + void AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, std::string_view text); void AutoCompleteStart(Sci::Position lenEntered, const char *list); void AutoCompleteCancel(); void AutoCompleteMove(int delta); |