aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/scintilla.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/scintilla.patch')
-rw-r--r--src/scintilla.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/scintilla.patch b/src/scintilla.patch
index 3b30a825..837923da 100644
--- a/src/scintilla.patch
+++ b/src/scintilla.patch
@@ -18,3 +18,87 @@ diff -r 5693714a8b0b src/Catalogue.cxx
return 1;
}
+diff -r a4286bbf7081 include/Scintilla.h
+--- a/include/Scintilla.h Thu May 22 09:18:18 2014 +1000
++++ b/include/Scintilla.h Sun May 25 17:30:19 2014 -0400
+@@ -717,6 +717,10 @@
+ #define SC_CASEINSENSITIVEBEHAVIOUR_IGNORECASE 1
+ #define SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR 2634
+ #define SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR 2635
++#define SC_MULTIAUTOC_ONCE 0
++#define SC_MULTIAUTOC_EACH 1
++#define SCI_AUTOCSETMULTI 2636
++#define SCI_AUTOCGETMULTI 2637
+ #define SC_ORDER_PRESORTED 0
+ #define SC_ORDER_PERFORMSORT 1
+ #define SC_ORDER_CUSTOM 2
+diff -r a4286bbf7081 src/ScintillaBase.cxx
+--- a/src/ScintillaBase.cxx Thu May 22 09:18:18 2014 +1000
++++ b/src/ScintillaBase.cxx Sun May 25 17:30:19 2014 -0400
+@@ -57,6 +57,7 @@
+ displayPopupMenu = true;
+ listType = 0;
+ maxListWidth = 0;
++ multiAutoCMode = SC_MULTIAUTOC_ONCE;
+ }
+
+ ScintillaBase::~ScintillaBase() {
+@@ -197,9 +198,30 @@
+
+ void ScintillaBase::AutoCompleteInsert(Position startPos, int removeLen, const char *text, int textLen) {
+ UndoGroup ug(pdoc);
+- pdoc->DeleteChars(startPos, removeLen);
+- const int lengthInserted = pdoc->InsertString(startPos, text, textLen);
+- SetEmptySelection(startPos + lengthInserted);
++ if (multiAutoCMode == SC_MULTIAUTOC_ONCE) {
++ pdoc->DeleteChars(startPos, removeLen);
++ const int lengthInserted = pdoc->InsertString(startPos, text, textLen);
++ SetEmptySelection(startPos + lengthInserted);
++ } else {
++ // SC_MULTIAUTOC_EACH
++ for (size_t r=0; r<sel.Count(); r++) {
++ if (!RangeContainsProtected(sel.Range(r).Start().Position(),
++ sel.Range(r).End().Position())) {
++ int positionInsert = sel.Range(r).Start().Position();
++ positionInsert = InsertSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
++ if (positionInsert - removeLen >= 0) {
++ positionInsert -= removeLen;
++ pdoc->DeleteChars(positionInsert, removeLen);
++ }
++ const int lengthInserted = pdoc->InsertString(positionInsert, text, textLen);
++ if (lengthInserted > 0) {
++ sel.Range(r).caret.SetPosition(positionInsert + lengthInserted);
++ sel.Range(r).anchor.SetPosition(positionInsert + lengthInserted);
++ }
++ sel.Range(r).ClearVirtualSpace();
++ }
++ }
++ }
+ }
+
+ void ScintillaBase::AutoCompleteStart(int lenEntered, const char *list) {
+@@ -819,6 +841,13 @@
+ case SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR:
+ return ac.ignoreCaseBehaviour;
+
++ case SCI_AUTOCSETMULTI:
++ multiAutoCMode = static_cast<int>(wParam);
++ break;
++
++ case SCI_AUTOCGETMULTI:
++ return multiAutoCMode;
++
+ case SCI_AUTOCSETORDER:
+ ac.autoSort = static_cast<int>(wParam);
+ break;
+diff -r a4286bbf7081 src/ScintillaBase.h
+--- a/src/ScintillaBase.h Thu May 22 09:18:18 2014 +1000
++++ b/src/ScintillaBase.h Sun May 25 17:30:19 2014 -0400
+@@ -46,6 +46,7 @@
+
+ int listType; ///< 0 is an autocomplete list
+ int maxListWidth; /// Maximum width of list, in average character widths
++ int multiAutoCMode; /// Mode for autocompleting when multiple selections are present
+
+ #ifdef SCI_LEXER
+ LexState *DocumentLexState();