diff options
-rw-r--r-- | include/Scintilla.h | 3 | ||||
-rw-r--r-- | include/Scintilla.iface | 11 | ||||
-rw-r--r-- | src/Editor.cxx | 34 | ||||
-rw-r--r-- | src/Editor.h | 2 |
4 files changed, 46 insertions, 4 deletions
diff --git a/include/Scintilla.h b/include/Scintilla.h index cc9eeb593..fa1003ab4 100644 --- a/include/Scintilla.h +++ b/include/Scintilla.h @@ -277,6 +277,9 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, #define SCI_GETOVERTYPE 2187 #define SCI_SETCARETWIDTH 2188 #define SCI_GETCARETWIDTH 2189 +#define SCI_SETTARGETSTART 2190 +#define SCI_SETTARGETEND 2191 +#define SCI_REPLACETARGET 2192 #define SCI_CALLTIPSHOW 2200 #define SCI_CALLTIPCANCEL 2201 #define SCI_CALLTIPACTIVE 2202 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index cb524f185..8fdbdedcc 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -708,6 +708,17 @@ set void SetCaretWidth=2188(int pixelWidth,) # Returns the width of the insert mode caret get int GetCaretWidth=2189(,) +# Sets the position that starts the target which is used for updating the +# document without affecting the scroll position. +set void SetTargetStart=2190(position pos,) + +# Sets the position that ends the target which is used for updating the +# document without affecting the scroll position. +set void SetTargetEnd=2191(position pos,) + +# Replace the target text with the argument text. +fun void ReplaceTarget=2192(, string text) + # Show a call tip containing a definition near position pos. fun void CallTipShow=2200(position pos, string definition) diff --git a/src/Editor.cxx b/src/Editor.cxx index 479157e39..9f65203d2 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -92,6 +92,9 @@ Editor::Editor() { currentPos = 0; anchor = 0; + targetStart = 0; + targetEnd = 0; + topLine = 0; posTopLine = 0; @@ -1570,7 +1573,7 @@ void Editor::AddCharUTF(char *s, unsigned int len) { void Editor::ClearSelection() { if (selType == selRectangle) { - pdoc->BeginUndoAction(); + pdoc->BeginUndoAction(); int lineStart = pdoc->LineFromPosition(SelectionStart()); int lineEnd = pdoc->LineFromPosition(SelectionEnd()); int startPos = SelectionStart(); @@ -1582,16 +1585,16 @@ void Editor::ClearSelection() { } } SetEmptySelection(startPos); - pdoc->EndUndoAction(); + pdoc->EndUndoAction(); selType = selStream; } else { int startPos = SelectionStart(); unsigned int chars = SelectionEnd() - startPos; SetEmptySelection(startPos); if (0 != chars) { - pdoc->BeginUndoAction(); + pdoc->BeginUndoAction(); pdoc->DeleteChars(startPos, chars); - pdoc->EndUndoAction(); + pdoc->EndUndoAction(); } } } @@ -3555,6 +3558,29 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { } break; + case SCI_SETTARGETSTART: + targetStart = wParam; + break; + + case SCI_SETTARGETEND: + targetEnd = wParam; + break; + + case SCI_REPLACETARGET: { + if (lParam == 0) + return 0; + pdoc->BeginUndoAction(); + unsigned int chars = targetEnd - targetStart; + if (targetStart != targetEnd) + pdoc->DeleteChars(targetStart, chars); + targetEnd = targetStart; + char *replacement = reinterpret_cast<char *>(lParam); + pdoc->InsertString(targetStart, replacement); + targetEnd = targetStart + strlen(replacement); + pdoc->EndUndoAction(); + } + break; + case EM_LINESCROLL: case SCI_LINESCROLL: ScrollTo(topLine + lParam); diff --git a/src/Editor.h b/src/Editor.h index cf3996ffa..e82496663 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -116,6 +116,8 @@ protected: // ScintillaBase subclass needs access to much of Editor int originalAnchorPos; int currentPos; int anchor; + int targetStart; + int targetEnd; int topLine; int posTopLine; |