diff --git a/Versions/build.txt b/Versions/build.txt
index 0cfbf0888..00750edc0 100644
--- a/Versions/build.txt
+++ b/Versions/build.txt
@@ -1 +1 @@
-2
+3
diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf
index 0a1fd2a89..b562aa944 100644
--- a/res/Notepad3.exe.manifest.conf
+++ b/res/Notepad3.exe.manifest.conf
@@ -3,7 +3,7 @@
Notepad3 RC1
diff --git a/src/Edit.c b/src/Edit.c
index abd2158b2..95f8b10e2 100644
--- a/src/Edit.c
+++ b/src/Edit.c
@@ -2415,28 +2415,40 @@ void EditMoveDown(HWND hwnd)
//
// EditSetCaretToSelectionStart()
//
-DocPos EditSetCaretToSelectionStart()
+bool EditSetCaretToSelectionStart()
{
- if (!Sci_IsMultiSelection()) {
- if (SciCall_GetCurrentPos() != SciCall_GetSelectionStart()) {
+ size_t const m = SciCall_GetMainSelection();
+ DocPos const c = SciCall_GetSelectionNCaret(m) + SciCall_GetSelectionNCaretVirtualSpace(m);
+ DocPos const s = SciCall_GetSelectionNStart(m) + SciCall_GetSelectionNStartVirtualSpace(m);
+ bool const bSwap = (c != s);
+ if (bSwap) {
+ size_t const n = SciCall_GetSelections();
+ for (size_t i = 0; i < n; ++i) {
SciCall_SwapMainAnchorCaret();
+ SciCall_RotateSelection();
}
}
- return SciCall_GetSelectionStart();
+ return bSwap;
}
//=============================================================================
//
// EditSetCaretToSelectionEnd()
//
-DocPos EditSetCaretToSelectionEnd()
+bool EditSetCaretToSelectionEnd()
{
- if (!Sci_IsMultiSelection()) {
- if (SciCall_GetCurrentPos() != SciCall_GetSelectionEnd()) {
+ size_t const m = SciCall_GetMainSelection();
+ DocPos const c = SciCall_GetSelectionNCaret(m) + SciCall_GetSelectionNCaretVirtualSpace(m);
+ DocPos const e = SciCall_GetSelectionNEnd(m) + SciCall_GetSelectionNEndVirtualSpace(m);
+ bool const bSwap = (c != e);
+ if (bSwap) {
+ size_t const n = SciCall_GetSelections();
+ for (size_t i = 0; i < n; ++i) {
SciCall_SwapMainAnchorCaret();
+ SciCall_RotateSelection();
}
}
- return SciCall_GetSelectionEnd();
+ return bSwap;
}
@@ -6344,7 +6356,8 @@ bool EditFindNext(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bExtendSelection, bo
SetFocus(hwnd);
}
DocPos const iDocEndPos = Sci_GetDocEndPosition();
- DocPos start = EditSetCaretToSelectionEnd();
+ EditSetCaretToSelectionEnd();
+ DocPos start = SciCall_GetSelectionEnd();
DocPos end = iDocEndPos;
if (start >= end) {
@@ -6426,7 +6439,8 @@ bool EditFindPrev(HWND hwnd, LPCEDITFINDREPLACE lpefr, bool bExtendSelection, bo
int const sFlags = (int)(lpefr->fuFlags);
DocPos const iDocEndPos = Sci_GetDocEndPosition();
- DocPos start = EditSetCaretToSelectionStart();
+ EditSetCaretToSelectionStart();
+ DocPos start = SciCall_GetSelectionStart();
DocPos end = 0;
if (start <= end) {
diff --git a/src/Edit.h b/src/Edit.h
index a880d53e5..82426a567 100644
--- a/src/Edit.h
+++ b/src/Edit.h
@@ -59,8 +59,8 @@ void EditSpacesToTabs(HWND hwnd,int nTabWidth,bool);
void EditMoveUp(HWND hwnd);
void EditMoveDown(HWND hwnd);
-DocPos EditSetCaretToSelectionStart();
-DocPos EditSetCaretToSelectionEnd();
+bool EditSetCaretToSelectionStart();
+bool EditSetCaretToSelectionEnd();
void EditModifyLines(HWND hwnd,LPCWSTR pwszPrefix,LPCWSTR pwszAppend);
void EditIndentBlock(HWND hwnd,int cmd, bool bFormatIndentation, bool bForceAll);
void EditAlignText(HWND hwnd,int nMode);
diff --git a/src/Notepad3.c b/src/Notepad3.c
index 7ca2ec01f..9b3f94fd6 100644
--- a/src/Notepad3.c
+++ b/src/Notepad3.c
@@ -400,9 +400,6 @@ static void _SplitUndoTransaction(const int iModType);
static void _DelayClearZoomCallTip(int delay);
static void _DelaySplitUndoTransaction(int delay, int iModType);
-//#define NP3_VIRTUAL_SPACE_ACCESS_OPTIONS (SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART | SCVS_USERACCESSIBLE)
-#define NP3_VIRTUAL_SPACE_ACCESS_OPTIONS (SCVS_RECTANGULARSELECTION)
-
//=============================================================================
//
// IgnoreNotifyChangeEvent(), ObserveNotifyChangeEvent(), CheckNotifyChangeEvent()
@@ -1364,16 +1361,16 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow)
// Check for /c [if no file is specified] -- even if a file is specified
/*else */if (s_flagNewFromClipboard) {
- if (SendMessage(Globals.hwndEdit, SCI_CANPASTE, 0, 0)) {
+ if (SciCall_CanPaste()) {
bool bAutoIndent2 = Settings.AutoIndent;
Settings.AutoIndent = 0;
EditJumpTo(Globals.hwndEdit, -1, 0);
_BEGIN_UNDO_ACTION_
- if (SendMessage(Globals.hwndEdit, SCI_GETLENGTH, 0, 0) > 0) {
- SendMessage(Globals.hwndEdit, SCI_NEWLINE, 0, 0);
+ if (!Sci_IsDocEmpty()) {
+ SciCall_NewLine();
}
- SendMessage(Globals.hwndEdit, SCI_PASTE, 0, 0);
- SendMessage(Globals.hwndEdit, SCI_NEWLINE, 0, 0);
+ SciCall_Paste();
+ SciCall_NewLine();
_END_UNDO_ACTION_
Settings.AutoIndent = bAutoIndent2;
if (s_flagJumpTo)
@@ -1799,8 +1796,7 @@ static void _InitializeSciEditCtrl(HWND hwndEditCtrl)
SendMessage(hwndEditCtrl, SCI_AUTOCSETMULTI, SC_MULTIAUTOC_EACH, 0); // paste into rectangular selection
SendMessage(hwndEditCtrl, SCI_SETMOUSESELECTIONRECTANGULARSWITCH, true, 0);
- int const vspaceOpt = Settings2.DenyVirtualSpaceAccess ? SCVS_NONE : NP3_VIRTUAL_SPACE_ACCESS_OPTIONS;
- SendMessage(hwndEditCtrl, SCI_SETVIRTUALSPACEOPTIONS, vspaceOpt, 0);
+ SendMessage(hwndEditCtrl, SCI_SETVIRTUALSPACEOPTIONS, NP3_VIRTUAL_SPACE_ACCESS_OPTIONS, 0);
SendMessage(hwndEditCtrl, SCI_SETADDITIONALCARETSBLINK, true, 0);
SendMessage(hwndEditCtrl, SCI_SETADDITIONALCARETSVISIBLE, true, 0);
@@ -1902,7 +1898,6 @@ static void _InitializeSciEditCtrl(HWND hwndEditCtrl)
else {
SendMessage(hwndEditCtrl, SCI_SETYCARETPOLICY, (WPARAM)(_CARET_SYMETRY), 0);
}
- SendMessage(hwndEditCtrl, SCI_SETVIRTUALSPACEOPTIONS, (WPARAM)(Settings2.DenyVirtualSpaceAccess ? SCVS_NONE : NP3_VIRTUAL_SPACE_ACCESS_OPTIONS), 0);
SendMessage(hwndEditCtrl, SCI_SETENDATLASTLINE, (WPARAM)((Settings.ScrollPastEOF) ? 0 : 1), 0);
// Tabs
@@ -2524,7 +2519,7 @@ LRESULT MsgDPIChanged(HWND hwnd, WPARAM wParam, LPARAM lParam)
#if 0
char buf[128];
sprintf(buf, "WM_DPICHANGED: dpi=%u,%u ppi=%u,%u\n", Globals.CurrentDPI.x, Globals.CurrentDPI.y, Globals.CurrentPPI.x, Globals.CurrentPPI.y);
- SendMessage(Globals.hwndEdit, SCI_INSERTTEXT, 0, (LPARAM)buf);
+ SciCall_InsertText(0, buf);
#endif
Style_ResetCurrentLexer(Globals.hwndEdit);
@@ -4140,7 +4135,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SELECTALL:
- SendMessage(Globals.hwndEdit,SCI_SELECTALL,0,0);
+ SciCall_SelectAll();
UpdateToolbar();
UpdateStatusbar(false);
break;
@@ -4284,7 +4279,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
// break;
case CMD_VK_INSERT:
- SendMessage(Globals.hwndEdit, SCI_EDITTOGGLEOVERTYPE, 0, 0);
+ SciCall_EditToggleOverType();
UpdateStatusbar(false);
break;
@@ -6019,10 +6014,12 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
WideCharToMultiByteEx(Encoding_SciCP, 0, wchFind, -1, efrTS.szFind,COUNTOF(efrTS.szFind),NULL,NULL);
WideCharToMultiByteEx(Encoding_SciCP, 0, wchReplace, -1, efrTS.szReplace, COUNTOF(efrTS.szReplace), NULL, NULL);
- if (!SendMessage(Globals.hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0))
+ if (!SciCall_IsSelectionEmpty()) {
EditReplaceAllInSelection(Globals.hwndEdit, &efrTS, true);
- else
- EditReplaceAll(Globals.hwndEdit,&efrTS,true);
+ }
+ else {
+ EditReplaceAll(Globals.hwndEdit, &efrTS, true);
+ }
}
break;
@@ -6179,7 +6176,17 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
break;
case CMD_JUMP2SELEND:
- EditSetCaretToSelectionEnd();
+ if (!EditSetCaretToSelectionEnd() && Sci_IsMultiOrRectangleSelection()) {
+ size_t const n = SciCall_GetSelections();
+ DocLn const lineStart = SciCall_LineFromPosition(SciCall_GetSelectionStart());
+ SciCall_ClearSelections();
+ DocPos const beg = SciCall_GetLineEndPosition(lineStart);
+ SciCall_SetSelection(beg, beg);
+ for (size_t i = 1; i < n; ++i) {
+ DocPos const pos = SciCall_GetLineEndPosition(lineStart + i);
+ SciCall_AddSelection(pos, pos);
+ }
+ }
SciCall_ChooseCaretX();
break;
@@ -7348,10 +7355,8 @@ static LRESULT _MsgNotifyFromEdit(HWND hwnd, const LPNMHDR pnmh, const SCNotific
}
break;
-
- case SCN_MARGINRIGHTCLICK:
- break;
-
+ //case SCN_MARGINRIGHTCLICK:
+ // break;
// ~~~ Not used in Windows ~~~
// see: CMD_ALTUP / CMD_ALTDOWN
@@ -10937,17 +10942,16 @@ void CALLBACK PasteBoardTimer(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
if ((s_dwLastCopyTime > 0) && ((GetTickCount() - s_dwLastCopyTime) > 200)) {
- if (SendMessage(Globals.hwndEdit,SCI_CANPASTE,0,0)) {
-
+ if (SciCall_CanPaste()) {
bool bAutoIndent2 = Settings.AutoIndent;
Settings.AutoIndent = 0;
EditJumpTo(Globals.hwndEdit,-1,0);
_BEGIN_UNDO_ACTION_
- if (SendMessage(Globals.hwndEdit, SCI_GETLENGTH, 0, 0) > 0) {
- SendMessage(Globals.hwndEdit, SCI_NEWLINE, 0, 0);
+ if (!Sci_IsDocEmpty()) {
+ SciCall_NewLine();
}
- SendMessage(Globals.hwndEdit,SCI_PASTE,0,0);
- SendMessage(Globals.hwndEdit,SCI_NEWLINE,0,0);
+ SciCall_Paste();
+ SciCall_NewLine();
_END_UNDO_ACTION_
EditEnsureSelectionVisible();
Settings.AutoIndent = bAutoIndent2;
diff --git a/src/SciCall.h b/src/SciCall.h
index c23d7cfc0..abb571467 100644
--- a/src/SciCall.h
+++ b/src/SciCall.h
@@ -181,6 +181,9 @@ DeclareSciCallV2(SetSelectionNCaretVirtualSpace, SETSELECTIONNCARETVIRTUALSPACE,
DeclareSciCallV2(SetSelectionNAnchorVirtualSpace, SETSELECTIONNANCHORVIRTUALSPACE, DocPosU, selnum, DocPos, position)
DeclareSciCallR1(GetSelectionNStart, GETSELECTIONNSTART, DocPos, DocPosU, selnum)
DeclareSciCallR1(GetSelectionNEnd, GETSELECTIONNEND, DocPos, DocPosU, selnum)
+DeclareSciCallR1(GetSelectionNStartVirtualSpace, GETSELECTIONNSTARTVIRTUALSPACE, DocPos, DocPosU, selnum)
+DeclareSciCallR1(GetSelectionNEndVirtualSpace, GETSELECTIONNENDVIRTUALSPACE, DocPos, DocPosU, selnum)
+
DeclareSciCallV0(SwapMainAnchorCaret, SWAPMAINANCHORCARET)
DeclareSciCallV0(MultipleSelectAddEach, MULTIPLESELECTADDEACH)
DeclareSciCallV0(RotateSelection, ROTATESELECTION)
@@ -212,6 +215,7 @@ DeclareSciCallV0(DelLineRight, DELLINERIGHT)
DeclareSciCallV0(LineDelete, LINEDELETE)
DeclareSciCallV1(LinesSplit, LINESSPLIT, int, pix)
DeclareSciCallV0(LinesJoin, LINESJOIN)
+DeclareSciCallV0(EditToggleOverType, EDITTOGGLEOVERTYPE)
// Commands
DeclareSciCallV0(LineDuplicate, LINEDUPLICATE)
@@ -541,6 +545,8 @@ DeclareSciCallR0(IsIMEModeCJK, ISIMEMODECJK, bool)
DeclareSciCallR0(IsSelectionEmpty, GETSELECTIONEMPTY, bool)
DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, bool)
+#define Sci_IsDocEmpty() (SciCall_GetTextLength() <= 0LL)
+
#define Sci_IsThinSelection() (SciCall_GetSelectionMode() == SC_SEL_THIN)
#define Sci_IsMultiSelection() ((SciCall_GetSelections() > 1) && !SciCall_IsSelectionRectangle())
#define Sci_IsMultiOrRectangleSelection() ((SciCall_GetSelections() > 1) || SciCall_IsSelectionRectangle())
diff --git a/src/TypeDefs.h b/src/TypeDefs.h
index a49ca1274..98c0db42e 100644
--- a/src/TypeDefs.h
+++ b/src/TypeDefs.h
@@ -655,6 +655,9 @@ typedef struct _themeFiles
#define NOTEPAD3_MODULE_DIR_ENV_VAR L"NOTEPAD3MODULEDIR"
+//#define NP3_VIRTUAL_SPACE_ACCESS_OPTIONS (Settings2.DenyVirtualSpaceAccess ? SCVS_NONE : (SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART | SCVS_USERACCESSIBLE))
+#define NP3_VIRTUAL_SPACE_ACCESS_OPTIONS (Settings2.DenyVirtualSpaceAccess ? SCVS_NONE : (SCVS_RECTANGULARSELECTION | SCVS_NOWRAPLINESTART))
+
// from
#define INTERNET_MAX_PATH_LENGTH 2048
#define INTERNET_MAX_SCHEME_LENGTH 32 // longest protocol name length
diff --git a/src/VersionEx.h b/src/VersionEx.h
index 6c0b5280f..83c15146f 100644
--- a/src/VersionEx.h
+++ b/src/VersionEx.h
@@ -9,7 +9,7 @@
#define VERSION_MAJOR 5
#define VERSION_MINOR 20
#define VERSION_REV 212
-#define VERSION_BUILD 2
+#define VERSION_BUILD 3
#define SCINTILLA_VER 430
#define ONIGURUMA_REGEX_VER 6.9.4
#define UCHARDET_VER 2018.09.27