diff --git a/Versions/build.txt b/Versions/build.txt
index d00491fd7..0cfbf0888 100644
--- a/Versions/build.txt
+++ b/Versions/build.txt
@@ -1 +1 @@
-1
+2
diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf
index ef7fc9065..a161287fc 100644
--- a/res/Notepad3.exe.manifest.conf
+++ b/res/Notepad3.exe.manifest.conf
@@ -3,7 +3,7 @@
Notepad3 RC3
diff --git a/src/Edit.c b/src/Edit.c
index 1b9c4a3dc..3e52484bf 100644
--- a/src/Edit.c
+++ b/src/Edit.c
@@ -4777,14 +4777,11 @@ void EditSetSelectionEx(DocPos iAnchorPos, DocPos iCurrentPos, DocPos vSpcAnchor
if (vSpcCurrent > 0) {
SciCall_SetRectangularSelectionCaretVirtualSpace(vSpcCurrent);
}
- SciCall_ScrollRange(iAnchorPos, iCurrentPos);
}
else {
SciCall_SetSel(iAnchorPos, iCurrentPos); // scrolls into view
}
-
- // remember x-pos for moving caret vertically
- SciCall_ChooseCaretX();
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
}
UpdateToolbar();
UpdateStatusbar(false);
@@ -4805,6 +4802,21 @@ void EditEnsureConsistentLineEndings(HWND hwnd)
}
+//=============================================================================
+//
+// EditScrollToLine() - normalize View
+//
+void EditScrollToLine(const DocLn iDocLine)
+{
+ if (iDocLine == Sci_GetCurrentLineNumber()) {
+ Sci_ScrollChooseCaret();
+ }
+ //~Sci_ScrollToLine(iDocLine);
+ DocLn const vSlop = max_ln(2, Settings2.CurrentLineVerticalSlop);
+ SciCall_SetFirstVisibleLine(clampp((iDocLine - vSlop), 0, Sci_GetLastDocLineNumber()));
+}
+
+
//=============================================================================
//
// EditEnsureSelectionVisible()
@@ -4819,7 +4831,7 @@ void EditEnsureSelectionVisible()
SciCall_EnsureVisible(iAnchorLine);
if (iAnchorLine != iCurrentLine) { SciCall_EnsureVisible(iCurrentLine); }
- Sci_ScrollToLine(iCurrentLine, true);
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
}
@@ -4827,66 +4839,25 @@ void EditEnsureSelectionVisible()
//
// EditJumpTo()
//
-void EditJumpTo(HWND hwnd, DocLn iNewLine, DocPos iNewCol)
+void EditJumpTo(DocLn iNewLine, DocPos iNewCol)
{
- UNUSED(hwnd);
// jump to end with line set to -1
if (iNewLine < 0) {
SciCall_DocumentEnd();
return;
}
- const DocLn iMaxLine = SciCall_GetLineCount();
+ DocLn const iMaxLine = SciCall_GetLineCount();
// Line maximum is iMaxLine - 1 (doc line count starts with 0)
iNewLine = (min_ln(iNewLine, iMaxLine) - 1);
- const DocPos iLineEndPos = SciCall_GetLineEndPosition(iNewLine);
+ DocPos const iLineEndPos = SciCall_GetLineEndPosition(iNewLine);
// Column minimum is 1
DocPos const colOffset = Globals.bZeroBasedColumnIndex ? 0 : 1;
- iNewCol = max_p(0, min_p((iNewCol - colOffset), iLineEndPos));
+ iNewCol = clampp((iNewCol - colOffset), 0, iLineEndPos);
const DocPos iNewPos = SciCall_FindColumn(iNewLine, iNewCol);
SciCall_GotoPos(iNewPos);
- Sci_ScrollToLine(iNewLine, true);
-
- // remember x-pos for moving caret vertically
- SciCall_ChooseCaretX();
-}
-
-
-
-//=============================================================================
-//
-// EditGetCurrentDocView()
-//
-const DOCVIEWPOS_T EditGetCurrentDocView(HWND hwnd)
-{
- UNUSED(hwnd);
- DOCVIEWPOS_T docView = INIT_DOCVIEWPOS;
- docView.iCurPos = Sci_IsMultiOrRectangleSelection() ? SciCall_GetSelectionNCaret(0) : SciCall_GetCurrentPos();
- docView.iAnchorPos = Sci_IsMultiOrRectangleSelection() ? SciCall_GetSelectionNAnchor(SciCall_GetSelections() - 1) : SciCall_GetAnchor();
- //docView.vSpcCaretPos = SciCall_IsSelectionRectangle() ? SciCall_GetRectangularSelectionCaretVirtualSpace() : -1;
- //docView.vSpcAnchorPos = SciCall_IsSelectionRectangle() ? SciCall_GetRectangularSelectionAnchorVirtualSpace() : -1;
- docView.iCurrLine = SciCall_LineFromPosition(docView.iCurPos);
- docView.iCurColumn = SciCall_GetColumn(docView.iCurPos);
- docView.iVisTopLine = SciCall_GetFirstVisibleLine();
- docView.iDocTopLine = SciCall_DocLineFromVisible(docView.iVisTopLine);
- docView.iXOffset = SciCall_GetXOffset();
- docView.bIsTail = (docView.iCurPos == docView.iAnchorPos) && (docView.iCurrLine >= (SciCall_GetLineCount() - 1));
- return docView;
-}
-
-
-//=============================================================================
-//
-// EditSetDocView()
-//
-void EditSetDocView(HWND hwnd, const DOCVIEWPOS_T docView)
-{
- EditJumpTo(hwnd, docView.iCurrLine + 1, docView.iCurColumn + 1);
- DocLn const iNewTopLine = SciCall_GetFirstVisibleLine();
- SciCall_EnsureVisible(iNewTopLine);
- SciCall_LineScroll(0, docView.iVisTopLine - iNewTopLine);
- SciCall_SetXOffset(docView.iXOffset);
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
}
@@ -6655,12 +6626,8 @@ void EditSelectionMultiSelectAll()
DocPos const iMainCaret = SciCall_GetSelectionNCaret(0);
if (iMainAnchor > iMainCaret) {
SciCall_SwapMainAnchorCaret();
- SciCall_ScrollRange(iMainCaret, iMainAnchor);
}
- else {
- SciCall_ScrollRange(iMainAnchor, iMainCaret);
- }
- SciCall_ChooseCaretX();
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
SciCall_SetTargetRange(saveTargetBeg, saveTargetEnd); //restore
@@ -6977,11 +6944,11 @@ void EditToggleView(HWND hwnd)
EditHideNotMarkedLineRange(hwnd, FocusedView.HideNonMatchedLines);
if (FocusedView.HideNonMatchedLines) {
- Sci_ScrollToLine(0, false);
+ EditScrollToLine(0);
SciCall_SetReadOnly(true);
}
else {
- Sci_ScrollToLine(Sci_GetCurrentLineNumber(), true);
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
SciCall_SetReadOnly(false);
}
@@ -7721,7 +7688,7 @@ static INT_PTR CALLBACK EditLinenumDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPA
if ((iNewLine > 0) && (iNewLine <= iMaxLnNum) && (iNewCol > 0))
{
- EditJumpTo(Globals.hwndEdit, iNewLine, iNewCol);
+ EditJumpTo(iNewLine, iNewCol);
EndDialog(hwnd, IDOK);
}
else {
@@ -8702,7 +8669,7 @@ void EditFoldClick(DocLn ln, int mode)
EditFoldPerformAction(ln, mode, SNIFF);
if (fGotoFoldPoint) {
- EditJumpTo(Globals.hwndEdit, ln + 1, 0);
+ EditJumpTo(ln + 1, 0);
}
}
@@ -8721,7 +8688,7 @@ void EditFoldCmdKey(FOLD_MOVE move, FOLD_ACTION action)
{
if ((SciCall_GetFoldLevel(ln) & SC_FOLDLEVELHEADERFLAG) && SciCall_GetLineVisible(ln))
{
- EditJumpTo(Globals.hwndEdit, ln + 1, 0);
+ EditJumpTo(ln + 1, 0);
return;
}
}
@@ -8732,7 +8699,7 @@ void EditFoldCmdKey(FOLD_MOVE move, FOLD_ACTION action)
{
if ((SciCall_GetFoldLevel(ln) & SC_FOLDLEVELHEADERFLAG) && SciCall_GetLineVisible(ln))
{
- EditJumpTo(Globals.hwndEdit, ln + 1, 0);
+ EditJumpTo(ln + 1, 0);
return;
}
}
diff --git a/src/Edit.h b/src/Edit.h
index 07aab561e..eef2adbec 100644
--- a/src/Edit.h
+++ b/src/Edit.h
@@ -79,11 +79,10 @@ void EditSplitLines(HWND hwnd);
void EditJoinLinesEx(bool,bool);
void EditSortLines(HWND hwnd,int iSortFlags);
-void EditJumpTo(HWND hwnd, DocLn iNewLine, DocPos iNewCol);
-const DOCVIEWPOS_T EditGetCurrentDocView(HWND hwnd);
-void EditSetDocView(HWND hwnd, const DOCVIEWPOS_T docView);
+void EditJumpTo(DocLn iNewLine, DocPos iNewCol);
void EditSetSelectionEx(DocPos iAnchorPos, DocPos iCurrentPos, DocPos vSpcAnchor, DocPos vSpcCurrent);
void EditFixPositions();
+void EditScrollToLine(const DocLn iDocLine);
void EditEnsureSelectionVisible();
void EditEnsureConsistentLineEndings(HWND hwnd);
void EditGetExcerpt(HWND hwnd,LPWSTR lpszExcerpt,DWORD cchExcerpt);
diff --git a/src/Notepad3.c b/src/Notepad3.c
index 7c2ac6b86..4587871b2 100644
--- a/src/Notepad3.c
+++ b/src/Notepad3.c
@@ -1302,7 +1302,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow)
}
}
if (s_flagJumpTo) { // Jump to position
- EditJumpTo(Globals.hwndEdit,s_iInitialLine,s_iInitialColumn);
+ EditJumpTo(s_iInitialLine,s_iInitialColumn);
}
}
}
@@ -1359,7 +1359,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow)
if (SciCall_CanPaste()) {
bool bAutoIndent2 = Settings.AutoIndent;
Settings.AutoIndent = 0;
- EditJumpTo(Globals.hwndEdit, -1, 0);
+ EditJumpTo(-1, 0);
_BEGIN_UNDO_ACTION_;
if (!Sci_IsDocEmpty()) {
SciCall_NewLine();
@@ -1369,7 +1369,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow)
_END_UNDO_ACTION_;
Settings.AutoIndent = bAutoIndent2;
if (s_flagJumpTo)
- EditJumpTo(Globals.hwndEdit, s_iInitialLine, s_iInitialColumn);
+ EditJumpTo(s_iInitialLine, s_iInitialColumn);
else
EditEnsureSelectionVisible();
}
@@ -2848,7 +2848,7 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (params->flagJumpTo) {
if (params->iInitialLine == 0)
params->iInitialLine = 1;
- EditJumpTo(Globals.hwndEdit, params->iInitialLine, params->iInitialColumn);
+ EditJumpTo(params->iInitialLine, params->iInitialColumn);
}
s_flagLexerSpecified = false;
@@ -2957,7 +2957,7 @@ LRESULT MsgChangeNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
if (FileWatching.MonitoringLog)
{
SciCall_SetReadOnly(FileWatching.MonitoringLog);
- Sci_ScrollToLine(Sci_GetLastDocLineNumber(), false);
+ EditScrollToLine(Sci_GetLastDocLineNumber());
}
else {
SciCall_GotoPos(iCurPos);
@@ -4778,7 +4778,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
{
SciCall_EnsureVisible(iNextLine);
SciCall_GotoLine(iNextLine);
- SciCall_ScrollCaret();
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
}
}
break;
@@ -4799,7 +4799,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
{
SciCall_EnsureVisible(iNextLine);
SciCall_GotoLine(iNextLine);
- SciCall_ScrollCaret();
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
}
}
break;
@@ -4870,9 +4870,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_EDIT_SELTONEXT:
{
SciCall_RotateSelection();
- DocPosU const iMain = SciCall_GetMainSelection();
- SciCall_ScrollRange(SciCall_GetSelectionNAnchor(iMain), SciCall_GetSelectionNCaret(iMain));
- SciCall_ChooseCaretX();
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
}
break;
@@ -4881,13 +4879,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
DocPosU const iMain = SciCall_GetMainSelection();
if (iMain > 0) {
SciCall_SetMainSelection(iMain - 1);
- SciCall_ScrollRange(SciCall_GetSelectionNAnchor(iMain - 1), SciCall_GetSelectionNCaret(iMain - 1));
} else {
DocPosU const iNewMain = SciCall_GetSelections() - 1;
SciCall_SetMainSelection(iNewMain);
- SciCall_ScrollRange(SciCall_GetSelectionNAnchor(iNewMain), SciCall_GetSelectionNCaret(iNewMain));
}
- SciCall_ChooseCaretX();
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
}
break;
@@ -5311,7 +5307,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
FileWatching.AutoReloadTimeout = 250UL;
UndoRedoRecordingStop();
SciCall_SetEndAtLastLine(false);
- Sci_ScrollToLine(Sci_GetLastDocLineNumber(), false);
+ EditScrollToLine(Sci_GetLastDocLineNumber());
}
else {
s_flagChangeNotify = FileWatching.flagChangeNotify;
@@ -5321,7 +5317,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
FileWatching.AutoReloadTimeout = Settings2.AutoReloadTimeout;
UndoRedoRecordingStart();
SciCall_SetEndAtLastLine(!Settings.ScrollPastEOF);
- Sci_ScrollToLine(Sci_GetCurrentLineNumber(), true);
+ EditScrollToLine(Sci_GetCurrentLineNumber()); // normalize view
}
InstallFileWatching(Globals.CurrentFile); // force
@@ -9713,7 +9709,8 @@ bool FileRevert(LPCWSTR szFileName, bool bIgnoreCmdLnEnc)
if (StrIsEmpty(szFileName)) { return false; }
bool bPreserveView = true;
- DOCVIEWPOS_T const docView = EditGetCurrentDocView(Globals.hwndEdit);
+ DocLn const curLineNum = Sci_GetCurrentLineNumber();
+ bool const bIsAtDocEnd = (curLineNum >= (Sci_GetLastDocLineNumber() - Settings2.CurrentLineVerticalSlop));
Encoding_SrcWeak(CPI_NONE);
if (bIgnoreCmdLnEnc) {
@@ -9731,9 +9728,10 @@ bool FileRevert(LPCWSTR szFileName, bool bIgnoreCmdLnEnc)
}
if (FileWatching.FileWatchingMode == FWM_AUTORELOAD) {
- if (docView.bIsTail || FileWatching.MonitoringLog) {
+ if (bIsAtDocEnd || FileWatching.MonitoringLog) {
bPreserveView = false;
- Sci_ScrollToLine(Sci_GetLastDocLineNumber(), false);
+ SciCall_DocumentEnd();
+ EditScrollToLine(Sci_GetLastDocLineNumber());
}
}
@@ -9744,12 +9742,12 @@ bool FileRevert(LPCWSTR szFileName, bool bIgnoreCmdLnEnc)
SciCall_ClearSelections();
bPreserveView = false;
SciCall_DocumentEnd();
- EditEnsureSelectionVisible();
+ EditScrollToLine(Sci_GetLastDocLineNumber());
}
}
if (bPreserveView) {
- EditSetDocView(Globals.hwndEdit, docView);
+ EditJumpTo(curLineNum, 0);
}
SciCall_SetSavePoint();
@@ -10856,7 +10854,7 @@ void CALLBACK PasteBoardTimer(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
if (SciCall_CanPaste()) {
bool bAutoIndent2 = Settings.AutoIndent;
Settings.AutoIndent = 0;
- EditJumpTo(Globals.hwndEdit,-1,0);
+ EditJumpTo(-1,0);
_BEGIN_UNDO_ACTION_;
if (!Sci_IsDocEmpty()) {
SciCall_NewLine();
diff --git a/src/SciCall.h b/src/SciCall.h
index aeaee204c..8df7cfc5f 100644
--- a/src/SciCall.h
+++ b/src/SciCall.h
@@ -599,7 +599,10 @@ inline DocPos Sci_GetRangeMaxLineLength(DocLn iBeginLine, DocLn iEndLine) {
}
// respect VSlop settings
-#define Sci_ScrollToLine(L,C) { SciCall_ScrollRange(SciCall_PositionFromLine(L), SciCall_GetLineEndPosition(L)); if (C) { SciCall_ScrollCaret(); } }
+inline void Sci_ScrollChooseCaret() { SciCall_ScrollCaret(); SciCall_ChooseCaretX(); }
+inline void Sci_ScrollToLine(DocLn line) { SciCall_ScrollRange(SciCall_PositionFromLine(line), SciCall_GetLineEndPosition(line)); }
+inline void Sci_ScrollToCurrentLine() { Sci_ScrollToLine(Sci_GetCurrentLineNumber()); }
+
#define Sci_ReplaceTarget(M,L,T) (((M) == SCI_REPLACETARGET) ? SciCall_ReplaceTarget((L),(T)) : SciCall_ReplaceTargetRe((L),(T)))
diff --git a/src/TypeDefs.h b/src/TypeDefs.h
index 597d5111f..a2e94749a 100644
--- a/src/TypeDefs.h
+++ b/src/TypeDefs.h
@@ -620,25 +620,6 @@ typedef struct _editfileiostatus
//=============================================================================
-typedef struct _docviewpos_t
-{
- DocPos iCurPos;
- DocPos iAnchorPos;
- //DocPos vSpcCaretPos;
- //DocPos vSpcAnchorPos;
- DocLn iCurrLine;
- DocPos iCurColumn;
- DocLn iVisTopLine;
- DocLn iDocTopLine;
- int iXOffset;
- bool bIsTail;
-
-} DOCVIEWPOS_T, * PDOCVIEWPOS_T;
-
-#define INIT_DOCVIEWPOS { 0, 0, /*0, 0,*/ 0, 0, 0, 0, 0, false }
-
-//=============================================================================
-
typedef struct _themeFiles
{
UINT rid;
diff --git a/src/VersionEx.h b/src/VersionEx.h
index b6638db13..5a8133da5 100644
--- a/src/VersionEx.h
+++ b/src/VersionEx.h
@@ -9,11 +9,11 @@
#define VERSION_MAJOR 5
#define VERSION_MINOR 20
#define VERSION_REV 320
-#define VERSION_BUILD 1
+#define VERSION_BUILD 2
#define SCINTILLA_VER 432
#define ONIGURUMA_REGEX_VER 6.9.4
#define UCHARDET_VER 2018.09.27
#define TINYEXPR_VER 2018.05.11
#define UTHASH_VER 2.1.0
#define VERSION_PATCH RC3
-#define VERSION_COMMIT_ID dkt1-amr
+#define VERSION_COMMIT_ID t7820-rk