diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini
index 39b7e72a4..a7bcb4053 100644
Binary files a/Build/Notepad3.ini and b/Build/Notepad3.ini differ
diff --git a/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini b/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini
index 66b8a508b..a7bcb4053 100644
Binary files a/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini and b/np3portableapp/Notepad3Portable/App/DefaultData/settings/Notepad3.ini differ
diff --git a/np3portableapp/Notepad3Portable/Data/settings/Notepad3.ini b/np3portableapp/Notepad3Portable/Data/settings/Notepad3.ini
deleted file mode 100644
index ea9752cf9..000000000
Binary files a/np3portableapp/Notepad3Portable/Data/settings/Notepad3.ini and /dev/null differ
diff --git a/src/Dialogs.c b/src/Dialogs.c
index bb60cd1c5..1e0548d2e 100644
--- a/src/Dialogs.c
+++ b/src/Dialogs.c
@@ -1404,10 +1404,10 @@ BOOL FileMRUDlg(HWND hwnd,LPWSTR lpstrFile)
//
// ChangeNotifyDlgProc()
//
-// Controls: 100 Radio Button
-// 101 Radio Button
-// 102 Radio Button
-// 103 Check Box
+// Controls: 100 Radio Button (None)
+// 101 Radio Button (Display Message)
+// 102 Radio Button (Auto-Reload)
+// 103 Check Box (Reset on New)
//
extern int iFileWatchingMode;
extern BOOL bResetFileWatching;
@@ -1474,7 +1474,7 @@ BOOL ChangeNotifyDlg(HWND hwnd)
//
// ColumnWrapDlgProc()
//
-// Controls: 100 Edit
+// Controls: Edit IDC_COLUMNWRAP
//
INT_PTR CALLBACK ColumnWrapDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
@@ -1489,8 +1489,8 @@ INT_PTR CALLBACK ColumnWrapDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPar
piNumber = (int*)lParam;
- SetDlgItemInt(hwnd,100,*piNumber,FALSE);
- SendDlgItemMessage(hwnd,100,EM_LIMITTEXT,15,0);
+ SetDlgItemInt(hwnd, IDC_COLUMNWRAP,*piNumber,FALSE);
+ SendDlgItemMessage(hwnd, IDC_COLUMNWRAP,EM_LIMITTEXT,15,0);
CenterDlgInParent(hwnd);
@@ -1507,7 +1507,7 @@ INT_PTR CALLBACK ColumnWrapDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPar
BOOL fTranslated;
- int iNewNumber = GetDlgItemInt(hwnd,100,&fTranslated,FALSE);
+ int iNewNumber = GetDlgItemInt(hwnd, IDC_COLUMNWRAP,&fTranslated,FALSE);
if (fTranslated)
{
@@ -1517,7 +1517,7 @@ INT_PTR CALLBACK ColumnWrapDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPar
}
else
- PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,100)),1);
+ PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd, IDC_COLUMNWRAP)),1);
}
break;
diff --git a/src/Edit.c b/src/Edit.c
index 59215ff1f..c77e4a131 100644
--- a/src/Edit.c
+++ b/src/Edit.c
@@ -85,8 +85,6 @@ extern BOOL bLoadASCIIasUTF8;
extern BOOL bLoadNFOasOEM;
extern BOOL bAccelWordNavigation;
-extern BOOL bDenyVirtualSpaceAccess;
-extern BOOL bHyperlinkHotspot;
extern int iMarkOccurrences;
extern int iMarkOccurrencesCount;
@@ -151,14 +149,21 @@ static volatile LONG g_lTargetTransactionBits = 0;
//
// EditEnterTargetTransaction(), EditLeaveTargetTransaction()
//
-BOOL EditEnterTargetTransaction() {
- return (BOOL)TEST_AND_SET(BLOCK_BIT_TARGET_TRANSACTION);
+void EditEnterTargetTransaction() {
+ (void)TEST_AND_SET(BLOCK_BIT_TARGET_TRANSACTION);
}
-BOOL EditLeaveTargetTransaction() {
- return (BOOL)TEST_AND_RESET(BLOCK_BIT_TARGET_TRANSACTION);
+void EditLeaveTargetTransaction() {
+ (void)TEST_AND_RESET(BLOCK_BIT_TARGET_TRANSACTION);
}
+BOOL EditIsInTargetTransaction() {
+ if (TEST_AND_RESET(BLOCK_BIT_TARGET_TRANSACTION)) {
+ (void)TEST_AND_SET(BLOCK_BIT_TARGET_TRANSACTION);
+ return TRUE;
+ }
+ return FALSE;
+}
//=============================================================================
//
@@ -189,13 +194,13 @@ HWND EditCreate(HWND hwndParent)
SendMessage(hwnd,SCI_SETCARETSTICKY,SC_CARETSTICKY_OFF,0);
//SendMessage(hwnd,SCI_SETCARETSTICKY,SC_CARETSTICKY_WHITESPACE,0);
SendMessage(hwnd,SCI_SETXCARETPOLICY,CARET_SLOP|CARET_EVEN,50);
- SendMessage(hwnd,SCI_SETYCARETPOLICY,CARET_EVEN,0);
+ SendMessage(hwnd,SCI_SETYCARETPOLICY,CARET_SLOP|CARET_EVEN,0);
SendMessage(hwnd,SCI_SETMOUSESELECTIONRECTANGULARSWITCH,TRUE,0);
SendMessage(hwnd,SCI_SETMULTIPLESELECTION,FALSE,0);
SendMessage(hwnd,SCI_SETADDITIONALSELECTIONTYPING,FALSE,0);
SendMessage(hwnd,SCI_SETADDITIONALCARETSBLINK,FALSE,0);
SendMessage(hwnd,SCI_SETADDITIONALCARETSVISIBLE,FALSE,0);
- SendMessage(hwnd,SCI_SETVIRTUALSPACEOPTIONS, (bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0);
+ SendMessage(hwnd,SCI_SETVIRTUALSPACEOPTIONS, SCVS_NONE, 0);
SendMessage(hwnd,SCI_SETLAYOUTCACHE,SC_CACHE_PAGE,0);
@@ -325,7 +330,7 @@ void EditSetNewText(HWND hwnd,char* lpstrText,DWORD cbText)
SendMessage(hwnd,SCI_CANCEL,0,0);
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
- UndoRedoSelectionMap(-1,NULL);
+ UndoRedoActionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
SendMessage(hwnd,SCI_SETSCROLLWIDTH, DEFAULT_SCROLL_WIDTH,0);
@@ -364,7 +369,7 @@ BOOL EditConvertText(HWND hwnd, int encSource, int encDest, BOOL bSetSavePoint)
{
SendMessage(hwnd,SCI_CANCEL,0,0);
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
- UndoRedoSelectionMap(-1,NULL);
+ UndoRedoActionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
Encoding_SciSetCodePage(hwnd,encDest);
@@ -405,7 +410,7 @@ BOOL EditConvertText(HWND hwnd, int encSource, int encDest, BOOL bSetSavePoint)
SendMessage(hwnd,SCI_CANCEL,0,0);
SendMessage(hwnd,SCI_SETUNDOCOLLECTION,0,0);
- UndoRedoSelectionMap(-1,NULL);
+ UndoRedoActionMap(-1,NULL);
SendMessage(hwnd,SCI_CLEARALL,0,0);
SendMessage(hwnd,SCI_MARKERDELETEALL,(WPARAM)MARKER_NP3_BOOKMARK,0);
Encoding_SciSetCodePage(hwnd,encDest);
@@ -637,8 +642,7 @@ BOOL EditCopyAppend(HWND hwnd)
char* pszText = NULL;
if (iCurPos != iAnchorPos) {
-
- if (SC_SEL_RECTANGLE == SendMessage(hwnd, SCI_GETSELECTIONMODE, 0, 0)) {
+ if (SciCall_IsSelectionRectangle()) {
MsgBox(MBWARN, IDS_SELRECT);
return(FALSE);
}
@@ -1220,7 +1224,7 @@ void EditInvertCase(HWND hwnd)
if (iCurPos != iAnchorPos)
{
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0))
+ if (!SciCall_IsSelectionRectangle())
{
int iSelStart = (int)SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0);
int iSelEnd = (int)SendMessage(hwnd,SCI_GETSELECTIONEND,0,0);
@@ -1256,11 +1260,9 @@ void EditInvertCase(HWND hwnd)
WideCharToMultiByte(cpEdit,0,pszTextW,cchTextW,pszText,(int)GlobalSize(pszText),NULL,NULL);
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)(iSelEnd - iSelStart),(LPARAM)pszText);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
}
GlobalFree(pszText);
@@ -1283,7 +1285,7 @@ void EditTitleCase(HWND hwnd)
if (iCurPos != iAnchorPos)
{
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0))
+ if (!SciCall_IsSelectionRectangle())
{
int iSelStart = (int)SendMessage(hwnd, SCI_GETSELECTIONSTART, 0, 0);
int iSelEnd = (int)SendMessage(hwnd, SCI_GETSELECTIONEND, 0, 0);
@@ -1319,11 +1321,9 @@ void EditTitleCase(HWND hwnd)
WideCharToMultiByte(cpEdit,0,pszTextW,cchTextW,pszText,(int)GlobalSize(pszText),NULL,NULL);
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)(iSelEnd - iSelStart),(LPARAM)pszText);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
}
GlobalFree(pszText);
@@ -1346,7 +1346,7 @@ void EditSentenceCase(HWND hwnd)
if (iCurPos != iAnchorPos)
{
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0))
+ if (!SciCall_IsSelectionRectangle())
{
int iSelStart = (int)SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0);
int iSelEnd = (int)SendMessage(hwnd,SCI_GETSELECTIONEND,0,0);
@@ -1395,11 +1395,9 @@ void EditSentenceCase(HWND hwnd)
WideCharToMultiByte(cpEdit,0,pszTextW,cchTextW,pszText,(int)GlobalSize(pszText),NULL,NULL);
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)(iSelEnd - iSelStart),(LPARAM)pszText);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
}
GlobalFree(pszText);
@@ -1426,7 +1424,7 @@ void EditURLEncode(HWND hwnd)
if (iCurPos != iAnchorPos)
{
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0))
+ if (!SciCall_IsSelectionRectangle())
{
char* pszText;
LPWSTR pszTextW;
@@ -1478,11 +1476,9 @@ void EditURLEncode(HWND hwnd)
else
iCurPos = iAnchorPos + cchEscaped;
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)cchEscaped,(LPARAM)pszEscaped);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
LocalFree(pszText);
LocalFree(pszTextW);
@@ -1510,7 +1506,7 @@ void EditURLDecode(HWND hwnd)
if (iCurPos != iAnchorPos)
{
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0))
+ if (!SciCall_IsSelectionRectangle())
{
char* pszText;
LPWSTR pszTextW;
@@ -1563,11 +1559,9 @@ void EditURLDecode(HWND hwnd)
else
iCurPos = iAnchorPos + cchUnescaped;
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
SendMessage(hwnd,SCI_CLEAR,0,0);
SendMessage(hwnd,SCI_ADDTEXT,(WPARAM)cchUnescaped,(LPARAM)pszUnescaped);
SendMessage(hwnd,SCI_SETSEL,(WPARAM)iAnchorPos,(LPARAM)iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
LocalFree(pszText);
LocalFree(pszTextW);
@@ -1586,31 +1580,28 @@ void EditURLDecode(HWND hwnd)
//
void EditEscapeCChars(HWND hwnd) {
- if (SendMessage(hwnd,SCI_GETSELECTIONEND,0,0) - SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0))
+ if (!SciCall_IsSelectionEmpty())
{
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0))
+ if (SciCall_IsSelectionRectangle())
{
- EDITFINDREPLACE efr = { "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
- efr.hwnd = hwnd;
-
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
-
- StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\");
- StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\\");
- EditReplaceAllInSelection(hwnd,&efr,FALSE);
-
- StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\"");
- StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\"");
- EditReplaceAllInSelection(hwnd,&efr,FALSE);
-
- StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\'");
- StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\'");
- EditReplaceAllInSelection(hwnd,&efr,FALSE);
-
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
}
- else
- MsgBox(MBWARN,IDS_SELRECT);
+
+ EDITFINDREPLACE efr = { "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
+ efr.hwnd = hwnd;
+
+ StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\");
+ StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\\");
+ EditReplaceAllInSelection(hwnd,&efr,FALSE);
+
+ StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\"");
+ StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\"");
+ EditReplaceAllInSelection(hwnd,&efr,FALSE);
+
+ StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\'");
+ StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\\'");
+ EditReplaceAllInSelection(hwnd,&efr,FALSE);
}
}
@@ -1621,31 +1612,28 @@ void EditEscapeCChars(HWND hwnd) {
//
void EditUnescapeCChars(HWND hwnd) {
- if (SendMessage(hwnd,SCI_GETSELECTIONEND,0,0) - SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0))
+ if (!SciCall_IsSelectionEmpty())
{
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0))
+ if (SciCall_IsSelectionRectangle())
{
- EDITFINDREPLACE efr = { "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
- efr.hwnd = hwnd;
-
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
-
- StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\\");
- StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\");
- EditReplaceAllInSelection(hwnd,&efr,FALSE);
-
- StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\"");
- StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\"");
- EditReplaceAllInSelection(hwnd,&efr,FALSE);
-
- StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\'");
- StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\'");
- EditReplaceAllInSelection(hwnd,&efr,FALSE);
-
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
}
- else
- MsgBox(MBWARN,IDS_SELRECT);
+
+ EDITFINDREPLACE efr = { "", "", "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
+ efr.hwnd = hwnd;
+
+ StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\\");
+ StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\\");
+ EditReplaceAllInSelection(hwnd,&efr,FALSE);
+
+ StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\"");
+ StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\"");
+ EditReplaceAllInSelection(hwnd,&efr,FALSE);
+
+ StringCchCopyA(efr.szFind,FNDRPL_BUFFER,"\\\'");
+ StringCchCopyA(efr.szReplace,FNDRPL_BUFFER,"\'");
+ EditReplaceAllInSelection(hwnd,&efr,FALSE);
}
}
@@ -1658,7 +1646,7 @@ void EditChar2Hex(HWND hwnd) {
//TODO: iterate over complete selection?
- if (SC_SEL_RECTANGLE == SciCall_GetSelectionMode()) {
+ if (SciCall_IsSelectionRectangle()) {
MsgBox(MBWARN, IDS_SELRECT);
return;
}
@@ -1669,29 +1657,33 @@ void EditChar2Hex(HWND hwnd) {
if (iSelStart == iSelEnd) {
iSelEnd = (int)SendMessage(hwnd, SCI_POSITIONAFTER, (WPARAM)iSelStart, 0);
}
- if (iSelStart == iSelEnd)
- return;
+ if (iSelStart == iSelEnd) { return; }
char ch[32] = { '\0' };
WCHAR wch[32] = { L'\0' };
- SciCall_SetSel(iSelStart, iSelEnd);
- SendMessage(hwnd,SCI_GETSELTEXT,0,(LPARAM)ch);
+ EditSelectEx(hwnd, iSelStart, iSelEnd);
- if (ch[0] == 0) {
- StringCchCopyA(ch, COUNTOF(ch), "\\x00");
- }
- else {
- UINT cp = Encoding_SciGetCodePage(hwnd);
- MultiByteToWideCharStrg(cp,ch,wch);
- if (wch[0] <= 0xFF)
- StringCchPrintfA(ch,COUNTOF(ch),"\\x%02X",wch[0] & 0xFF);
- else
- StringCchPrintfA(ch,COUNTOF(ch),"\\u%04X",wch[0]);
- }
+ if ((int)SendMessage(hwnd, SCI_GETSELTEXT, 0, 0) <= COUNTOF(ch))
+ {
- SendMessage(hwnd,SCI_REPLACESEL,0,(LPARAM)ch);
- SciCall_SetSel(iSelStart, iSelStart + StringCchLenA(ch, COUNTOF(ch)));
+ SendMessage(hwnd, SCI_GETSELTEXT, 0, (LPARAM)ch);
+
+ if (ch[0] == '\0') {
+ StringCchCopyA(ch, COUNTOF(ch), "\\x00");
+ }
+ else {
+ UINT cp = Encoding_SciGetCodePage(hwnd);
+ MultiByteToWideCharStrg(cp, ch, wch);
+ if (wch[0] <= 0xFF)
+ StringCchPrintfA(ch, COUNTOF(ch), "\\x%02X", wch[0] & 0xFF);
+ else
+ StringCchPrintfA(ch, COUNTOF(ch), "\\u%04X", wch[0]);
+ }
+
+ SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)ch);
+ EditSelectEx(hwnd, iSelStart, iSelStart + StringCchLenA(ch, COUNTOF(ch)));
+ }
}
@@ -1704,7 +1696,7 @@ void EditHex2Char(HWND hwnd) {
if (SciCall_IsSelectionEmpty())
return;
- if (SC_SEL_RECTANGLE == SciCall_GetSelectionMode()) {
+ if (SciCall_IsSelectionRectangle()) {
MsgBox(MBWARN, IDS_SELRECT);
return;
}
@@ -1716,26 +1708,26 @@ void EditHex2Char(HWND hwnd) {
int iSelStart = SciCall_GetSelectionStart();
int iSelEnd = SciCall_GetSelectionEnd();
- if ((int)SendMessage(hwnd,SCI_GETSELTEXT,0,0) <= COUNTOF(ch))
+ if ((int)SendMessage(hwnd, SCI_GETSELTEXT, 0, 0) <= COUNTOF(ch))
{
- SendMessage(hwnd,SCI_GETSELTEXT,0,(LPARAM)ch);
+ SendMessage(hwnd, SCI_GETSELTEXT, 0, (LPARAM)ch);
ch[31] = '\0';
- if (StrChrIA(ch,' ') || StrChrIA(ch,'\t') || StrChrIA(ch,'\r') || StrChrIA(ch,'\n') || StrChrIA(ch,'-'))
+ if (StrChrIA(ch, ' ') || StrChrIA(ch, '\t') || StrChrIA(ch, '\r') || StrChrIA(ch, '\n') || StrChrIA(ch, '-'))
return;
- if (StrCmpNIA(ch,"\\x",2) == 0 || StrCmpNIA(ch,"\\u",2) == 0) {
+ if (StrCmpNIA(ch, "\\x", 2) == 0 || StrCmpNIA(ch, "\\u", 2) == 0) {
ch[0] = '0';
ch[1] = 'x';
}
- else if (StrChrIA("xu",ch[0])) {
+ else if (StrChrIA("xu", ch[0])) {
ch[0] = '0';
bTrySelExpand = TRUE;
}
- if (sscanf_s(ch,"%x",&i) == 1) {
+ if (sscanf_s(ch, "%x", &i) == 1) {
int cch;
if (i == 0) {
ch[0] = 0;
@@ -1744,15 +1736,15 @@ void EditHex2Char(HWND hwnd) {
else {
UINT cp = Encoding_SciGetCodePage(hwnd);
WCHAR wch[4];
- StringCchPrintf(wch,COUNTOF(wch),L"%lc",(WCHAR)i);
- cch = WideCharToMultiByteStrg(cp,wch,ch) - 1;
- if (bTrySelExpand && (char)SendMessage(hwnd,SCI_GETCHARAT,(WPARAM)iSelStart-1,0) == '\\') {
+ StringCchPrintf(wch, COUNTOF(wch), L"%lc", (WCHAR)i);
+ cch = WideCharToMultiByteStrg(cp, wch, ch) - 1;
+ if (bTrySelExpand && (char)SendMessage(hwnd, SCI_GETCHARAT, (WPARAM)iSelStart - 1, 0) == '\\') {
iSelStart--;
}
}
- SciCall_SetSel(iSelStart, iSelEnd);
+ EditSelectEx(hwnd, iSelStart, iSelEnd);
SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)ch);
- SciCall_SetSel(iSelStart, iSelStart + cch);
+ EditSelectEx(hwnd, iSelStart, iSelStart + cch);
}
}
}
@@ -1764,68 +1756,68 @@ void EditHex2Char(HWND hwnd) {
//
void EditModifyNumber(HWND hwnd,BOOL bIncrease) {
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) {
+ if (SciCall_IsSelectionRectangle()) {
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
+ }
- int iSelStart = (int)SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0);
- int iSelEnd = (int)SendMessage(hwnd,SCI_GETSELECTIONEND,0,0);
+ int iSelStart = (int)SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0);
+ int iSelEnd = (int)SendMessage(hwnd,SCI_GETSELECTIONEND,0,0);
- if (iSelEnd - iSelStart)
- {
- char chNumber[32] = { '\0' };
- if (SendMessage(hwnd,SCI_GETSELTEXT,0,0) <= COUNTOF(chNumber)) {
- SendMessage(hwnd,SCI_GETSELTEXT,0,(LPARAM)chNumber);
- chNumber[31] = '\0';
+ if (iSelEnd - iSelStart) {
+ char chNumber[32] = { '\0' };
+ if (SendMessage(hwnd, SCI_GETSELTEXT, 0, 0) <= COUNTOF(chNumber)) {
+ SendMessage(hwnd, SCI_GETSELTEXT, 0, (LPARAM)chNumber);
+ chNumber[31] = '\0';
- if (StrChrIA(chNumber,'-'))
- return;
+ if (StrChrIA(chNumber, '-'))
+ return;
- int iNumber;
- int iWidth;
- char chFormat[32] = { '\0' };
- if (!StrChrIA(chNumber, 'x') && sscanf_s(chNumber, "%d", &iNumber) == 1) {
- iWidth = StringCchLenA(chNumber,COUNTOF(chNumber));
- if (iNumber >= 0) {
- if (bIncrease && iNumber < INT_MAX)
- iNumber++;
- if (!bIncrease && iNumber > 0)
- iNumber--;
+ int iNumber;
+ int iWidth;
+ char chFormat[32] = { '\0' };
+ if (!StrChrIA(chNumber, 'x') && sscanf_s(chNumber, "%d", &iNumber) == 1) {
+ iWidth = StringCchLenA(chNumber, COUNTOF(chNumber));
+ if (iNumber >= 0) {
+ if (bIncrease && iNumber < INT_MAX)
+ iNumber++;
+ if (!bIncrease && iNumber > 0)
+ iNumber--;
- StringCchPrintfA(chFormat,COUNTOF(chFormat),"%%0%ii",iWidth);
- StringCchPrintfA(chNumber,COUNTOF(chNumber),chFormat,iNumber);
- SendMessage(hwnd,SCI_REPLACESEL,0,(LPARAM)chNumber);
- SendMessage(hwnd,SCI_SETSEL,iSelStart,iSelStart + StringCchLenA(chNumber,COUNTOF(chNumber)));
- }
+ StringCchPrintfA(chFormat, COUNTOF(chFormat), "%%0%ii", iWidth);
+ StringCchPrintfA(chNumber, COUNTOF(chNumber), chFormat, iNumber);
+ SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)chNumber);
+ SendMessage(hwnd, SCI_SETSEL, iSelStart, iSelStart + StringCchLenA(chNumber, COUNTOF(chNumber)));
}
- else if (sscanf_s(chNumber, "%x", &iNumber) == 1) {
- BOOL bUppercase = FALSE;
- iWidth = StringCchLenA(chNumber,COUNTOF(chNumber)) - 2;
- if (iNumber >= 0) {
- if (bIncrease && iNumber < INT_MAX)
- iNumber++;
- if (!bIncrease && iNumber > 0)
- iNumber--;
- for (int i = StringCchLenA(chNumber,COUNTOF(chNumber)) -1 ; i >= 0; i--) {
- if (IsCharLowerA(chNumber[i]))
- break;
- else if (IsCharUpper(chNumber[i])) {
- bUppercase = TRUE;
- break;
- }
+ }
+ else if (sscanf_s(chNumber, "%x", &iNumber) == 1) {
+ BOOL bUppercase = FALSE;
+ iWidth = StringCchLenA(chNumber, COUNTOF(chNumber)) - 2;
+ if (iNumber >= 0) {
+ if (bIncrease && iNumber < INT_MAX)
+ iNumber++;
+ if (!bIncrease && iNumber > 0)
+ iNumber--;
+ for (int i = StringCchLenA(chNumber, COUNTOF(chNumber)) - 1; i >= 0; i--) {
+ if (IsCharLowerA(chNumber[i]))
+ break;
+ else if (IsCharUpper(chNumber[i])) {
+ bUppercase = TRUE;
+ break;
}
- if (bUppercase)
- StringCchPrintfA(chFormat,COUNTOF(chFormat),"%%#0%iX",iWidth);
- else
- StringCchPrintfA(chFormat,COUNTOF(chFormat),"%%#0%ix",iWidth);
- StringCchPrintfA(chNumber,COUNTOF(chNumber),chFormat,iNumber);
- SendMessage(hwnd,SCI_REPLACESEL,0,(LPARAM)chNumber);
- SendMessage(hwnd,SCI_SETSEL,iSelStart,iSelStart+StringCchLenA(chNumber,COUNTOF(chNumber)));
}
+ if (bUppercase)
+ StringCchPrintfA(chFormat, COUNTOF(chFormat), "%%#0%iX", iWidth);
+ else
+ StringCchPrintfA(chFormat, COUNTOF(chFormat), "%%#0%ix", iWidth);
+
+ StringCchPrintfA(chNumber, COUNTOF(chNumber), chFormat, iNumber);
+ SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)chNumber);
+ SendMessage(hwnd, SCI_SETSEL, iSelStart, iSelStart + StringCchLenA(chNumber, COUNTOF(chNumber)));
}
}
}
}
- else
- MsgBox(MBWARN,IDS_SELRECT);
}
@@ -1835,10 +1827,9 @@ void EditModifyNumber(HWND hwnd,BOOL bIncrease) {
//
void EditTabsToSpaces(HWND hwnd,int nTabWidth,BOOL bOnlyIndentingWS)
{
- if ((BOOL)SendMessage(hwnd, SCI_GETSELECTIONEMPTY, 0, 0))
- return; // no selection
+ if (SciCall_IsSelectionEmpty()) { return; } // no selection
- if (SC_SEL_RECTANGLE == SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) {
+ if (SciCall_IsSelectionRectangle()) {
MsgBox(MBWARN,IDS_SELRECT);
return;
}
@@ -1924,11 +1915,12 @@ void EditTabsToSpaces(HWND hwnd,int nTabWidth,BOOL bOnlyIndentingWS)
iCurPos = iSelStart + cchConvM;
}
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
- SciCall_SetSel(iSelStart, iSelEnd);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)pszText);
- SciCall_SetSel(iAnchorPos, iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+ EditEnterTargetTransaction();
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iSelStart, iSelEnd);
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cchConvM, (LPARAM)pszText);
+ EditLeaveTargetTransaction();
+
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
GlobalFree(pszText);
}
@@ -1943,11 +1935,10 @@ void EditTabsToSpaces(HWND hwnd,int nTabWidth,BOOL bOnlyIndentingWS)
//
void EditSpacesToTabs(HWND hwnd,int nTabWidth,BOOL bOnlyIndentingWS)
{
- if ((BOOL)SendMessage(hwnd, SCI_GETSELECTIONEMPTY, 0, 0))
- return; // no selection
+ if (SciCall_IsSelectionEmpty()) { return; } // no selection
- if (SC_SEL_RECTANGLE == SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) {
- MsgBox(MBWARN,IDS_SELRECT);
+ if (SciCall_IsSelectionRectangle()) {
+ MsgBox(MBWARN, IDS_SELRECT);
return;
}
@@ -2049,11 +2040,12 @@ void EditSpacesToTabs(HWND hwnd,int nTabWidth,BOOL bOnlyIndentingWS)
iCurPos = iSelStart + cchConvM;
}
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
- SciCall_SetSel(iSelStart, iSelEnd);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)pszText);
- SciCall_SetSel(iAnchorPos, iCurPos);
- SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
+ EditEnterTargetTransaction();
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iSelStart, iSelEnd);
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cchConvM, (LPARAM)pszText);
+ EditLeaveTargetTransaction();
+
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
GlobalFree(pszText);
}
@@ -2079,15 +2071,13 @@ void EditMoveUp(HWND hwnd)
int iLineCurPos = iCurPos - SciCall_PositionFromLine(iCurLine);
int iLineAnchorPos = iAnchorPos - SciCall_PositionFromLine(iAnchorLine);
if (iCurLine > 0) {
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
SendMessage(hwnd,SCI_LINETRANSPOSE,0,0);
SciCall_SetSel(SciCall_PositionFromLine(iAnchorLine - 1) + iLineAnchorPos,
SciCall_PositionFromLine(iCurLine - 1) + iLineCurPos);
SendMessage(hwnd,SCI_CHOOSECARETX,0,0);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
}
}
- else if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode()) {
+ else if (!SciCall_IsSelectionRectangle()) {
int iLineSrc = min(iCurLine,iAnchorLine) -1;
if (iLineSrc >= 0) {
@@ -2112,10 +2102,10 @@ void EditMoveUp(HWND hwnd)
--iLineDest;
}
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
+ EditEnterTargetTransaction();
- SciCall_SetSel(iLineSrcStart, iLineSrcEnd);
- SendMessage(hwnd,SCI_REPLACESEL,0,(LPARAM)"");
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iLineSrcStart, iLineSrcEnd);
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
iLineDestStart = SciCall_PositionFromLine(iLineDest);
SendMessage(hwnd,SCI_INSERTTEXT,(WPARAM)iLineDestStart,(LPARAM)pLine);
@@ -2132,11 +2122,13 @@ void EditMoveUp(HWND hwnd)
chaEOL[0] = '\n';
chaEOL[1] = 0;
}
- SendMessage(hwnd,SCI_INSERTTEXT,(WPARAM)iLineDestStart,(LPARAM)chaEOL);
- SciCall_SetSel(SciCall_GetLineEndPosition(iLineDest), SciCall_GetTextLength());
- SendMessage(hwnd, SCI_REPLACESEL,0,(LPARAM)"");
+ SendMessage(hwnd, SCI_INSERTTEXT, (WPARAM)iLineDestStart, (LPARAM)chaEOL);
+ SendMessage(hwnd, SCI_SETTARGETRANGE, SciCall_GetLineEndPosition(iLineDest), SciCall_GetTextLength());
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
}
+ EditLeaveTargetTransaction();
+
if (iCurPos < iAnchorPos) {
iCurPos = SciCall_PositionFromLine(iCurLine - 1);
iAnchorPos = SciCall_PositionFromLine(iLineDest);
@@ -2145,9 +2137,7 @@ void EditMoveUp(HWND hwnd)
iAnchorPos = SciCall_PositionFromLine(iAnchorLine - 1);
iCurPos = SciCall_PositionFromLine(iLineDest);
}
- SciCall_SetSel(iAnchorPos, iCurPos);
-
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
}
}
else
@@ -2171,16 +2161,14 @@ void EditMoveDown(HWND hwnd)
int iLineCurPos = iCurPos - SciCall_PositionFromLine(iCurLine);
int iLineAnchorPos = iAnchorPos - SciCall_PositionFromLine(iAnchorLine);
if (iCurLine < (SciCall_GetLineCount() - 1)) {
- SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
SciCall_GotoLine(iCurLine + 1);
SendMessage(hwnd, SCI_LINETRANSPOSE, 0, 0);
SciCall_SetSel(SciCall_PositionFromLine(iAnchorLine + 1) + iLineAnchorPos,
SciCall_PositionFromLine(iCurLine + 1) + iLineCurPos);
SendMessage(hwnd, SCI_CHOOSECARETX, 0, 0);
- SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
}
}
- else if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode())
+ else if (!SciCall_IsSelectionRectangle())
{
int iLineSrc = max(iCurLine,iAnchorLine) +1;
if (max(iCurPos,iAnchorPos) <= SciCall_PositionFromLine(iLineSrc - 1)) {
@@ -2224,20 +2212,23 @@ void EditMoveDown(HWND hwnd)
iLineSrcEnd = SciCall_PositionFromLine(iLineSrc + 1);
iLineDest = min(iCurLine,iAnchorLine);
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
+ EditEnterTargetTransaction();
- SciCall_SetSel(iLineSrcStart, iLineSrcEnd);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)"");
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iLineSrcStart, iLineSrcEnd);
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
iLineDestStart = SciCall_PositionFromLine(iLineDest);
SendMessage(hwnd,SCI_INSERTTEXT,(WPARAM)iLineDestStart,(LPARAM)pLine);
if (bLastLine) {
- SciCall_SetSel(SciCall_GetLineEndPosition(SciCall_GetLineCount() - 2),
- SciCall_GetTextLength());
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)"");
+ SendMessage(hwnd, SCI_SETTARGETRANGE,
+ SciCall_GetLineEndPosition(SciCall_GetLineCount() - 2),
+ SciCall_GetTextLength());
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
}
+ EditLeaveTargetTransaction();
+
LocalFree(pLine);
if (iCurPos < iAnchorPos) {
@@ -2248,9 +2239,7 @@ void EditMoveDown(HWND hwnd)
iAnchorPos = SciCall_PositionFromLine(iAnchorLine + 1);
iCurPos = SciCall_PositionFromLine(iLineSrc + 1);
}
- SciCall_SetSel(iAnchorPos, iCurPos);
-
- SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
}
}
else
@@ -2278,7 +2267,7 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend)
if (lstrlen(pwszAppend))
WideCharToMultiByteStrg(mbcp,pwszAppend,mszAppend1);
- if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode())
+ if (!SciCall_IsSelectionRectangle())
{
int iLine;
@@ -2443,7 +2432,8 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend)
}
}
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
+ IgnoreNotifyChangeEvent();
+ EditEnterTargetTransaction();
for (iLine = iLineStart; iLine <= iLineEnd; iLine++)
{
@@ -2464,8 +2454,8 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend)
iPrefixNum++;
}
iPos = SciCall_PositionFromLine(iLine);
- SciCall_SetSel(iPos, iPos);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)mszInsert);
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iPos, iPos);
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)-1, (LPARAM)mszInsert);
}
if (lstrlen(pwszAppend)) {
@@ -2483,11 +2473,13 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend)
iAppendNum++;
}
iPos = SciCall_GetLineEndPosition(iLine);
- SciCall_SetSel(iPos, iPos);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)mszInsert);
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iPos, iPos);
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)-1, (LPARAM)mszInsert);
}
}
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+
+ EditLeaveTargetTransaction();
+ ObserveNotifyChangeEvent();
// extend selection to start of first line
// the above code is not required when last line has been excluded
@@ -2503,7 +2495,7 @@ void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend)
iAnchorPos = SciCall_PositionFromLine(iLineStart);
iCurPos = SciCall_PositionFromLine(iLineEnd + 1);
}
- SciCall_SetSel(iAnchorPos, iCurPos);
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
}
}
else
@@ -2526,7 +2518,7 @@ void EditAlignText(HWND hwnd,int nMode)
int iCurPos = SciCall_GetCurrentPos();
int iAnchorPos = SciCall_GetAnchor();
- if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode())
+ if (!SciCall_IsSelectionRectangle())
{
int iLine;
int iMinIndent = BUFSIZE_ALIGN;
@@ -2572,6 +2564,9 @@ void EditAlignText(HWND hwnd,int nMode)
if (iMaxLength < BUFSIZE_ALIGN) {
+ IgnoreNotifyChangeEvent();
+ EditEnterTargetTransaction();
+
for (iLine = iLineStart; iLine <= iLineEnd; iLine++)
{
int iEndPos = SciCall_GetLineEndPosition(iLine);
@@ -2580,11 +2575,11 @@ void EditAlignText(HWND hwnd,int nMode)
if ((iIndentPos == iEndPos) && (iEndPos > 0)) {
if (!bModified) {
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
+ SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
bModified = TRUE;
}
- SciCall_SetSel(SciCall_PositionFromLine(iLine), iEndPos);
- SendMessage(hwnd,SCI_REPLACESEL,0,(LPARAM)"");
+ SendMessage(hwnd, SCI_SETTARGETRANGE, SciCall_PositionFromLine(iLine), iEndPos);
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
}
else {
@@ -2599,7 +2594,7 @@ void EditAlignText(HWND hwnd,int nMode)
int cchLine = (int)SendMessage(hwnd,SCI_GETLINE,(WPARAM)iLine,(LPARAM)tchLineBuf);
if (!bModified) {
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
+ SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
bModified = TRUE;
}
@@ -2667,10 +2662,10 @@ void EditAlignText(HWND hwnd,int nMode)
p = StrEnd(p);
}
- WideCharToMultiByteStrg(mbcp,wchNewLineBuf,tchLineBuf);
+ int cch = WideCharToMultiByteStrg(mbcp,wchNewLineBuf,tchLineBuf) - 1;
- SciCall_SetSel(SciCall_PositionFromLine(iLine), SciCall_GetLineEndPosition(iLine));
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)tchLineBuf);
+ SendMessage(hwnd, SCI_SETTARGETRANGE, SciCall_PositionFromLine(iLine), SciCall_GetLineEndPosition(iLine));
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cch, (LPARAM)tchLineBuf);
SendMessage(hwnd,SCI_SETLINEINDENTATION,(WPARAM)iLine,(LPARAM)iMinIndent);
}
@@ -2687,10 +2682,10 @@ void EditAlignText(HWND hwnd,int nMode)
p = StrEnd(p);
}
- WideCharToMultiByteStrg(mbcp,wchNewLineBuf,tchLineBuf);
+ int cch = WideCharToMultiByteStrg(mbcp,wchNewLineBuf,tchLineBuf) - 1;
- SciCall_SetSel(SciCall_PositionFromLine(iLine), SciCall_GetLineEndPosition(iLine));
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)tchLineBuf);
+ SendMessage(hwnd, SCI_SETTARGETRANGE, SciCall_PositionFromLine(iLine), SciCall_GetLineEndPosition(iLine));
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cch, (LPARAM)tchLineBuf);
SendMessage(hwnd, SCI_SETLINEINDENTATION, (WPARAM)iLine, (LPARAM)iMinIndent);
}
@@ -2726,7 +2721,7 @@ void EditAlignText(HWND hwnd,int nMode)
p = StrEnd(p);
}
- WideCharToMultiByteStrg(mbcp,wchNewLineBuf,tchLineBuf);
+ int cch = WideCharToMultiByteStrg(mbcp,wchNewLineBuf,tchLineBuf) - 1;
if (nMode == ALIGN_RIGHT || nMode == ALIGN_CENTER) {
SendMessage(hwnd,SCI_SETLINEINDENTATION,(WPARAM)iLine,(LPARAM)iMinIndent);
@@ -2735,8 +2730,8 @@ void EditAlignText(HWND hwnd,int nMode)
else
iPos = SciCall_PositionFromLine(iLine);
- SciCall_SetSel(iPos, SciCall_GetLineEndPosition(iLine));
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)tchLineBuf);
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iPos, SciCall_GetLineEndPosition(iLine));
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cch, (LPARAM)tchLineBuf);
if (nMode == ALIGN_LEFT)
SendMessage(hwnd,SCI_SETLINEINDENTATION,(WPARAM)iLine,(LPARAM)iMinIndent);
@@ -2744,13 +2739,16 @@ void EditAlignText(HWND hwnd,int nMode)
}
}
}
- if (bModified)
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+ EditLeaveTargetTransaction();
+ ObserveNotifyChangeEvent();
}
else
MsgBox(MBINFO,IDS_BUFFERTOOSMALL);
-
+ if (bModified) {
+ SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
+ }
+
if (iCurPos < iAnchorPos) {
iCurPos = SciCall_PositionFromLine(iLineStart);
iAnchorPos = SciCall_PositionFromLine(iLineEnd + 1);
@@ -2759,7 +2757,7 @@ void EditAlignText(HWND hwnd,int nMode)
iAnchorPos = SciCall_PositionFromLine(iLineStart);
iCurPos = SciCall_PositionFromLine(iLineEnd + 1);
}
- SciCall_SetSel(iAnchorPos, iCurPos);
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
}
else
MsgBox(MBWARN,IDS_SELRECT);
@@ -2770,59 +2768,63 @@ void EditAlignText(HWND hwnd,int nMode)
//
// EditEncloseSelection()
//
-void EditEncloseSelection(HWND hwnd,LPCWSTR pwszOpen,LPCWSTR pwszClose)
+void EditEncloseSelection(HWND hwnd, LPCWSTR pwszOpen, LPCWSTR pwszClose)
{
- char mszOpen[256*3] = { '\0' };
- char mszClose[256*3] = { '\0' };
+ if (SciCall_IsSelectionRectangle())
+ {
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
+ }
+
+ char mszOpen[256 * 3] = { '\0' };
+ char mszClose[256 * 3] = { '\0' };
int iSelStart = SciCall_GetSelectionStart();
- int iSelEnd = SciCall_GetSelectionEnd();
+ int iSelEnd = SciCall_GetSelectionEnd();
UINT mbcp = Encoding_SciGetCodePage(hwnd);
if (lstrlen(pwszOpen))
- WideCharToMultiByteStrg(mbcp,pwszOpen,mszOpen);
+ WideCharToMultiByteStrg(mbcp, pwszOpen, mszOpen);
if (lstrlen(pwszClose))
- WideCharToMultiByteStrg(mbcp,pwszClose,mszClose);
+ WideCharToMultiByteStrg(mbcp, pwszClose, mszClose);
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0))
- {
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
+ const int iLenOpen = StringCchLenA(mszOpen, COUNTOF(mszOpen));
+ const int iLenClose = StringCchLenA(mszClose, COUNTOF(mszClose));
- if (StringCchLenA(mszOpen,COUNTOF(mszOpen))) {
- SciCall_SetSel(iSelStart, iSelStart);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)mszOpen);
- }
+ int token = BeginUndoAction();
- if (StringCchLenA(mszClose,COUNTOF(mszClose))) {
- SciCall_SetSel(iSelEnd + StringCchLenA(mszOpen, COUNTOF(mszOpen)),
- iSelEnd + StringCchLenA(mszOpen, COUNTOF(mszOpen)));
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)mszClose);
- }
-
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
-
- // Fix selection
- if (iSelStart == iSelEnd)
- SciCall_SetSel(iSelStart + StringCchLenA(mszOpen, COUNTOF(mszOpen)),
- iSelStart + StringCchLenA(mszOpen, COUNTOF(mszOpen)));
- else {
- int iCurPos = SciCall_GetCurrentPos();
- int iAnchorPos = SciCall_GetAnchor();
- if (iCurPos < iAnchorPos) {
- iCurPos = iSelStart + StringCchLenA(mszOpen,COUNTOF(mszOpen));
- iAnchorPos = iSelEnd + StringCchLenA(mszOpen,COUNTOF(mszOpen));
- }
- else {
- iAnchorPos = iSelStart + StringCchLenA(mszOpen,COUNTOF(mszOpen));
- iCurPos = iSelEnd + StringCchLenA(mszOpen,COUNTOF(mszOpen));
- }
- SciCall_SetSel(iAnchorPos, iCurPos);
- }
+ if (iLenOpen > 0) {
+ SciCall_SetSel(iSelStart, iSelStart);
+ SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)mszOpen);
}
- else
- MsgBox(MBWARN,IDS_SELRECT);
+
+ if (iLenClose > 0) {
+ SciCall_SetSel(iSelEnd + iLenOpen, iSelEnd + iLenOpen);
+ SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)mszClose);
+ }
+
+ // Fix selection
+ if (iSelStart == iSelEnd) {
+ const int iPos = iSelStart + iLenOpen;
+ EditSelectEx(hwnd, iPos, iPos);
+ }
+ else {
+ int iCurPos = SciCall_GetCurrentPos();
+ int iAnchorPos = SciCall_GetAnchor();
+
+ if (iCurPos < iAnchorPos) {
+ iCurPos = iSelStart + iLenOpen;
+ iAnchorPos = iSelEnd + iLenOpen;
+ }
+ else {
+ iAnchorPos = iSelStart + iLenOpen;
+ iCurPos = iSelEnd + iLenOpen;
+ }
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
+ }
+ EndUndoAction(token);
}
@@ -2844,7 +2846,7 @@ void EditToggleLineComments(HWND hwnd,LPCWSTR pwszComment,BOOL bInsertAtStart)
int cchComment = StringCchLenA(mszComment,COUNTOF(mszComment));
- if ((SC_SEL_RECTANGLE != SciCall_GetSelectionMode()) && (cchComment > 0))
+ if ((!SciCall_IsSelectionRectangle()) && (cchComment > 0))
{
int iCommentCol = 0;
int iLineStart = SciCall_LineFromPosition(iSelStart);
@@ -2870,7 +2872,10 @@ void EditToggleLineComments(HWND hwnd,LPCWSTR pwszComment,BOOL bInsertAtStart)
}
}
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
+ int token = BeginUndoAction();
+
+ IgnoreNotifyChangeEvent();
+ EditEnterTargetTransaction();
for (int iLine = iLineStart; iLine <= iLineEnd; iLine++)
{
@@ -2891,8 +2896,8 @@ void EditToggleLineComments(HWND hwnd,LPCWSTR pwszComment,BOOL bInsertAtStart)
case 0:
iAction = 2;
case 2:
- SciCall_SetSel(iIndentPos, iIndentPos + cchComment);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)"");
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iIndentPos, iIndentPos + cchComment);
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
break;
case 1:
break;
@@ -2913,7 +2918,9 @@ void EditToggleLineComments(HWND hwnd,LPCWSTR pwszComment,BOOL bInsertAtStart)
}
}
}
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+
+ EditLeaveTargetTransaction();
+ ObserveNotifyChangeEvent();
if (iSelStart != iSelEnd)
{
@@ -2926,9 +2933,10 @@ void EditToggleLineComments(HWND hwnd,LPCWSTR pwszComment,BOOL bInsertAtStart)
iAnchorPos = SciCall_PositionFromLine(iLineStart);
iCurPos = SciCall_PositionFromLine(iLineEnd + 1);
}
- SciCall_SetSel(iAnchorPos, iCurPos);
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
}
+ EndUndoAction(token);
}
else
MsgBox(MBWARN,IDS_SELRECT);
@@ -2946,6 +2954,7 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
int iLine = 0;
BOOL bIsRectangular = FALSE;
BOOL bReducedSelection = FALSE;
+ int token = -1;
int iSelStart = 0;
int iSelEnd = 0;
@@ -2958,7 +2967,7 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
int iRcCurCol = 0;
int iRcAnchorCol = 0;
- if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode()) {
+ if (!SciCall_IsSelectionRectangle()) {
iSelStart = SciCall_GetSelectionStart();
iSelEnd = SciCall_GetSelectionEnd();
@@ -3019,7 +3028,10 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
pmszPadStr[size] = '\0';
if (!bNoUndoGroup)
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
+ token = BeginUndoAction();
+
+ IgnoreNotifyChangeEvent();
+ EditEnterTargetTransaction();
for (iLine = iLineStart; iLine <= iLineEnd; iLine++) {
@@ -3042,18 +3054,23 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
//iCol += (int)SendMessage(hwnd, SCI_GETSELECTIONNCARETVIRTUALSPACE, 0, 0);
iPadLen = iMaxColumn - iCol;
pmszPadStr[iPadLen] = '\0';
- SciCall_SetSel(iPos, iPos);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)pmszPadStr);
+
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iPos, iPos);
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)-1, (LPARAM)pmszPadStr);
+
pmszPadStr[iPadLen] = ' ';
}
+ EditLeaveTargetTransaction();
+ ObserveNotifyChangeEvent();
+
if (pmszPadStr)
LocalFree(pmszPadStr);
-
- if (!bNoUndoGroup)
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
}
+ if (!bNoUndoGroup && (token >= 0))
+ EndUndoAction(token);
+
if (!bIsRectangular && (SciCall_LineFromPosition(iSelStart) != SciCall_LineFromPosition(iSelEnd)))
{
int iCurPos = SciCall_GetCurrentPos();
@@ -3072,7 +3089,7 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
else
iCurPos = SciCall_PositionFromLine(iLineEnd + 1);
}
- SciCall_SetSel(iAnchorPos, iCurPos);
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
}
else if (bIsRectangular)
{
@@ -3084,51 +3101,50 @@ void EditPadWithSpaces(HWND hwnd,BOOL bSkipEmpty,BOOL bNoUndoGroup)
}
+
//=============================================================================
//
// EditStripFirstCharacter()
//
void EditStripFirstCharacter(HWND hwnd)
{
- int iSelStart = SciCall_GetSelectionStart();
- int iSelEnd = SciCall_GetSelectionEnd();
+ int iSelStart = 0;
+ int iSelEnd = 0;
+ BOOL bIsSelEmpty = SciCall_IsSelectionEmpty();
- if (iSelStart == iSelEnd) {
- iSelStart = 0;
+ if (!bIsSelEmpty) {
+ if (SciCall_IsSelectionRectangle()) {
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
+ }
+ iSelStart = SciCall_GetSelectionStart();
+ iSelEnd = SciCall_GetSelectionEnd();
+ }
+ else {
iSelEnd = SciCall_GetTextLength();
}
- if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode())
- {
- int iLineStart = SciCall_LineFromPosition(iSelStart);
- int iLineEnd = SciCall_LineFromPosition(iSelEnd);
+ int iLineStart = SciCall_LineFromPosition(iSelStart);
+ int iLineEnd = SciCall_LineFromPosition(iSelEnd);
- if (iSelStart > SciCall_PositionFromLine(iLineStart))
- ++iLineStart;
+ if (iSelStart > SciCall_PositionFromLine(iLineStart)) { ++iLineStart; }
+ if (iSelEnd <= SciCall_PositionFromLine(iLineEnd)) { --iLineEnd; }
- if (iSelEnd <= SciCall_PositionFromLine(iLineEnd))
- --iLineEnd;
+ IgnoreNotifyChangeEvent();
+ EditEnterTargetTransaction();
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
-
- int chCnt = 0;
- for (int iLine = iLineStart; iLine <= iLineEnd; iLine++)
- {
- int iPos = SciCall_PositionFromLine(iLine);
- if ((SciCall_GetLineEndPosition(iLine) - iPos) > 0)
- {
- SciCall_SetSel(iPos, SciCall_PositionAfter(iPos));
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)"");
- ++chCnt;
- }
+ int chCnt = 0;
+ for (int iLine = iLineStart; iLine <= iLineEnd; ++iLine) {
+ int iPos = SciCall_PositionFromLine(iLine);
+ if (iPos < SciCall_GetLineEndPosition(iLine)) {
+ SendMessage(hwnd, SCI_SETTARGETRANGE, (WPARAM)iPos, (LPARAM)SciCall_PositionAfter(iPos));
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
+ ++chCnt;
}
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
-
- if ((iSelStart != 0) || (iSelEnd != SciCall_GetTextLength()))
- SciCall_SetSel(iSelStart, (iSelEnd - chCnt));
}
- else
- MsgBox(MBWARN,IDS_SELRECT);
+
+ EditLeaveTargetTransaction();
+ ObserveNotifyChangeEvent();
}
@@ -3138,47 +3154,45 @@ void EditStripFirstCharacter(HWND hwnd)
//
void EditStripLastCharacter(HWND hwnd)
{
- int iSelStart = SciCall_GetSelectionStart();
- int iSelEnd = SciCall_GetSelectionEnd();
+ int iSelStart = 0;
+ int iSelEnd = 0;
+ BOOL bIsSelEmpty = SciCall_IsSelectionEmpty();
- if (iSelStart == iSelEnd) {
- iSelStart = 0;
- iSelEnd = SciCall_GetTextLength();
- }
-
- if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode())
- {
- int iLineStart = SciCall_LineFromPosition(iSelStart);
- int iLineEnd = SciCall_LineFromPosition(iSelEnd);
-
-
- if (iSelStart >= SciCall_GetLineEndPosition(iLineStart))
- ++iLineStart;
-
- if (iSelEnd < SciCall_GetLineEndPosition(iLineEnd))
- iLineEnd--;
-
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
-
- int chCnt = 0;
- for (int iLine = iLineStart; iLine <= iLineEnd; iLine++)
- {
- int iStartPos = SciCall_PositionFromLine(iLine);
- int iEndPos = SciCall_GetLineEndPosition(iLine);
- if ((iEndPos - iStartPos) > 0)
- {
- SciCall_SetSel(SciCall_PositionBefore(iEndPos), iEndPos);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)"");
- ++chCnt;
- }
+ if (!bIsSelEmpty) {
+ if (SciCall_IsSelectionRectangle()) {
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
}
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
- if ((iSelStart != 0) || (iSelEnd != SciCall_GetTextLength()))
- SciCall_SetSel(iSelStart, (iSelEnd - chCnt));
+ iSelStart = SciCall_GetSelectionStart();
+ iSelEnd = SciCall_GetSelectionEnd();
}
- else
- MsgBox(MBWARN,IDS_SELRECT);
+ else {
+ iSelEnd = SciCall_GetTextLength();
+ }
+
+ int iLineStart = SciCall_LineFromPosition(iSelStart);
+ int iLineEnd = SciCall_LineFromPosition(iSelEnd);
+
+ if (iSelStart >= SciCall_GetLineEndPosition(iLineStart)) { ++iLineStart; }
+ if (iSelEnd < SciCall_GetLineEndPosition(iLineEnd)) { --iLineEnd; }
+
+ IgnoreNotifyChangeEvent();
+ EditEnterTargetTransaction();
+
+ for (int iLine = iLineStart; iLine <= iLineEnd; ++iLine)
+ {
+ int iStartPos = SciCall_PositionFromLine(iLine);
+ int iEndPos = SciCall_GetLineEndPosition(iLine);
+ if (iStartPos < iEndPos)
+ {
+ SendMessage(hwnd, SCI_SETTARGETRANGE, (WPARAM)SciCall_PositionBefore(iEndPos), (LPARAM)iEndPos);
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
+ }
+ }
+
+ EditLeaveTargetTransaction();
+ ObserveNotifyChangeEvent();
}
@@ -3186,46 +3200,54 @@ void EditStripLastCharacter(HWND hwnd)
//
// EditStripTrailingBlanks()
//
-void EditStripTrailingBlanks(HWND hwnd,BOOL bIgnoreSelection)
+void EditStripTrailingBlanks(HWND hwnd, BOOL bIgnoreSelection)
{
- // Check if there is any selection... simply use a regular expression replace!
- if (!bIgnoreSelection && !SciCall_IsSelectionEmpty())
- {
- if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode())
- {
- EDITFINDREPLACE efrTrim = { "[ \t]+$", "", "", "", SCFIND_NP3_REGEX, 0, 0, 0, 0, 0, 0, 0, 0, NULL };
- efrTrim.hwnd = hwnd;
- EditReplaceAllInSelection(hwnd,&efrTrim,FALSE);
- }
- else
- MsgBox(MBWARN,IDS_SELRECT);
- }
- // Code from SciTE...
- else
- {
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
- int maxLines = SciCall_GetLineCount();
- for (int line = 0; line < maxLines; line++)
- {
- int lineStart = SciCall_PositionFromLine(line);
- int lineEnd = SciCall_GetLineEndPosition(line);
- int i = lineEnd;
- char ch = '\0';
- do {
- --i;
- ch = SciCall_GetCharAt(i);
- }
- while ((i >= lineStart) && ((ch == ' ') || (ch == '\t')));
+ int iSelStart = 0;
+ int iSelEnd = 0;
- if (i < (lineEnd-1))
- {
- SciCall_SetSel(i + 1, lineEnd);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)"");
- }
+ if (!bIgnoreSelection && !SciCall_IsSelectionEmpty()) {
+ if (SciCall_IsSelectionRectangle()) {
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
}
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+
+ iSelStart = SciCall_GetSelectionStart();
+ iSelEnd = SciCall_GetSelectionEnd();
}
+ else {
+ iSelEnd = SciCall_GetTextLength();
+ }
+
+ int iLineStart = SciCall_LineFromPosition(iSelStart);
+ int iLineEnd = SciCall_LineFromPosition(iSelEnd);
+
+ if (iSelStart >= SciCall_GetLineEndPosition(iLineStart)) { ++iLineStart; }
+ if (iSelEnd < SciCall_GetLineEndPosition(iLineEnd)) { --iLineEnd; }
+
+
+ IgnoreNotifyChangeEvent();
+ EditEnterTargetTransaction();
+
+ for (int iLine = iLineStart; iLine <= iLineEnd; ++iLine)
+ {
+ int iStartPos = SciCall_PositionFromLine(iLine);
+ int iEndPos = SciCall_GetLineEndPosition(iLine);
+
+ int i = iEndPos;
+ char ch = '\0';
+ do {
+ ch = SciCall_GetCharAt(--i);
+ } while ((i >= iStartPos) && ((ch == ' ') || (ch == '\t')));
+
+ if ((i + 1) < iEndPos) {
+ SendMessage(hwnd, SCI_SETTARGETRANGE, (WPARAM)(i + 1), (LPARAM)iEndPos);
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
+ }
+ }
+
+ EditLeaveTargetTransaction();
+ ObserveNotifyChangeEvent();
}
//=============================================================================
@@ -3234,95 +3256,93 @@ void EditStripTrailingBlanks(HWND hwnd,BOOL bIgnoreSelection)
//
void EditCompressSpaces(HWND hwnd)
{
- if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode())
- {
- int iSelStart = SciCall_GetSelectionStart();
- int iSelEnd = SciCall_GetSelectionEnd();
- int iCurPos = SciCall_GetCurrentPos();
- int iAnchorPos = SciCall_GetAnchor();
- int iLineStart = SciCall_LineFromPosition(iSelStart);
- int iLineEnd = SciCall_LineFromPosition(iSelEnd);
- int iLength = SciCall_GetTextLength();
-
- char* pszIn;
- char* pszOut;
- BOOL bIsLineStart, bIsLineEnd;
- BOOL bModified = FALSE;
-
- if (iSelStart != iSelEnd) {
- int cch = (int)SendMessage(hwnd,SCI_GETSELTEXT,0,0);
- pszIn = LocalAlloc(LPTR,cch);
- pszOut = LocalAlloc(LPTR,cch);
- SendMessage(hwnd,SCI_GETSELTEXT,0,(LPARAM)pszIn);
- bIsLineStart = (iSelStart == SciCall_PositionFromLine(iLineStart));
- bIsLineEnd = (iSelEnd == SciCall_GetLineEndPosition(iLineEnd));
- }
- else {
- int cch = iLength + 1;
- pszIn = LocalAlloc(GPTR,cch);
- pszOut = LocalAlloc(GPTR,cch);
- SendMessage(hwnd,SCI_GETTEXT,(WPARAM)cch,(LPARAM)pszIn);
- bIsLineStart = TRUE;
- bIsLineEnd = TRUE;
- }
-
- if (pszIn && pszOut) {
- char *ci, *co = pszOut;
- for (ci = pszIn; *ci; ci++) {
- if (*ci == ' ' || *ci == '\t') {
- if (*ci == '\t')
- bModified = TRUE;
- while (*(ci+1) == ' ' || *(ci+1) == '\t') {
- ci++;
- bModified = TRUE;
- }
- if (!bIsLineStart && (*(ci+1) != '\n' && *(ci+1) != '\r'))
- *co++ = ' ';
- else
- bModified = TRUE;
- }
- else {
- if (*ci == '\n' || *ci == '\r')
- bIsLineStart = TRUE;
- else
- bIsLineStart = FALSE;
- *co++ = *ci;
- }
- }
- if (bIsLineEnd && co > pszOut && *(co-1) == ' ') {
- *--co = 0;
- bModified = TRUE;
- }
-
- if (bModified) {
- if (iSelStart != iSelEnd) {
- SciCall_SetSel(iSelStart, iSelEnd);
- }
- else {
- SciCall_SetSel(0, iLength);
- }
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)pszOut);
-
- if (iCurPos > iAnchorPos) {
- iCurPos = SciCall_GetCurrentPos();
- iAnchorPos = iSelStart;
- }
- else if (iCurPos < iAnchorPos) {
- iCurPos = iSelStart;
- iAnchorPos = SciCall_GetCurrentPos();
- }
- SciCall_SetSel(iAnchorPos, iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
- }
- }
- if (pszIn)
- LocalFree(pszIn);
- if (pszOut)
- LocalFree(pszOut);
+ if (SciCall_IsSelectionRectangle()) {
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
}
- else
- MsgBox(MBWARN,IDS_SELRECT);
+
+ const int iCurPos = SciCall_GetCurrentPos();
+ const int iAnchorPos = SciCall_GetAnchor();
+ const int iLineStart = SciCall_LineFromPosition(min(iCurPos, iAnchorPos));
+ const int iLineEnd = SciCall_LineFromPosition(max(iCurPos, iAnchorPos));
+ const int iTxtLength = SciCall_GetTextLength();
+
+ const char* pszIn = NULL;
+ char* pszOut = NULL;
+ BOOL bIsLineStart = TRUE;
+ BOOL bIsLineEnd = TRUE;
+ BOOL bModified = FALSE;
+
+ int cch = 0;
+ if (SciCall_IsSelectionEmpty()) {
+ pszIn = (const char*)SciCall_GetCharacterPointer();
+ cch = iTxtLength + 1;
+ pszOut = LocalAlloc(GPTR, cch);
+ }
+ else {
+ pszIn = (const char*)SciCall_GetRangePointer(min(iCurPos, iAnchorPos), abs(iCurPos - iAnchorPos));
+ cch = (int)SendMessage(hwnd, SCI_GETSELTEXT, 0, 0);
+ pszOut = LocalAlloc(LPTR,cch);
+ bIsLineStart = (min(iCurPos, iAnchorPos) == SciCall_PositionFromLine(iLineStart));
+ bIsLineEnd = (max(iCurPos, iAnchorPos) == SciCall_GetLineEndPosition(iLineEnd));
+ }
+
+ if (pszIn && pszOut) {
+ char* co = (char*)pszOut;
+ for (int i = 0; i < cch; ++i) {
+ if (pszIn[i] == ' ' || pszIn[i] == '\t') {
+ if (pszIn[i] == '\t')
+ bModified = TRUE;
+ while (pszIn[i+1] == ' ' || pszIn[i+1] == '\t') {
+ ++i;
+ bModified = TRUE;
+ }
+ if (!bIsLineStart && (pszIn[i+1] != '\n' && pszIn[i+1] != '\r'))
+ *co++ = ' ';
+ else
+ bModified = TRUE;
+ }
+ else {
+ if (pszIn[i] == '\n' || pszIn[i] == '\r')
+ bIsLineStart = TRUE;
+ else
+ bIsLineStart = FALSE;
+ *co++ = pszIn[i];
+ }
+ }
+ if (bIsLineEnd && (co > pszOut) && (*(co-1) == ' ')) {
+ *--co = '\0';
+ bModified = TRUE;
+ }
+
+ if (bModified) {
+
+ EditEnterTargetTransaction();
+
+ if (!SciCall_IsSelectionEmpty()) {
+ SendMessage(hwnd, SCI_TARGETFROMSELECTION, 0, 0);
+ }
+ else {
+ SendMessage(hwnd, SCI_SETTARGETRANGE, 0, iTxtLength);
+ }
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)-1, (LPARAM)pszOut);
+
+ EditLeaveTargetTransaction();
+
+ const int iNewLen = StringCchLenA(pszOut, LocalSize(pszOut));
+
+ if (iCurPos > iAnchorPos) {
+ EditSelectEx(hwnd, iAnchorPos, iAnchorPos + iNewLen);
+ }
+ else if (iCurPos < iAnchorPos) {
+ EditSelectEx(hwnd, iCurPos, iCurPos + iNewLen);
+ }
+ else {
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
+ }
+ }
+ }
+ if (pszOut) { LocalFree(pszOut); }
}
@@ -3340,41 +3360,43 @@ void EditRemoveBlankLines(HWND hwnd,BOOL bMerge)
iSelEnd = SciCall_GetTextLength();
}
- if (SC_SEL_RECTANGLE != SciCall_GetSelectionMode())
- {
- int iLineStart = SciCall_LineFromPosition(iSelStart);
- int iLineEnd = SciCall_LineFromPosition(iSelEnd);
-
- if (iSelStart > SciCall_PositionFromLine(iLineStart))
- ++iLineStart;
-
- if ((iSelEnd <= SciCall_PositionFromLine(iLineEnd)) && (iLineEnd != SciCall_GetLineCount() - 1))
- --iLineEnd;
-
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
-
- for (int iLine = iLineStart; iLine <= iLineEnd; )
- {
- int nBlanks = 0;
- while (((iLine + nBlanks) <= iLineEnd) &&
- (SciCall_PositionFromLine(iLine + nBlanks) == SciCall_GetLineEndPosition(iLine + nBlanks))) {
- ++nBlanks;
- }
- if ((nBlanks == 0) || ((nBlanks == 1) && bMerge)) {
- iLine += (nBlanks + 1);
- }
- else {
- if (bMerge) { --nBlanks; }
- SciCall_SetSel(SciCall_PositionFromLine(iLine), SciCall_PositionFromLine(iLine + nBlanks));
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)"");
- if (bMerge) { ++iLine; }
- iLineEnd -= nBlanks;
- }
- }
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+ if (SciCall_IsSelectionRectangle()) {
+ MsgBox(MBWARN, IDS_SELRECT);
+ return;
}
- else
- MsgBox(MBWARN,IDS_SELRECT);
+
+ int iLineStart = SciCall_LineFromPosition(iSelStart);
+ int iLineEnd = SciCall_LineFromPosition(iSelEnd);
+
+ if (iSelStart > SciCall_PositionFromLine(iLineStart)) { ++iLineStart; }
+ if ((iSelEnd <= SciCall_PositionFromLine(iLineEnd)) && (iLineEnd != SciCall_GetLineCount() - 1)) { --iLineEnd; }
+
+ IgnoreNotifyChangeEvent();
+ EditEnterTargetTransaction();
+
+ for (int iLine = iLineStart; iLine <= iLineEnd; )
+ {
+ int nBlanks = 0;
+ while (((iLine + nBlanks) <= iLineEnd) &&
+ (SciCall_PositionFromLine(iLine + nBlanks) == SciCall_GetLineEndPosition(iLine + nBlanks))) {
+ ++nBlanks;
+ }
+ if ((nBlanks == 0) || ((nBlanks == 1) && bMerge)) {
+ iLine += (nBlanks + 1);
+ }
+ else {
+ if (bMerge) { --nBlanks; }
+
+ SendMessage(hwnd, SCI_SETTARGETRANGE, SciCall_PositionFromLine(iLine), SciCall_PositionFromLine(iLine + nBlanks));
+ SendMessage(hwnd, SCI_REPLACETARGET, 0, (LPARAM)"");
+
+ if (bMerge) { ++iLine; }
+ iLineEnd -= nBlanks;
+ }
+ }
+
+ EditLeaveTargetTransaction();
+ ObserveNotifyChangeEvent();
}
@@ -3389,7 +3411,7 @@ void EditWrapToColumn(HWND hwnd,int nColumn/*,int nTabWidth*/)
if (SciCall_IsSelectionEmpty())
return;
- if (SC_SEL_RECTANGLE == SciCall_GetSelectionMode()) {
+ if (SciCall_IsSelectionRectangle()) {
MsgBox(MBWARN,IDS_SELRECT);
return;
}
@@ -3558,11 +3580,12 @@ void EditWrapToColumn(HWND hwnd,int nColumn/*,int nTabWidth*/)
iCurPos = iSelStart + cchConvM;
}
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
- SciCall_SetSel(iSelStart, iSelEnd);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)pszText);
- SciCall_SetSel(iAnchorPos, iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
+ EditEnterTargetTransaction();
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iSelStart, iSelEnd);
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cchConvM, (LPARAM)pszText);
+ EditLeaveTargetTransaction();
+
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
GlobalFree(pszText);
}
@@ -3589,7 +3612,7 @@ void EditJoinLinesEx(HWND hwnd, BOOL bPreserveParagraphs, BOOL bCRLF2Space)
if (SciCall_IsSelectionEmpty())
return;
- if (SC_SEL_RECTANGLE == SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) {
+ if (SciCall_IsSelectionRectangle()) {
MsgBox(MBWARN,IDS_SELRECT);
return;
}
@@ -3654,24 +3677,25 @@ void EditJoinLinesEx(HWND hwnd, BOOL bPreserveParagraphs, BOOL bCRLF2Space)
pszJoin[++cchJoin] = pszText[i]; // copy char
}
}
+ ++cchJoin; // start at -1
if (bModified) {
if (iAnchorPos > iCurPos) {
iCurPos = iSelStart;
- iAnchorPos = iSelStart + cchJoin + 1;
+ iAnchorPos = iSelStart + cchJoin;
}
else {
iAnchorPos = iSelStart;
- iCurPos = iSelStart + cchJoin + 1;
+ iCurPos = iSelStart + cchJoin;
}
- SendMessage(hwnd,SCI_BEGINUNDOACTION,0,0);
- SciCall_SetSel(iSelStart, iSelEnd);
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)pszJoin);
- SciCall_SetSel(iAnchorPos, iCurPos);
- SendMessage(hwnd,SCI_ENDUNDOACTION,0,0);
- }
+ EditEnterTargetTransaction();
+ SendMessage(hwnd, SCI_SETTARGETRANGE, iSelStart, iSelEnd);
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)cchJoin, (LPARAM)pszJoin);
+ EditLeaveTargetTransaction();
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
+ }
LocalFree(pszJoin);
}
@@ -3722,6 +3746,7 @@ int CmpLogicalRev(const void *s1, const void *s2) {
}
}
+
void EditSortLines(HWND hwnd, int iSortFlags)
{
BOOL bIsRectangular = FALSE;
@@ -3759,7 +3784,7 @@ void EditSortLines(HWND hwnd, int iSortFlags)
pfnStrCmpLogicalW = GetProcAddress(GetModuleHandle(L"shlwapi"), "StrCmpLogicalW");
pfnStrCmp = (iSortFlags & SORT_NOCASE) ? StrCmpIW : StrCmpW;
- if (SC_SEL_RECTANGLE == SendMessage(hwnd, SCI_GETSELECTIONMODE, 0, 0)) {
+ if (SciCall_IsSelectionRectangle()) {
bIsRectangular = TRUE;
@@ -3817,7 +3842,6 @@ void EditSortLines(HWND hwnd, int iSortFlags)
iTabWidth = (UINT)SendMessage(hwnd, SCI_GETTABWIDTH, 0, 0);
- SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
if (bIsRectangular)
EditPadWithSpaces(hwnd, !(iSortFlags & SORT_SHUFFLE), TRUE);
@@ -3937,22 +3961,23 @@ void EditSortLines(HWND hwnd, int iSortFlags)
}
LocalFree(pLines);
-
+ int iResultLength = StringCchLenA(pmszResult, lenRes);
if (!bIsRectangular) {
if (iAnchorPos > iCurPos) {
iCurPos = iSelStart;
- iAnchorPos = iSelStart + StringCchLenA(pmszResult, lenRes);
+ iAnchorPos = iSelStart + iResultLength;
}
else {
iAnchorPos = iSelStart;
- iCurPos = iSelStart + StringCchLenA(pmszResult, lenRes);
+ iCurPos = iSelStart + iResultLength;
}
}
+ EditEnterTargetTransaction();
- SendMessage(hwnd, SCI_SETSEL, SciCall_PositionFromLine(iLineStart), SciCall_PositionFromLine(iLineEnd + 1));
- SendMessage(hwnd, SCI_REPLACESEL, 0, (LPARAM)pmszResult);
+ SendMessage(hwnd, SCI_SETTARGETRANGE, SciCall_PositionFromLine(iLineStart), SciCall_PositionFromLine(iLineEnd + 1));
+ SendMessage(hwnd, SCI_REPLACETARGET, (WPARAM)-1, (LPARAM)pmszResult);
- SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
+ EditLeaveTargetTransaction();
LocalFree(pmszResult);
@@ -3963,8 +3988,9 @@ void EditSortLines(HWND hwnd, int iSortFlags)
SendMessage(hwnd, SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (WPARAM)iCurPosVS, 0);
}
else {
- SendMessage(hwnd, SCI_SETSEL, (WPARAM)iAnchorPos, (LPARAM)iCurPos);
+ EditSelectEx(hwnd, iAnchorPos, iCurPos);
}
+
}
@@ -3974,6 +4000,13 @@ void EditSortLines(HWND hwnd, int iSortFlags)
//
void EditSelectEx(HWND hwnd, int iAnchorPos, int iCurrentPos)
{
+ if (iAnchorPos < 0) {
+ iAnchorPos = ((iCurrentPos >= 0) ? iCurrentPos : 0);
+ }
+ if (iCurrentPos < 0) {
+ iCurrentPos = ((iAnchorPos >= 0) ? iAnchorPos : 0);
+ }
+
int iNewLine = SciCall_LineFromPosition(iCurrentPos);
int iAnchorLine = SciCall_LineFromPosition(iAnchorPos);
@@ -3983,11 +4016,14 @@ void EditSelectEx(HWND hwnd, int iAnchorPos, int iCurrentPos)
if (iAnchorLine != iNewLine) {
SciCall_EnsureVisible(iNewLine);
}
- SendMessage(hwnd, SCI_SETXCARETPOLICY, CARET_SLOP | CARET_STRICT | CARET_EVEN, 50);
- SendMessage(hwnd, SCI_SETYCARETPOLICY, CARET_SLOP | CARET_STRICT | CARET_EVEN, 5);
- SendMessage(hwnd, SCI_SETSEL, iAnchorPos, iCurrentPos);
- SendMessage(hwnd, SCI_SETXCARETPOLICY, CARET_SLOP | CARET_EVEN, 50);
- SendMessage(hwnd, SCI_SETYCARETPOLICY, CARET_EVEN, 0);
+
+ SciCall_SetSel(iAnchorPos, iCurrentPos);
+ SciCall_ScrollRange(iAnchorPos, iCurrentPos);
+
+ // remember x-pos for moving caret vertically
+ SendMessage(hwnd, SCI_CHOOSECARETX, 0, 0);
+
+ UpdateStatusbar();
}
@@ -3997,7 +4033,7 @@ void EditSelectEx(HWND hwnd, int iAnchorPos, int iCurrentPos)
//
void EditJumpTo(HWND hwnd,int iNewLine,int iNewCol)
{
- // Jumpt to end with line set to -1
+ // jump to end with line set to -1
if (iNewLine < 0) {
SendMessage(hwnd, SCI_DOCUMENTEND, 0, 0);
return;
@@ -4014,10 +4050,8 @@ void EditJumpTo(HWND hwnd,int iNewLine,int iNewCol)
const int iNewPos = (int)SendMessage(hwnd, SCI_FINDCOLUMN, (WPARAM)iNewLine, (LPARAM)iNewCol);
- EditSelectEx(hwnd, -1, iNewPos); // SCI_GOTOPOS(pos) is equivalent to SCI_SETSEL(-1, pos)
+ EditSelectEx(hwnd, iNewPos, iNewPos); // <= SCI_GOTOPOS(pos)
- // remember x-pos for moving caret vertivally
- SendMessage(hwnd, SCI_CHOOSECARETX, 0, 0);
}
@@ -4036,7 +4070,7 @@ void EditFixPositions(HWND hwnd)
int iNewPos = SciCall_PositionAfter( SciCall_PositionBefore(iCurrentPos) );
if (iNewPos != iCurrentPos) {
- SendMessage(hwnd,SCI_SETCURRENTPOS,(WPARAM)iNewPos,0);
+ SciCall_SetCurrentPos(iNewPos);
iCurrentPos = iNewPos;
}
}
@@ -4044,10 +4078,11 @@ void EditFixPositions(HWND hwnd)
if ((iAnchorPos != iCurrentPos) && (iAnchorPos > 0) && (iAnchorPos < iMaxPos))
{
int iNewPos = SciCall_PositionAfter(SciCall_PositionBefore(iAnchorPos));
-
- if (iNewPos != iAnchorPos)
- SendMessage(hwnd,SCI_SETANCHOR,(WPARAM)iNewPos,0);
+ if (iNewPos != iAnchorPos) {
+ SciCall_SetAnchor(iNewPos);
+ }
}
+ UNUSED(hwnd);
}
@@ -4057,15 +4092,10 @@ void EditFixPositions(HWND hwnd)
//
void EditEnsureSelectionVisible(HWND hwnd)
{
- int iAnchorPos = (int)SendMessage(hwnd,SCI_GETANCHOR,0,0);
- int iCurrentPos = (int)SendMessage(hwnd,SCI_GETCURRENTPOS,0,0);
- SendMessage(hwnd,SCI_ENSUREVISIBLE,
- (WPARAM)SendMessage(hwnd,SCI_LINEFROMPOSITION,(WPARAM)iAnchorPos,0),0);
- if (iAnchorPos != iCurrentPos) {
- SendMessage(hwnd,SCI_ENSUREVISIBLE,
- (WPARAM)SendMessage(hwnd,SCI_LINEFROMPOSITION,(WPARAM)iCurrentPos,0),0);
- }
- EditSelectEx(hwnd,iAnchorPos,iCurrentPos);
+ int iAnchorPos = SciCall_GetAnchor();
+ int iCurrentPos = SciCall_GetCurrentPos();
+ EditSelectEx(hwnd, iAnchorPos, iCurrentPos);
+ UNUSED(hwnd);
}
@@ -4078,14 +4108,14 @@ void EditGetExcerpt(HWND hwnd,LPWSTR lpszExcerpt,DWORD cchExcerpt)
int iCurPos = (int)SendMessage(hwnd,SCI_GETCURRENTPOS,0,0);
int iAnchorPos = (int)SendMessage(hwnd,SCI_GETANCHOR,0,0);
- if (iCurPos == iAnchorPos || SC_SEL_RECTANGLE == SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) {
+ if (iCurPos == iAnchorPos || SciCall_IsSelectionRectangle()) {
StringCchCopy(lpszExcerpt,cchExcerpt,L"");
return;
}
WCHAR tch[256] = { L'\0' };
struct Sci_TextRange tr = { { 0, 0 }, NULL };
- /*if (iCurPos != iAnchorPos && SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) {*/
+ /*if (iCurPos != iAnchorPos && !SciCall_IsSelectionRectangle()) {*/
tr.chrg.cpMin = (int)SendMessage(hwnd,SCI_GETSELECTIONSTART,0,0);
tr.chrg.cpMax = min((int)SendMessage(hwnd,SCI_GETSELECTIONEND,0,0),(LONG)(tr.chrg.cpMin + COUNTOF(tch)));
/*}
@@ -5198,8 +5228,8 @@ BOOL EditFindNext(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bExtendSelection) {
}
if (bExtendSelection) {
- int iSelPos = (int)SendMessage(hwnd, SCI_GETCURRENTPOS, 0, 0);
- int iSelAnchor = (int)SendMessage(hwnd, SCI_GETANCHOR, 0, 0);
+ int iSelPos = SciCall_GetCurrentPos();
+ int iSelAnchor = SciCall_GetAnchor();
EditSelectEx(hwnd, min(iSelAnchor, iSelPos), end);
}
else {
@@ -5266,8 +5296,8 @@ BOOL EditFindPrev(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bExtendSelection) {
}
if (bExtendSelection) {
- int iSelPos = (int)SendMessage(hwnd, SCI_GETCURRENTPOS, 0, 0);
- int iSelAnchor = (int)SendMessage(hwnd, SCI_GETANCHOR, 0, 0);
+ int iSelPos = SciCall_GetCurrentPos();
+ int iSelAnchor = SciCall_GetAnchor();
EditSelectEx(hwnd, max(iSelPos, iSelAnchor), start);
}
else {
@@ -5286,7 +5316,7 @@ void EditMarkAllOccurrences()
{
if (iMarkOccurrences != 0) {
- if (EditEnterTargetTransaction()) { return; } // do not block, next event occurs for sure
+ if (EditIsInTargetTransaction()) { return; } // do not block, next event occurs for sure
if (bMarkOccurrencesMatchVisible)
{
@@ -5315,13 +5345,13 @@ void EditMarkAllOccurrences()
//=============================================================================
//
-// EditUpdateVisibleUrlHotspotr()
+// EditUpdateVisibleUrlHotspot()
//
-void EditUpdateVisibleUrlHotspot()
+void EditUpdateVisibleUrlHotspot(BOOL bEnabled)
{
- if (bHyperlinkHotspot)
+ if (bEnabled)
{
- if (EditEnterTargetTransaction()) { return; } // do not block, next event occurs for sure
+ if (EditIsInTargetTransaction()) { return; } // do not block, next event occurs for sure
// get visible lines for update
int iFirstVisibleLine = SciCall_DocLineFromVisible(SciCall_GetFirstVisibleLine());
@@ -5332,7 +5362,7 @@ void EditUpdateVisibleUrlHotspot()
int iPosStart = SciCall_PositionFromLine(iStartLine);
int iPosEnd = SciCall_GetLineEndPosition(iEndLine);
- EditUpdateUrlHotspots(g_hwndEdit, iPosStart, iPosEnd, bHyperlinkHotspot);
+ EditUpdateUrlHotspots(g_hwndEdit, iPosStart, iPosEnd, bEnabled);
EditLeaveTargetTransaction();
}
@@ -5487,9 +5517,6 @@ int EditReplaceAllInRange(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bShowInfo, i
int iCount = utarray_len(ReplPosUTArray);
- if (iCount > 0)
- SendMessage(hwnd, SCI_BEGINUNDOACTION, 0, 0);
-
// === iterate over findings and replace strings ===
int offset = 0;
@@ -5522,9 +5549,6 @@ int EditReplaceAllInRange(HWND hwnd, LPCEDITFINDREPLACE lpefr, BOOL bShowInfo, i
utarray_free(ReplPosUTArray);
LocalFree(pszReplace);
- if (iCount > 0)
- SendMessage(hwnd, SCI_ENDUNDOACTION, 0, 0);
-
if (bShowInfo) {
if (iCount > 0)
InfoBox(0, L"MsgReplaceCount", IDS_REPLCOUNT, iCount);
@@ -5545,11 +5569,11 @@ BOOL EditReplaceAll(HWND hwnd,LPCEDITFINDREPLACE lpefr,BOOL bShowInfo)
int start = 0;
int end = SciCall_GetTextLength();
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
int iCount = EditReplaceAllInRange(hwnd, lpefr, bShowInfo, start, end);
- EndSelUndoAction(token);
+ EndUndoAction(token);
return (iCount > 0) ? TRUE : FALSE;
}
@@ -5561,19 +5585,19 @@ BOOL EditReplaceAll(HWND hwnd,LPCEDITFINDREPLACE lpefr,BOOL bShowInfo)
//
BOOL EditReplaceAllInSelection(HWND hwnd,LPCEDITFINDREPLACE lpefr,BOOL bShowInfo)
{
- if (SC_SEL_RECTANGLE == SciCall_GetSelectionMode()) {
+ if (SciCall_IsSelectionRectangle()) {
MsgBox(MBWARN, IDS_SELRECT);
return FALSE;
}
- int token = BeginSelUndoAction();
-
int start = SciCall_GetSelectionStart();
int end = SciCall_GetSelectionEnd();
+ int token = BeginUndoAction();
+
int iCount = EditReplaceAllInRange(hwnd, lpefr, bShowInfo, start, end);
- EndSelUndoAction(token);
+ EndUndoAction(token);
if (iCount <= 0)
return FALSE;
@@ -5995,16 +6019,14 @@ INT_PTR CALLBACK EditLinenumDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPa
case WM_INITDIALOG:
{
- int iCurLine = (int)SendMessage(g_hwndEdit,SCI_LINEFROMPOSITION,
- SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0),0)+1;
+ int iCurLine = SciCall_LineFromPosition(SciCall_GetCurrentPos())+1;
+ int iCurColumn = SciCall_GetColumn(SciCall_GetCurrentPos()) + 1;
SetDlgItemInt(hwnd,IDC_LINENUM,iCurLine,FALSE);
+ SetDlgItemInt(hwnd, IDC_COLNUM, iCurColumn, FALSE);
SendDlgItemMessage(hwnd,IDC_LINENUM,EM_LIMITTEXT,15,0);
-
SendDlgItemMessage(hwnd,IDC_COLNUM,EM_LIMITTEXT,15,0);
-
CenterDlgInParent(hwnd);
-
}
return TRUE;
@@ -6037,14 +6059,13 @@ INT_PTR CALLBACK EditLinenumDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPa
return TRUE;
}
- if (iNewLine > 0 && iNewLine <= iMaxLine && iNewCol > 0)
+ if ((iNewLine > 0) && (iNewLine <= iMaxLine) && (iNewCol > 0))
{
EditJumpTo(g_hwndEdit,iNewLine,iNewCol);
EndDialog(hwnd,IDOK);
}
-
else
- PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,(!(iNewLine > 0 && iNewLine <= iMaxLine)) ? IDC_LINENUM : IDC_COLNUM)),1);
+ PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,(!((iNewLine > 0) && (iNewLine <= iMaxLine))) ? IDC_LINENUM : IDC_COLNUM)),1);
}
break;
@@ -6609,7 +6630,7 @@ INT_PTR CALLBACK EditSortDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam
DialogEnableWindow(hwnd,107,FALSE);
bEnableLogicalSort = FALSE;
}
- if (SC_SEL_RECTANGLE != SendMessage(g_hwndEdit,SCI_GETSELECTIONMODE,0,0)) {
+ if (!SciCall_IsSelectionRectangle()) {
*piSortFlags &= ~SORT_COLUMN;
DialogEnableWindow(hwnd,108,FALSE);
}
diff --git a/src/Edit.h b/src/Edit.h
index bbc57b239..6874f5c36 100644
--- a/src/Edit.h
+++ b/src/Edit.h
@@ -133,10 +133,11 @@ void EditApplyLexerStyle(HWND, int, int);
void EditFinalizeStyling(HWND,int);
void EditMarkAllOccurrences();
-void EditUpdateVisibleUrlHotspot();
+void EditUpdateVisibleUrlHotspot(BOOL);
-BOOL EditEnterTargetTransaction();
-BOOL EditLeaveTargetTransaction();
+void EditEnterTargetTransaction();
+void EditLeaveTargetTransaction();
+BOOL EditIsInTargetTransaction();
//void SciInitThemes(HWND);
//LRESULT CALLBACK SciThemedWndProc(HWND,UINT,WPARAM,LPARAM);
diff --git a/src/Notepad3.c b/src/Notepad3.c
index fb29b7640..d5474bb50 100644
--- a/src/Notepad3.c
+++ b/src/Notepad3.c
@@ -190,6 +190,7 @@ int iSciFontQuality;
int iHighDpiToolBar;
int iUpdateDelayHyperlinkStyling;
int iUpdateDelayMarkAllCoccurrences;
+int iCurrentLineVerticalSlop = 5;
const int DirectWriteTechnology[4] = {
SC_TECHNOLOGY_DEFAULT
@@ -251,7 +252,6 @@ LPMRULIST mruReplace;
DWORD dwLastIOError;
WCHAR szCurFile[FILE_ARG_BUF] = { L'\0' };
FILEVARS fvCurFile;
-BOOL bModified;
BOOL bReadOnly = FALSE;
int iDefaultEncoding;
@@ -305,8 +305,9 @@ int iAlignMode = 0;
BOOL flagIsElevated = FALSE;
WCHAR wchWndClass[16] = WC_NOTEPAD3;
-HINSTANCE g_hInstance;
-HANDLE g_hScintilla;
+
+HINSTANCE g_hInstance = NULL;
+HANDLE g_hScintilla = NULL;
WCHAR g_wchAppUserModelID[32] = { L'\0' };
WCHAR g_wchWorkingDirectory[MAX_PATH+2] = { L'\0' };
@@ -321,13 +322,34 @@ static PDROPTARGET pDropTarget = NULL;
static DWORD DropFilesProc(CLIPFORMAT cf, HGLOBAL hData, HWND hWnd, DWORD dwKeyState, POINTL pt, void *pUserData);
// Timer bitfield
-static volatile LONG g_lTimerBits = 0;
+static volatile LONG g_lInterlockBits = 0;
#define TIMER_BIT_MARK_OCC 1L
#define TIMER_BIT_UPDATE_HYPER 2L
-#define TEST_AND_SET(B) InterlockedBitTestAndSet(&g_lTimerBits, B)
-#define TEST_AND_RESET(B) InterlockedBitTestAndReset(&g_lTimerBits, B)
+#define LOCK_NOTIFY_CHANGE 4L
+#define TEST_AND_SET(B) InterlockedBitTestAndSet(&g_lInterlockBits, B)
+#define TEST_AND_RESET(B) InterlockedBitTestAndReset(&g_lInterlockBits, B)
+//=============================================================================
+//
+// IgnoreNotifyChangeEvent(), ObserveNotifyChangeEvent(), CheckNotifyChangeEvent()
+//
+void IgnoreNotifyChangeEvent() {
+ (void)TEST_AND_SET(LOCK_NOTIFY_CHANGE);
+}
+
+void ObserveNotifyChangeEvent() {
+ (void)TEST_AND_RESET(LOCK_NOTIFY_CHANGE);
+}
+
+BOOL CheckNotifyChangeEvent() {
+ if (TEST_AND_RESET(LOCK_NOTIFY_CHANGE)) {
+ (void)TEST_AND_SET(LOCK_NOTIFY_CHANGE);
+ return FALSE;
+ }
+ return TRUE;
+}
+
// SCN_UPDATEUI notification
#define SC_UPDATE_NP3_INTERNAL_NOTIFY (SC_UPDATE_H_SCROLL << 1)
@@ -368,6 +390,22 @@ int flagPrintFileAndLeave = 0;
int flagBufferFile = 0;
+//==============================================================================
+//
+// Document Modified Flag
+//
+//
+static BOOL IsDocumentModified = FALSE;
+
+void __fastcall SetDocumentModified(BOOL bModified)
+{
+ if (IsDocumentModified != bModified) {
+ IsDocumentModified = bModified;
+ UpdateToolbar();
+ }
+}
+
+
//==============================================================================
//
// Folding Functions
@@ -683,6 +721,7 @@ int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int n
hAccFindReplace = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCFINDREPLACE));
UpdateLineNumberWidth();
+ ObserveNotifyChangeEvent();
while (GetMessage(&msg,NULL,0,0))
{
@@ -899,8 +938,8 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
if (!flagLexerSpecified)
Style_SetLexerFromFile(g_hwndEdit,szCurFile);
- bModified = TRUE;
- UpdateToolbar();
+
+ SetDocumentModified(TRUE);
UpdateLineNumberWidth();
// check for temp file and delete
@@ -910,7 +949,6 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
}
if (flagJumpTo) { // Jump to position
EditJumpTo(g_hwndEdit,iInitialLine,iInitialColumn);
- EditEnsureSelectionVisible(g_hwndEdit);
}
}
}
@@ -953,20 +991,22 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
// Check for /c [if no file is specified] -- even if a file is specified
/*else */if (flagNewFromClipboard) {
- if (SendMessage(g_hwndEdit,SCI_CANPASTE,0,0)) {
+ if (SendMessage(g_hwndEdit, SCI_CANPASTE, 0, 0)) {
BOOL bAutoIndent2 = bAutoIndent;
bAutoIndent = 0;
- EditJumpTo(g_hwndEdit,-1,0);
- SendMessage(g_hwndEdit,SCI_BEGINUNDOACTION,0,0);
- if (SendMessage(g_hwndEdit,SCI_GETLENGTH,0,0) > 0)
- SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
- SendMessage(g_hwndEdit,SCI_PASTE,0,0);
- SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
- SendMessage(g_hwndEdit,SCI_ENDUNDOACTION,0,0);
+ EditJumpTo(g_hwndEdit, -1, 0);
+ SendMessage(g_hwndEdit, SCI_BEGINUNDOACTION, 0, 0);
+ if (SendMessage(g_hwndEdit, SCI_GETLENGTH, 0, 0) > 0) {
+ SendMessage(g_hwndEdit, SCI_NEWLINE, 0, 0);
+ }
+ SendMessage(g_hwndEdit, SCI_PASTE, 0, 0);
+ SendMessage(g_hwndEdit, SCI_NEWLINE, 0, 0);
+ SendMessage(g_hwndEdit, SCI_ENDUNDOACTION, 0, 0);
bAutoIndent = bAutoIndent2;
if (flagJumpTo)
- EditJumpTo(g_hwndEdit,iInitialLine,iInitialColumn);
- EditEnsureSelectionVisible(g_hwndEdit);
+ EditJumpTo(g_hwndEdit, iInitialLine, iInitialColumn);
+ else
+ EditEnsureSelectionVisible(g_hwndEdit);
}
}
@@ -1000,19 +1040,17 @@ HWND InitInstance(HINSTANCE hInstance,LPSTR pszCmdLine,int nCmdShow)
cpLastFind = cp;
if (flagMatchText & 4)
- g_efrData.fuFlags |= SCFIND_REGEXP | SCFIND_POSIX;
+ g_efrData.fuFlags |= (SCFIND_REGEXP | SCFIND_POSIX);
else if (flagMatchText & 8)
g_efrData.bTransformBS = TRUE;
if (flagMatchText & 2) {
- if (!flagJumpTo)
- EditJumpTo(g_hwndEdit,-1,0);
+ if (!flagJumpTo) { SendMessage(g_hwndEdit, SCI_DOCUMENTEND, 0, 0); }
EditFindPrev(g_hwndEdit,&g_efrData,FALSE);
EditEnsureSelectionVisible(g_hwndEdit);
}
else {
- if (!flagJumpTo)
- SendMessage(g_hwndEdit,SCI_DOCUMENTSTART,0,0);
+ if (!flagJumpTo) { SendMessage(g_hwndEdit, SCI_DOCUMENTSTART, 0, 0); }
EditFindNext(g_hwndEdit,&g_efrData,FALSE);
EditEnsureSelectionVisible(g_hwndEdit);
}
@@ -1294,6 +1332,10 @@ LRESULT MsgCreate(HWND hwnd,WPARAM wParam,LPARAM lParam)
g_hwndEdit = EditCreate(hwnd);
InitScintillaHandle(g_hwndEdit);
+ // Properties
+ SendMessage(g_hwndEdit, SCI_SETYCARETPOLICY, CARET_SLOP | CARET_EVEN | CARET_STRICT, iCurrentLineVerticalSlop);
+ SendMessage(g_hwndEdit, SCI_SETVIRTUALSPACEOPTIONS, (bDenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION), 0);
+
// Tabs
SendMessage(g_hwndEdit,SCI_SETUSETABS,!bTabsAsSpaces,0);
SendMessage(g_hwndEdit,SCI_SETTABINDENTS,bTabIndents,0);
@@ -2052,7 +2094,6 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (params->iInitialLine == 0)
params->iInitialLine = 1;
EditJumpTo(g_hwndEdit, params->iInitialLine, params->iInitialColumn);
- EditEnsureSelectionVisible(g_hwndEdit);
}
flagLexerSpecified = 0;
@@ -2101,7 +2142,7 @@ LRESULT MsgContextMenu(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
ptc.x = pt.x; ptc.y = pt.y;
ScreenToClient(g_hwndEdit, &ptc);
iNewPos = (int)SendMessage(g_hwndEdit, SCI_POSITIONFROMPOINT, (WPARAM)ptc.x, (LPARAM)ptc.y);
- SendMessage(g_hwndEdit, SCI_GOTOPOS, (WPARAM)iNewPos, 0);
+ EditSelectEx(g_hwndEdit, iNewPos, iNewPos);
}
if (pt.x == -1 && pt.y == -1) {
@@ -2139,11 +2180,11 @@ LRESULT MsgContextMenu(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
//
void MsgChangeNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
- if (iFileWatchingMode == 1 || bModified || Encoding_HasChanged(CPI_GET))
+ if (iFileWatchingMode == 1 || IsDocumentModified || Encoding_HasChanged(CPI_GET))
SetForegroundWindow(hwnd);
if (PathFileExists(szCurFile)) {
- if ((iFileWatchingMode == 2 && !bModified && !Encoding_HasChanged(CPI_GET)) ||
+ if ((iFileWatchingMode == 2 && !IsDocumentModified && !Encoding_HasChanged(CPI_GET)) ||
MsgBox(MBYESNO,IDS_FILECHANGENOTIFY) == IDYES) {
FileRevert(szCurFile);
@@ -2560,7 +2601,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
break;
case IDC_CALL_UPDATE_HOTSPOT:
- EditUpdateVisibleUrlHotspot();
+ EditUpdateVisibleUrlHotspot(bHyperlinkHotspot);
break;
case IDM_FILE_NEW:
@@ -2574,7 +2615,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_FILE_REVERT:
- if ((bModified || Encoding_HasChanged(CPI_GET)) && MsgBox(MBOKCANCEL,IDS_ASK_REVERT) != IDOK) {
+ if ((IsDocumentModified || Encoding_HasChanged(CPI_GET)) && MsgBox(MBOKCANCEL,IDS_ASK_REVERT) != IDOK) {
return(0);
}
FileRevert(szCurFile);
@@ -2969,7 +3010,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
int iNewEncoding = Encoding_MapUnicode(Encoding_Current(CPI_GET));
- if ((bModified || Encoding_HasChanged(CPI_GET)) && MsgBox(MBOKCANCEL,IDS_ASK_RECODE) != IDOK)
+ if ((IsDocumentModified || Encoding_HasChanged(CPI_GET)) && MsgBox(MBOKCANCEL,IDS_ASK_RECODE) != IDOK)
return(0);
if (RecodeDlg(hwnd,&iNewEncoding))
@@ -3009,12 +3050,16 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_UNDO:
- SendMessage(g_hwndEdit, SCI_UNDO, 0, 0);
+ IgnoreNotifyChangeEvent();
+ SendMessage(g_hwndEdit, SCI_UNDO, 0, 0);
+ ObserveNotifyChangeEvent();
break;
case IDM_EDIT_REDO:
- SendMessage(g_hwndEdit, SCI_REDO, 0, 0);
+ IgnoreNotifyChangeEvent();
+ SendMessage(g_hwndEdit, SCI_REDO, 0, 0);
+ ObserveNotifyChangeEvent();
break;
@@ -3023,7 +3068,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (flagPasteBoard)
bLastCopyFromMe = TRUE;
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
if (!SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0))
{
SendMessage(g_hwndEdit, SCI_CUT, 0, 0);
@@ -3032,7 +3077,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessage(g_hwndEdit, SCI_COPYALLOWLINE, 0, 0);
SendMessage(g_hwndEdit, SCI_LINEDELETE, 0, 0);
}
- EndSelUndoAction(token);
+ EndUndoAction(token);
UpdateToolbar();
}
break;
@@ -3081,7 +3126,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
int iCurrPos = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
int iAnchor = iCurrPos;
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
if (SendMessage(g_hwndEdit,SCI_GETSELECTIONEMPTY,0,0))
{
@@ -3112,7 +3157,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessage(g_hwndEdit, SCI_SETSEL, iCurrPos + lstrlenA(pClip), iCurrPos);
}
- EndSelUndoAction(token);
+ EndUndoAction(token);
LocalFree(pClip);
@@ -3196,12 +3241,20 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_MOVELINEUP:
- EditMoveUp(g_hwndEdit);
+ {
+ int token = BeginUndoAction();
+ EditMoveUp(g_hwndEdit);
+ EndUndoAction(token);
+ }
break;
case IDM_EDIT_MOVELINEDOWN:
- EditMoveDown(g_hwndEdit);
+ {
+ int token = BeginUndoAction();
+ EditMoveDown(g_hwndEdit);
+ EndUndoAction(token);
+ }
break;
@@ -3214,10 +3267,10 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
if (flagPasteBoard)
bLastCopyFromMe = TRUE;
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_LINECUT,0,0);
UpdateToolbar();
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
@@ -3232,45 +3285,45 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_DELETELINE:
{
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_LINEDELETE, 0, 0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
case IDM_EDIT_DELETELINELEFT:
{
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_DELLINELEFT, 0, 0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
case IDM_EDIT_DELETELINERIGHT:
{
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_DELLINERIGHT, 0, 0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
case IDM_EDIT_INDENT:
{
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_TAB,0,0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
case IDM_EDIT_UNINDENT:
{
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_BACKTAB,0,0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
@@ -3278,9 +3331,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_ENCLOSESELECTION:
if (EditEncloseSelectionDlg(hwnd,wchPrefixSelection,wchAppendSelection)) {
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
EditEncloseSelection(g_hwndEdit,wchPrefixSelection,wchAppendSelection);
- EndSelUndoAction(token);
EndWaitCursor();
}
break;
@@ -3289,9 +3340,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SELECTIONDUPLICATE:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_SELECTIONDUPLICATE,0,0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3300,9 +3351,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_PADWITHSPACES:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
EditPadWithSpaces(g_hwndEdit,FALSE,FALSE);
- EndSelUndoAction(token);
EndWaitCursor();
}
break;
@@ -3311,9 +3360,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_STRIP1STCHAR:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditStripFirstCharacter(g_hwndEdit);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3322,27 +3371,31 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_STRIPLASTCHAR:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditStripLastCharacter(g_hwndEdit);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
case IDM_EDIT_TRIMLINES:
- BeginWaitCursor(NULL);
- EditStripTrailingBlanks(g_hwndEdit,FALSE);
- EndWaitCursor();
+ {
+ BeginWaitCursor(NULL);
+ int token = BeginUndoAction();
+ EditStripTrailingBlanks(g_hwndEdit, FALSE);
+ EndUndoAction(token);
+ EndWaitCursor();
+ }
break;
case IDM_EDIT_COMPRESSWS:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditCompressSpaces(g_hwndEdit);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3351,9 +3404,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_MERGEBLANKLINES:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditRemoveBlankLines(g_hwndEdit,TRUE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3362,9 +3415,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_REMOVEBLANKLINES:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditRemoveBlankLines(g_hwndEdit,FALSE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3374,9 +3427,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
if (EditModifyLinesDlg(hwnd,wchPrefixLines,wchAppendLines)) {
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditModifyLines(g_hwndEdit,wchPrefixLines,wchAppendLines);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
}
@@ -3387,9 +3440,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
if (EditAlignDlg(hwnd,&iAlignMode)) {
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditAlignText(g_hwndEdit,iAlignMode);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
}
@@ -3400,9 +3453,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
if (EditSortDlg(hwnd,&iSortOptions)) {
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditSortLines(g_hwndEdit,iSortOptions);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
}
@@ -3418,9 +3471,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
iWrapCol = max(min(iWrapCol,512),1);
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditWrapToColumn(g_hwndEdit,iWrapCol);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
}
@@ -3430,12 +3483,12 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SPLITLINES:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditEnterTargetTransaction();
SciCall_TargetFromSelection();
SendMessage(g_hwndEdit,SCI_LINESSPLIT,0,0);
EditLeaveTargetTransaction();
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3444,9 +3497,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_JOINLINES:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditJoinLinesEx(g_hwndEdit, FALSE, TRUE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3454,9 +3507,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_JOINLN_NOSP:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditJoinLinesEx(g_hwndEdit, FALSE, FALSE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3464,9 +3517,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_JOINLINES_PARA:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditJoinLinesEx(g_hwndEdit, TRUE, TRUE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3475,9 +3528,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTUPPERCASE:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_UPPERCASE,0,0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3486,9 +3539,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTLOWERCASE:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_LOWERCASE,0,0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3497,9 +3550,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_INVERTCASE:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditInvertCase(g_hwndEdit);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3508,9 +3561,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_TITLECASE:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditTitleCase(g_hwndEdit);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3519,9 +3572,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SENTENCECASE:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditSentenceCase(g_hwndEdit);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3530,9 +3583,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTTABS:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditTabsToSpaces(g_hwndEdit, iTabWidth, FALSE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3541,9 +3594,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTSPACES:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditSpacesToTabs(g_hwndEdit, iTabWidth, FALSE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3552,9 +3605,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTTABS2:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditTabsToSpaces(g_hwndEdit, iTabWidth, TRUE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3563,9 +3616,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_CONVERTSPACES2:
{
BeginWaitCursor(NULL);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
EditSpacesToTabs(g_hwndEdit, iTabWidth, TRUE);
- EndSelUndoAction(token);
+ EndUndoAction(token);
EndWaitCursor();
}
break;
@@ -3590,9 +3643,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
char *p = StrChrA(msz, ',');
if (p)
*p = 0;
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_REPLACESEL,0,(LPARAM)msz);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
}
break;
@@ -3637,9 +3690,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
UINT uCP = Encoding_SciGetCodePage(g_hwndEdit);
WideCharToMultiByteStrg(uCP,tchDateTime,mszBuf);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_REPLACESEL,0,(LPARAM)mszBuf);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
@@ -3669,9 +3722,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
UINT uCP = Encoding_SciGetCodePage(g_hwndEdit);
WideCharToMultiByteStrg(uCP,pszInsert,mszBuf);
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_REPLACESEL,0,(LPARAM)mszBuf);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
@@ -3687,9 +3740,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
UINT uCP = Encoding_SciGetCodePage(g_hwndEdit);
char mszGuid[40 * 4]; // UTF-8 max of 4 bytes per char
if (WideCharToMultiByteStrg(uCP,pwszGuid,mszGuid)) {
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_REPLACESEL,0,(LPARAM)mszGuid);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
}
}
@@ -3827,30 +3880,46 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_URLENCODE:
- BeginWaitCursor(NULL);
- EditURLEncode(g_hwndEdit);
- EndWaitCursor();
+ {
+ BeginWaitCursor(NULL);
+ int token = BeginUndoAction();
+ EditURLEncode(g_hwndEdit);
+ EndUndoAction(token);
+ EndWaitCursor();
+ }
break;
case IDM_EDIT_URLDECODE:
- BeginWaitCursor(NULL);
- EditURLDecode(g_hwndEdit);
- EndWaitCursor();
+ {
+ BeginWaitCursor(NULL);
+ int token = BeginUndoAction();
+ EditURLDecode(g_hwndEdit);
+ EndUndoAction(token);
+ EndWaitCursor();
+ }
break;
case IDM_EDIT_ESCAPECCHARS:
- BeginWaitCursor(NULL);
- EditEscapeCChars(g_hwndEdit);
- EndWaitCursor();
+ {
+ BeginWaitCursor(NULL);
+ int token = BeginUndoAction();
+ EditEscapeCChars(g_hwndEdit);
+ EndUndoAction(token);
+ EndWaitCursor();
+ }
break;
case IDM_EDIT_UNESCAPECCHARS:
- BeginWaitCursor(NULL);
- EditUnescapeCChars(g_hwndEdit);
- EndWaitCursor();
+ {
+ BeginWaitCursor(NULL);
+ int token = BeginUndoAction();
+ EditUnescapeCChars(g_hwndEdit);
+ EndUndoAction(token);
+ EndWaitCursor();
+ }
break;
@@ -4648,8 +4717,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case IDM_SETPASS:
if (GetFileKey(g_hwndEdit)) {
- bModified = TRUE;
- UpdateToolbar();
+ SetDocumentModified(TRUE);
}
break;
@@ -4676,7 +4744,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case CMD_CTRLENTER:
{
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
int iPos = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
int iLine = (int)SendMessage(g_hwndEdit,SCI_LINEFROMPOSITION,(WPARAM)iPos,0);
if (iLine <= 0) {
@@ -4689,7 +4757,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessage(g_hwndEdit,SCI_GETLINEENDPOSITION,(WPARAM)(iLine - 1),0),0);
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
}
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
@@ -4709,12 +4777,12 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessage(g_hwndEdit, SCI_CLEAR, 0, 0);
}
else {
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_CLEAR, 0, 0);
// possible unexpected behavior on Virtual Space Access, so:
const int iPos = SciCall_GetCurrentPos();
- SendMessage(g_hwndEdit, SCI_SETSELECTION, iPos, iPos);
- EndSelUndoAction(token);
+ SendMessage(g_hwndEdit, SCI_SETSEL, iPos, iPos);
+ EndUndoAction(token);
}
}
break;
@@ -4724,9 +4792,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
if ((BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0))
SendMessage(g_hwndEdit, SCI_DELETEBACK, 0, 0);
else {
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_DELETEBACK, 0, 0);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
break;
@@ -4750,9 +4818,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
int iIndentPos = (int)SendMessage(g_hwndEdit,SCI_GETLINEINDENTPOSITION,(WPARAM)iLine,0);
if (iPos != iAnchor) {
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit,SCI_SETSEL,(WPARAM)iPos,(LPARAM)iPos);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
else {
if (iPos == iStartPos)
@@ -4775,9 +4843,9 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
int iEndPos = (int)SendMessage(g_hwndEdit,SCI_GETLINEENDPOSITION,(WPARAM)iLine,0);
if (iPos != iAnchor) {
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_SETSEL, (WPARAM)iPos, (LPARAM)iPos);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
else {
if (iStartPos != iEndPos)
@@ -4791,13 +4859,13 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case CMD_CTRLTAB:
{
- int token = ((BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0)) ? -1 : BeginSelUndoAction();
+ int token = SciCall_IsSelectionEmpty() ? -1 : BeginUndoAction();
SendMessage(g_hwndEdit,SCI_SETTABINDENTS,FALSE,0);
SendMessage(g_hwndEdit,SCI_SETUSETABS,TRUE,0);
SendMessage(g_hwndEdit,SCI_TAB,0,0);
SendMessage(g_hwndEdit,SCI_SETUSETABS,!bTabsAsSpaces,0);
SendMessage(g_hwndEdit,SCI_SETTABINDENTS,bTabIndents,0);
- if (token >= 0) EndSelUndoAction(token);
+ if (token >= 0) EndUndoAction(token);
}
break;
@@ -5092,56 +5160,32 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case CMD_STRINGIFY:
- {
- int token = BeginSelUndoAction();
- EditEncloseSelection(g_hwndEdit,L"'",L"'");
- EndSelUndoAction(token);
- }
+ EditEncloseSelection(g_hwndEdit,L"'",L"'");
break;
case CMD_STRINGIFY2:
- {
- int token = BeginSelUndoAction();
- EditEncloseSelection(g_hwndEdit,L"\"",L"\"");
- EndSelUndoAction(token);
- }
+ EditEncloseSelection(g_hwndEdit,L"\"",L"\"");
break;
case CMD_EMBRACE:
- {
- int token = BeginSelUndoAction();
- EditEncloseSelection(g_hwndEdit,L"(",L")");
- EndSelUndoAction(token);
- }
+ EditEncloseSelection(g_hwndEdit,L"(",L")");
break;
case CMD_EMBRACE2:
- {
- int token = BeginSelUndoAction();
- EditEncloseSelection(g_hwndEdit,L"[",L"]");
- EndSelUndoAction(token);
- }
+ EditEncloseSelection(g_hwndEdit,L"[",L"]");
break;
case CMD_EMBRACE3:
- {
- int token = BeginSelUndoAction();
- EditEncloseSelection(g_hwndEdit,L"{",L"}");
- EndSelUndoAction(token);
- }
+ EditEncloseSelection(g_hwndEdit,L"{",L"}");
break;
case CMD_EMBRACE4:
- {
- int token = BeginSelUndoAction();
- EditEncloseSelection(g_hwndEdit,L"`",L"`");
- EndSelUndoAction(token);
- }
+ EditEncloseSelection(g_hwndEdit,L"`",L"`");
break;
@@ -5162,7 +5206,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case CMD_JUMP2SELSTART:
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) {
+ if (!SciCall_IsSelectionRectangle()) {
int iAnchorPos = (int)SendMessage(g_hwndEdit,SCI_GETANCHOR,0,0);
int iCursorPos = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
if (iCursorPos > iAnchorPos) {
@@ -5174,7 +5218,7 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
case CMD_JUMP2SELEND:
- if (SC_SEL_RECTANGLE != SendMessage(hwnd,SCI_GETSELECTIONMODE,0,0)) {
+ if (!SciCall_IsSelectionRectangle()) {
int iAnchorPos = (int)SendMessage(g_hwndEdit,SCI_GETANCHOR,0,0);
int iCursorPos = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
if (iCursorPos < iAnchorPos) {
@@ -5571,9 +5615,37 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
LPNMHDR pnmh = (LPNMHDR)lParam;
struct SCNotification* scn = (struct SCNotification*)lParam;
+ if (!CheckNotifyChangeEvent())
+ {
+ // --- check only mandatory events (must be fast !!!) ---
+ if (pnmh->idFrom == IDC_EDIT) {
+ if (pnmh->code == SCN_MODIFIED) {
+ // check for ADDUNDOACTION step
+ if (scn->modificationType & SC_MOD_CONTAINER) {
+ if (scn->modificationType & SC_PERFORMED_UNDO) {
+ RestoreAction(scn->token, UNDO);
+ }
+ else if (scn->modificationType & SC_PERFORMED_REDO) {
+ RestoreAction(scn->token, REDO);
+ }
+ }
+ SetDocumentModified(TRUE);
+ return TRUE;
+ }
+ else if (pnmh->code == SCN_SAVEPOINTREACHED) {
+ SetDocumentModified(FALSE);
+ return TRUE;
+ }
+ else if (pnmh->code == SCN_SAVEPOINTLEFT) {
+ SetDocumentModified(TRUE);
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+
switch(pnmh->idFrom)
{
-
case IDC_EDIT:
switch (pnmh->code)
@@ -5649,10 +5721,10 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
// check for ADDUNDOACTION step
if (scn->modificationType & SC_MOD_CONTAINER) {
if (scn->modificationType & SC_PERFORMED_UNDO) {
- RestoreSelectionAction(scn->token, UNDO);
+ RestoreAction(scn->token, UNDO);
}
else if (scn->modificationType & SC_PERFORMED_REDO) {
- RestoreSelectionAction(scn->token, REDO);
+ RestoreAction(scn->token, REDO);
}
}
else if (scn->modificationType & SC_MOD_CHANGESTYLE) {
@@ -5664,11 +5736,12 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
MarkAllOccurrences(iUpdateDelayMarkAllCoccurrences);
}
- bModified = TRUE;
if (scn->linesAdded != 0) {
UpdateLineNumberWidth();
}
- UpdateToolbar();
+
+ SetDocumentModified(TRUE);
+
UpdateStatusbar();
}
break;
@@ -5781,10 +5854,10 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
StringCchCompareINA(tchIns, COUNTOF(tchIns), "", -1) &&
StringCchCompareINA(tchIns, COUNTOF(tchIns), "", -1))
{
- int token = BeginSelUndoAction();
+ int token = BeginUndoAction();
SendMessage(g_hwndEdit, SCI_REPLACESEL, 0, (LPARAM)tchIns);
SendMessage(g_hwndEdit, SCI_SETSEL, iCurPos, iCurPos);
- EndSelUndoAction(token);
+ EndUndoAction(token);
}
}
}
@@ -5802,12 +5875,6 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
break;
- case SCN_SAVEPOINTREACHED:
- bModified = FALSE;
- UpdateToolbar();
- break;
-
-
case SCN_MARGINCLICK:
if (scn->margin == MARGIN_FOLD_INDEX)
FoldClick(SciCall_LineFromPosition(scn->position), scn->modifiers);
@@ -5820,9 +5887,13 @@ LRESULT MsgNotify(HWND hwnd,WPARAM wParam,LPARAM lParam)
break;
+ case SCN_SAVEPOINTREACHED:
+ SetDocumentModified(FALSE);
+ break;
+
+
case SCN_SAVEPOINTLEFT:
- bModified = TRUE;
- UpdateToolbar();
+ SetDocumentModified(TRUE);
break;
default:
@@ -6234,6 +6305,8 @@ void LoadSettings()
bDenyVirtualSpaceAccess = IniSectionGetBool(pIniSection, L"DenyVirtualSpaceAccess", FALSE);
bUseOldStyleBraceMatching = IniSectionGetBool(pIniSection, L"UseOldStyleBraceMatching", FALSE);
+ iCurrentLineVerticalSlop = IniSectionGetInt(pIniSection, L"CurrentLineVerticalSlop", 5);
+ iCurrentLineVerticalSlop = max(min(iCurrentLineVerticalSlop, 80), 0);
LoadIniSection(L"Toolbar Images",pIniSection,cchIniSection);
@@ -7164,7 +7237,7 @@ void MarkAllOccurrences(int delay)
void UpdateVisibleUrlHotspot(int delay)
{
if (delay < USER_TIMER_MINIMUM) {
- EditUpdateVisibleUrlHotspot();
+ EditUpdateVisibleUrlHotspot(bHyperlinkHotspot);
return;
}
TEST_AND_SET(TIMER_BIT_UPDATE_HYPER);
@@ -7185,7 +7258,7 @@ void UpdateVisibleUrlHotspot(int delay)
void UpdateToolbar()
{
SetWindowTitle(g_hwndMain, uidsAppTitle, flagIsElevated, IDS_UNTITLED, szCurFile,
- iPathNameFormat, bModified || Encoding_HasChanged(CPI_GET),
+ iPathNameFormat, IsDocumentModified || Encoding_HasChanged(CPI_GET),
IDS_READONLY, bReadOnly, szTitleExcerpt);
if (!bShowToolbar)
@@ -7216,7 +7289,7 @@ void UpdateToolbar()
EnableTool(IDT_VIEW_TOGGLEFOLDS,i2 && bShowCodeFolding);
EnableTool(IDT_FILE_LAUNCH,i2);
- EnableTool(IDT_FILE_SAVE, (bModified || Encoding_HasChanged(CPI_GET)) /*&& !bReadOnly*/);
+ EnableTool(IDT_FILE_SAVE, (IsDocumentModified || Encoding_HasChanged(CPI_GET)) /*&& !bReadOnly*/);
CheckTool(IDT_VIEW_WORDWRAP,bWordWrap);
@@ -7276,7 +7349,7 @@ void UpdateStatusbar()
const int iSelStart = (bIsSelEmpty ? 0 : SciCall_GetSelectionStart());
const int iSelEnd = (bIsSelEmpty ? 0 : SciCall_GetSelectionEnd());
- if (!bIsSelEmpty && (SC_SEL_RECTANGLE != SendMessage(g_hwndEdit, SCI_GETSELECTIONMODE, 0, 0)))
+ if (!bIsSelEmpty && !SciCall_IsSelectionRectangle())
{
const int iSel = (int)SendMessage(g_hwndEdit, SCI_COUNTCHARACTERS, iSelStart, iSelEnd);
StringCchPrintf(tchSel, COUNTOF(tchSel), L"%i", iSel);
@@ -7439,45 +7512,45 @@ void InvalidateSelections()
{
// Invalidate invalid selections
// #pragma message("TODO: Remove check for invalid selections once fixed in Scintilla")
- if (SendMessage(g_hwndEdit, SCI_GETSELECTIONS, 0, 0) > 1 &&
- SendMessage(g_hwndEdit, SCI_GETSELECTIONMODE, 0, 0) != SC_SEL_RECTANGLE) {
+ if (SendMessage(g_hwndEdit, SCI_GETSELECTIONS, 0, 0) > 1 && !SciCall_IsSelectionRectangle()) {
int iCurPos = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
SendMessage(g_hwndEdit, WM_CANCELMODE, 0, 0);
SendMessage(g_hwndEdit, SCI_CLEARSELECTIONS, 0, 0);
- SendMessage(g_hwndEdit, SCI_SETSELECTION, (WPARAM)iCurPos, (LPARAM)iCurPos);
+ SendMessage(g_hwndEdit, SCI_SETSEL, iCurPos, iCurPos);
}
}
//=============================================================================
//
-// BeginSelUndoAction()
+// BeginUndoAction()
//
//
-int BeginSelUndoAction()
+int BeginUndoAction()
{
int token = -1;
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
sel.selMode = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONMODE,0,0);
sel.rectSelVS = (int)SendMessage(g_hwndEdit,SCI_GETVIRTUALSPACEOPTIONS,0,0);
- if (sel.selMode == SC_SEL_LINES) {
- sel.anchorPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONSTART,0,0);
- sel.currPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONEND,0,0);
- }
- else if (sel.selMode == SC_SEL_RECTANGLE) {
- sel.anchorPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
- sel.currPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
- if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
- sel.anchorVS_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
- sel.currVS_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
+
+ sel.anchorPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETANCHOR, 0, 0);
+ sel.currPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
+
+ if (!(BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0)) {
+ if (sel.selMode == SC_SEL_LINES) {
+ sel.anchorPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETSELECTIONSTART, 0, 0);
+ sel.currPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETSELECTIONEND, 0, 0);
+ }
+ else if (sel.selMode == SC_SEL_RECTANGLE) {
+ sel.anchorPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
+ sel.currPos_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
+ if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
+ sel.anchorVS_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
+ sel.currVS_undo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
+ }
}
}
- else
- {
- sel.anchorPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETANCHOR,0,0);
- sel.currPos_undo = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
- }
- token = UndoRedoSelectionMap(-1, &sel);
+ token = UndoRedoActionMap(-1, &sel);
if (token >= 0) {
SendMessage(g_hwndEdit, SCI_BEGINUNDOACTION, 0, 0);
SendMessage(g_hwndEdit, SCI_ADDUNDOACTION, (WPARAM)token, 0);
@@ -7489,33 +7562,35 @@ int BeginSelUndoAction()
//=============================================================================
//
-// EndSelUndoAction()
+// EndUndoAction()
//
//
-void EndSelUndoAction(int token)
+void EndUndoAction(int token)
{
if (token >= 0) {
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
- if (UndoRedoSelectionMap(token,&sel) >= 0) {
+ if (UndoRedoActionMap(token,&sel) >= 0) {
// mode and type should not have changed
- if (sel.selMode == SC_SEL_LINES) {
- sel.anchorPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONSTART,0,0);
- sel.currPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETSELECTIONEND,0,0);
- }
- else if (sel.selMode == SC_SEL_RECTANGLE) {
- sel.anchorPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
- sel.currPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
- if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
- sel.anchorVS_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
- sel.currVS_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
+
+ sel.anchorPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETANCHOR, 0, 0);
+ sel.currPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
+
+ if (!(BOOL)SendMessage(g_hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0)) {
+ if (sel.selMode == SC_SEL_LINES) {
+ sel.anchorPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETSELECTIONSTART, 0, 0);
+ sel.currPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETSELECTIONEND, 0, 0);
+ }
+ else if (sel.selMode == SC_SEL_RECTANGLE) {
+ sel.anchorPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHOR, 0, 0);
+ sel.currPos_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARET, 0, 0);
+ if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
+ sel.anchorVS_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE, 0, 0);
+ sel.currVS_redo = (int)SendMessage(g_hwndEdit, SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE, 0, 0);
+ }
}
}
- else {
- sel.anchorPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETANCHOR,0,0);
- sel.currPos_redo = (int)SendMessage(g_hwndEdit,SCI_GETCURRENTPOS,0,0);
- }
}
- UndoRedoSelectionMap(token,&sel); // set with redo action filled
+ UndoRedoActionMap(token,&sel); // set with redo action filled
SendMessage(g_hwndEdit, SCI_ENDUNDOACTION, 0, 0);
}
}
@@ -7523,16 +7598,24 @@ void EndSelUndoAction(int token)
//=============================================================================
//
-// RestoreSelectionAction()
+// RestoreAction()
//
//
-void RestoreSelectionAction(int token, DoAction doAct)
+void RestoreAction(int token, DoAction doAct)
{
UndoRedoSelection_t sel = { -1, -1, -1, -1, -1, 0, 0, 0, 0, 0 };
- if (UndoRedoSelectionMap(token,&sel) >= 0) {
+ if (UndoRedoActionMap(token,&sel) >= 0) {
// we are inside undo/redo transaction, so do delayed PostMessage() instead of SendMessage()
int anchorPos = (doAct == UNDO ? sel.anchorPos_undo : sel.anchorPos_redo);
int currPos = (doAct == UNDO ? sel.currPos_undo : sel.currPos_redo);
+ int anchorPosLine = (int)SendMessage(g_hwndEdit, SCI_LINEFROMPOSITION, anchorPos, 0);
+ int currPosLine = (int)SendMessage(g_hwndEdit, SCI_LINEFROMPOSITION, currPos, 0);
+ // Ensure that the first and last lines of a selection are always unfolded
+ // This needs to be done _before_ the SCI_SETSEL message
+ SendMessage(g_hwndEdit, SCI_ENSUREVISIBLE, anchorPosLine, 0);
+ if (anchorPosLine != currPosLine) {
+ SendMessage(g_hwndEdit, SCI_ENSUREVISIBLE, currPosLine, 0);
+ }
int currRectType = (int)SendMessage(g_hwndEdit,SCI_GETVIRTUALSPACEOPTIONS,0,0);
PostMessage(g_hwndEdit,SCI_SETSELECTIONMODE,(WPARAM)sel.selMode,0);
PostMessage(g_hwndEdit,SCI_SETVIRTUALSPACEOPTIONS,(WPARAM)sel.rectSelVS,0);
@@ -7544,14 +7627,15 @@ void RestoreSelectionAction(int token, DoAction doAct)
PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONANCHOR, (WPARAM)anchorPos, 0);
PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONCARET, (WPARAM)currPos, 0);
if ((sel.rectSelVS & SCVS_RECTANGULARSELECTION) != 0) {
- int anchorVS = (doAct == UNDO ? sel.anchorVS_undo : sel.anchorVS_redo);
- int currVS = (doAct == UNDO ? sel.currVS_undo : sel.currVS_redo);
- PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (WPARAM)anchorVS, 0);
- PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (WPARAM)currVS, 0);
+ int anchorVS = (doAct == UNDO ? sel.anchorVS_undo : sel.anchorVS_redo);
+ int currVS = (doAct == UNDO ? sel.currVS_undo : sel.currVS_redo);
+ PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (WPARAM)anchorVS, 0);
+ PostMessage(g_hwndEdit, SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (WPARAM)currVS, 0);
}
}
else {
- PostMessage(g_hwndEdit,SCI_SETSELECTION,(WPARAM)currPos,(LPARAM)anchorPos);
+ PostMessage(g_hwndEdit, SCI_SETSEL, (LPARAM)anchorPos, (WPARAM)currPos);
+ PostMessage(g_hwndEdit, SCI_SCROLLRANGE, (LPARAM)anchorPos, (WPARAM)currPos);
}
PostMessage(g_hwndEdit,SCI_SETVIRTUALSPACEOPTIONS,(WPARAM)currRectType,0);
PostMessage(g_hwndEdit, SCI_CANCEL, 0, 0);
@@ -7565,7 +7649,7 @@ void RestoreSelectionAction(int token, DoAction doAct)
//
//
-int UndoRedoSelectionMap(int token, UndoRedoSelection_t* selection)
+int UndoRedoActionMap(int token, UndoRedoSelection_t* selection)
{
if (UndoRedoSelectionUTArray == NULL)
return -1;
@@ -7685,8 +7769,7 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
FileVars_Init(NULL,0,&fvCurFile);
EditSetNewText(g_hwndEdit,"",0);
Style_SetLexer(g_hwndEdit,NULL);
- bModified = FALSE;
- bReadOnly = FALSE;
+
iEOLMode = iLineEndings[iDefaultEOLMode];
SendMessage(g_hwndEdit,SCI_SETEOLMODE,iLineEndings[iDefaultEOLMode],0);
Encoding_Current(iDefaultEncoding);
@@ -7694,7 +7777,8 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
Encoding_SciSetCodePage(g_hwndEdit,iDefaultEncoding);
EditSetNewText(g_hwndEdit,"",0);
- UpdateToolbar();
+ bReadOnly = FALSE;
+ SetDocumentModified(FALSE);
UpdateStatusbar();
UpdateLineNumberWidth();
@@ -7802,8 +7886,6 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
if (!flagLexerSpecified) // flag will be cleared
Style_SetLexerFromFile(g_hwndEdit,szCurFile);
- bModified = FALSE;
- //bReadOnly = FALSE;
SendMessage(g_hwndEdit,SCI_SETEOLMODE,iEOLMode,0);
fileEncoding = Encoding_Current(CPI_GET);
Encoding_HasChanged(fileEncoding);
@@ -7837,7 +7919,7 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
EditJumpTo(g_hwndEdit,-1,0);
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
SendMessage(g_hwndEdit,SCI_ENDUNDOACTION,0,0);
- EditJumpTo(g_hwndEdit,-1,0);
+ SendMessage(g_hwndEdit, SCI_DOCUMENTEND, 0, 0);
EditEnsureSelectionVisible(g_hwndEdit);
}
// set historic caret pos
@@ -7852,7 +7934,8 @@ BOOL FileLoad(BOOL bDontSave,BOOL bNew,BOOL bReload,BOOL bNoEncDetect,LPCWSTR lp
}
}
- UpdateToolbar();
+ //bReadOnly = FALSE;
+ SetDocumentModified(FALSE);
UpdateStatusbar();
UpdateLineNumberWidth();
UpdateVisibleUrlHotspot(0);
@@ -7900,7 +7983,7 @@ BOOL FileRevert(LPCWSTR szFileName)
if (FileLoad(TRUE,FALSE,TRUE,FALSE,tchFileName2))
{
if (bIsTail && iFileWatchingMode == 2) {
- EditJumpTo(g_hwndEdit, -1, 0);
+ SendMessage(g_hwndEdit, SCI_DOCUMENTEND, 0, 0);
EditEnsureSelectionVisible(g_hwndEdit);
}
else if (SendMessage(g_hwndEdit,SCI_GETLENGTH,0,0) >= 4) {
@@ -7948,7 +8031,7 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
}
}
- if (!bSaveAlways && (!bModified && !Encoding_HasChanged(CPI_GET) || bIsEmptyNewFile) && !bSaveAs) {
+ if (!bSaveAlways && (!IsDocumentModified && !Encoding_HasChanged(CPI_GET) || bIsEmptyNewFile) && !bSaveAs) {
int idx;
if (MRU_FindFile(pFileMRU,szCurFile,&idx)) {
pFileMRU->iEncoding[idx] = Encoding_Current(CPI_GET);
@@ -8043,7 +8126,6 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
{
if (!bSaveCopy)
{
- bModified = FALSE;
int iCurrEnc = Encoding_Current(CPI_GET);
Encoding_HasChanged(iCurrEnc);
int iCaretPos = (int)SendMessage(g_hwndEdit, SCI_GETCURRENTPOS, 0, 0);
@@ -8052,7 +8134,8 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
MRU_AddFile(pFileMRU,szCurFile,flagRelativeFileMRU,flagPortableMyDocs,iCurrEnc,iCaretPos,wchBookMarks);
if (flagUseSystemMRU == 2)
SHAddToRecentDocs(SHARD_PATHW,szCurFile);
- UpdateToolbar();
+
+ SetDocumentModified(FALSE);
// Install watching of the current file
if (bSaveAs && bResetFileWatching)
iFileWatchingMode = 0;
@@ -8099,7 +8182,7 @@ BOOL FileSave(BOOL bSaveAlways,BOOL bAsk,BOOL bSaveAs,BOOL bSaveCopy)
LocalFree(lpArgs);
// set no change and quit
Encoding_HasChanged(Encoding_Current(CPI_GET));
- bModified = FALSE;
+ SetDocumentModified(FALSE);
PostMessage(g_hwndMain,WM_CLOSE,0,0);
}
else {
@@ -8733,7 +8816,7 @@ void SetNotifyIconTitle(HWND hwnd)
else
GetString(IDS_UNTITLED,tchTitle,COUNTOF(tchTitle)-4);
- if (bModified || Encoding_HasChanged(CPI_GET))
+ if (IsDocumentModified || Encoding_HasChanged(CPI_GET))
StringCchCopy(nid.szTip,COUNTOF(nid.szTip),L"* ");
else
StringCchCopy(nid.szTip,COUNTOF(nid.szTip),L"");
@@ -8882,7 +8965,7 @@ void CALLBACK WatchTimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
//
void CALLBACK PasteBoardTimer(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
- if (dwLastCopyTime > 0 && GetTickCount() - dwLastCopyTime > 200) {
+ if ((dwLastCopyTime > 0) && ((GetTickCount() - dwLastCopyTime) > 200)) {
if (SendMessage(g_hwndEdit,SCI_CANPASTE,0,0)) {
@@ -8890,15 +8973,15 @@ void CALLBACK PasteBoardTimer(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
bAutoIndent = 0;
EditJumpTo(g_hwndEdit,-1,0);
SendMessage(g_hwndEdit,SCI_BEGINUNDOACTION,0,0);
- if (SendMessage(g_hwndEdit,SCI_GETLENGTH,0,0) > 0)
- SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
+ if (SendMessage(g_hwndEdit, SCI_GETLENGTH, 0, 0) > 0) {
+ SendMessage(g_hwndEdit, SCI_NEWLINE, 0, 0);
+ }
SendMessage(g_hwndEdit,SCI_PASTE,0,0);
SendMessage(g_hwndEdit,SCI_NEWLINE,0,0);
SendMessage(g_hwndEdit,SCI_ENDUNDOACTION,0,0);
EditEnsureSelectionVisible(g_hwndEdit);
bAutoIndent = bAutoIndent2;
}
-
dwLastCopyTime = 0;
}
diff --git a/src/Notepad3.h b/src/Notepad3.h
index a378200b6..6f03336a1 100644
--- a/src/Notepad3.h
+++ b/src/Notepad3.h
@@ -150,10 +150,10 @@ void UpdateUI();
void InvalidateSelections();
-int BeginSelUndoAction();
-void EndSelUndoAction(int);
-void RestoreSelectionAction(int,DoAction);
-int UndoRedoSelectionMap(int,UndoRedoSelection_t*);
+int BeginUndoAction();
+void EndUndoAction(int);
+void RestoreAction(int,DoAction);
+int UndoRedoActionMap(int,UndoRedoSelection_t*);
void OpenHotSpotURL(int, BOOL);
@@ -181,6 +181,9 @@ LRESULT MsgSysCommand(HWND, UINT, WPARAM, LPARAM);
LRESULT MsgCommand(HWND, WPARAM, LPARAM);
LRESULT MsgNotify(HWND, WPARAM, LPARAM);
+void IgnoreNotifyChangeEvent();
+void ObserveNotifyChangeEvent();
+BOOL CheckNotifyChangeEvent();
#endif //_NP3_NOTEPAD3_H_
/// End of Notepad3.h \\\
diff --git a/src/Notepad3.rc b/src/Notepad3.rc
index 27cc9bb14..e7b4e9d6d 100644
--- a/src/Notepad3.rc
+++ b/src/Notepad3.rc
@@ -1832,7 +1832,7 @@ BEGIN
63192 "XML Comment"
63193 "XML Entity"
63194 "Tag-Class"
- 63195 "Tag-Id"
+ 63195 "Tag-ID"
63196 "Tag-Attribute"
63197 "Pseudo-Class"
63198 "Unknown Pseudo-Class"
@@ -1924,6 +1924,8 @@ BEGIN
63264 "Hyperlink Hotspots"
63265 "2nd Hyperlink Hotspots"
63266 "2nd Default Text"
+ 63267 "Variable within String"
+ 63268 "Ordered List"
END
#endif // Englisch (USA) resources
diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj
index 1735a0f83..a5edf2131 100644
--- a/src/Notepad3.vcxproj
+++ b/src/Notepad3.vcxproj
@@ -327,6 +327,7 @@
+
diff --git a/src/Notepad3.vcxproj.filters b/src/Notepad3.vcxproj.filters
index 330b76499..76ae07fab 100644
--- a/src/Notepad3.vcxproj.filters
+++ b/src/Notepad3.vcxproj.filters
@@ -136,6 +136,9 @@
templates
+
+ Resource Files
+
diff --git a/src/SciCall.h b/src/SciCall.h
index f036c37f1..69522157e 100644
--- a/src/SciCall.h
+++ b/src/SciCall.h
@@ -82,21 +82,27 @@ __forceinline LRESULT SciCall_##fn(type1 var1, type2 var2) { \
// Selection, positions and information
//
//
+DeclareSciCallR0(IsDocModified, GETMODIFY, BOOL);
+DeclareSciCallR0(IsSelectionEmpty, GETSELECTIONEMPTY, BOOL);
+DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, BOOL);
DeclareSciCallR0(GetCurrentPos, GETCURRENTPOS, int);
DeclareSciCallR0(GetAnchor, GETANCHOR, int);
-DeclareSciCallR0(IsSelectionEmpty, GETSELECTIONEMPTY, BOOL);
DeclareSciCallR0(GetSelectionMode, GETSELECTIONMODE, int);
DeclareSciCallR0(GetSelectionStart, GETSELECTIONSTART, int);
DeclareSciCallR0(GetSelectionEnd, GETSELECTIONEND, int);
DeclareSciCallR1(GetLineSelStartPosition, GETLINESELSTARTPOSITION, int, Sci_Position, line);
DeclareSciCallR1(GetLineSelEndPosition, GETLINESELENDPOSITION, int, Sci_Position, line);
-DeclareSciCallV2(SetSel, SETSEL, int, anchorPos, int, currentPos);
+DeclareSciCallV2(SetSel, SETSEL, Sci_Position, anchorPos, Sci_Position, currentPos);
+DeclareSciCallV2(ScrollRange, SCROLLRANGE, Sci_Position, secondaryPos, Sci_Position, primaryPos);
+DeclareSciCallV0(Clear, CLEAR);
DeclareSciCallV2(SetTargetRange, SETTARGETRANGE, int, start, int, end);
DeclareSciCallV0(TargetFromSelection, TARGETFROMSELECTION);
-DeclareSciCallV1(GotoPos, GOTOPOS, int, position);
-DeclareSciCallV1(GotoLine, GOTOLINE, int, line);
+DeclareSciCallV1(SetAnchor, SETANCHOR, Sci_Position, position);
+DeclareSciCallV1(SetCurrentPos, SETCURRENTPOS, Sci_Position, position);
+DeclareSciCallV1(GotoPos, GOTOPOS, Sci_Position, position);
+DeclareSciCallV1(GotoLine, GOTOLINE, Sci_Position, line);
DeclareSciCallR1(PositionBefore, POSITIONBEFORE, int, Sci_Position, position);
DeclareSciCallR1(PositionAfter, POSITIONAFTER, int, Sci_Position, position);
DeclareSciCallR1(GetCharAt, GETCHARAT, char, Sci_Position, position);
@@ -113,7 +119,7 @@ DeclareSciCallR0(GetFirstVisibleLine, GETFIRSTVISIBLELINE, int);
DeclareSciCallR1(DocLineFromVisible, DOCLINEFROMVISIBLE, int, Sci_Position, line);
DeclareSciCallR2(GetRangePointer, GETRANGEPOINTER, LPCCH, Sci_Position, start, Sci_Position, length);
-
+DeclareSciCallR0(GetCharacterPointer, GETCHARACTERPOINTER, LPCCH);
//=============================================================================
//
diff --git a/src/Styles.c b/src/Styles.c
index eb61fb751..70695a30d 100644
--- a/src/Styles.c
+++ b/src/Styles.c
@@ -349,7 +349,7 @@ EDITLEXER lexCSS = { SCLEX_CSS, 63003, L"CSS Style Sheets", L"css; less; sass; s
{ SCE_CSS_COMMENT, 63127, L"Comment", L"fore:#646464", L"" },
{ SCE_CSS_TAG, 63136, L"HTML Tag", L"bold; fore:#0A246A", L"" },
{ SCE_CSS_CLASS, 63194, L"Tag-Class", L"fore:#648000", L"" },
- { SCE_CSS_ID, 63195, L"Tag-Id", L"fore:#648000", L"" },
+ { SCE_CSS_ID, 63195, L"Tag-ID", L"fore:#648000", L"" },
{ SCE_CSS_ATTRIBUTE, 63196, L"Tag-Attribute", L"italic; fore:#648000", L"" },
{ MULTI_STYLE(SCE_CSS_PSEUDOCLASS,SCE_CSS_EXTENDED_PSEUDOCLASS,0,0), 63197, L"Pseudo-Class", L"fore:#B000B0", L"" },
{ MULTI_STYLE(SCE_CSS_PSEUDOELEMENT,SCE_CSS_EXTENDED_PSEUDOELEMENT,0,0), 63361, L"Pseudo-Element", L"fore:#B00050", L"" },
@@ -2429,7 +2429,7 @@ EDITLEXER lexCmake = { SCLEX_CMAKE, 63038, L"Cmake Script", L"cmake; ctest", L""
{ SCE_CMAKE_FOREACHDEF, 63326, L"For Each Def", L"fore:#00007F", L"" },
{ SCE_CMAKE_IFDEFINEDEF, 63327, L"If Def", L"fore:#00007F", L"" },
{ SCE_CMAKE_MACRODEF, 63328, L"Macro Def", L"fore:#00007F", L"" },
- { SCE_CMAKE_STRINGVAR, 63329, L"Variable within string", L"back:#EEEEEE; fore:#CC3300", L"" },
+ { SCE_CMAKE_STRINGVAR, 63267, L"Variable within String", L"back:#EEEEEE; fore:#CC3300", L"" },
{ SCE_CMAKE_NUMBER, 63130, L"Number", L"fore:#008080", L"" },
//{ SCE_CMAKE_USERDEFINED, 63106, L"User Defined", L"fore:#800020", L"" },
{ -1, 00000, L"", L"", L"" } } };
@@ -2544,7 +2544,7 @@ EDITLEXER lexMARKDOWN = { SCLEX_MARKDOWN, 63040, L"Markdown", L"md; markdown; md
{ SCE_MARKDOWN_HEADER6, 63346, L"Header 6", L"fore:#FF0088; bold", L"" },
{ SCE_MARKDOWN_PRECHAR, 63347, L"Pre Char", L"fore:#00007F", L"" },
{ SCE_MARKDOWN_ULIST_ITEM, 63348, L"Unordered List", L"fore:#0080FF; bold", L"" },
- { SCE_MARKDOWN_OLIST_ITEM, 63349, L"Ordered list", L"fore:#0080FF; bold", L"" },
+ { SCE_MARKDOWN_OLIST_ITEM, 63268, L"Ordered List", L"fore:#0080FF; bold", L"" },
{ SCE_MARKDOWN_BLOCKQUOTE, 63350, L"Block Quote", L"fore:#00007F", L"" },
{ SCE_MARKDOWN_STRIKEOUT, 63351, L"Strikeout", L"", L"" },
{ SCE_MARKDOWN_HRULE, 63352, L"Horizontal Rule", L"bold", L"" },
diff --git a/test/TestAhkNotepad3.ahk b/test/TestAhkNotepad3.ahk
index 807978292..333ee0b51 100644
--- a/test/TestAhkNotepad3.ahk
+++ b/test/TestAhkNotepad3.ahk
@@ -84,7 +84,10 @@ Return
CHECK_ABOUT_BOX:
; check About DlgBox
WinActivate, ahk_pid %v_Notepad3_PID%
-Send {F1}
+
+; This will select File->Open in Notepad:
+WinMenuSelectItem, ahk_pid %v_Notepad3_PID%, , ?, About...
+
WinWait, About %v_NP3Name%, , 1
v_ErrLevel = %ErrorLevel%
if (v_ErrLevel != 0)
diff --git a/test/TestAhkNotepad3.cmd b/test/TestAhkNotepad3.cmd
index 69e253ffb..c9eb1ec18 100644
--- a/test/TestAhkNotepad3.cmd
+++ b/test/TestAhkNotepad3.cmd
@@ -34,7 +34,7 @@ for %%i in (*.ahk) do (
echo +++ Run Testsuite %%~nxi +++ >> "%TEST_LOG%"
start "testing" /B /Wait "%AHK_EXE%" /ErrorStdOut "%%~nxi" >> "%TEST_LOG%" 2>&1
if errorlevel 1 (
- set EXITCODE=%ERRORLEVEL%
+ set EXITCODE=1
echo *** Testsuite %%~nxi failed! ***
echo *** ERROR: Testsuite %%~nxi failed! *** >> "%TEST_LOG%"
) else (