From 79109a77e40f796cbef7041ad47b63c8e6f891bd Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Wed, 28 Feb 2024 11:30:13 +0100 Subject: [PATCH] +chg: try to preserve caret position and visible line positions after recoding --- src/Edit.c | 4 +++- src/Notepad3.c | 5 +++++ src/SciCall.h | 2 -- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index 767a57ba3..d5389911b 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -524,11 +524,13 @@ bool EditConvertText(HWND hwnd, cpi_enc_t encSource, cpi_enc_t encDest) if (pchText) { WideCharToMultiByteEx(Encoding_SciCP, 0, pwchText, -1, pchText, cbText, NULL, NULL); FreeMem(pwchText); + DocLn const vis1stLine = SciCall_GetFirstVisibleLine(); DocPos const curPos = SciCall_GetCurrentPos(); EditSetNewText(hwnd, pchText, (cbText - 1), true, false); Encoding_Current(encDest); + SciCall_GotoPos(curPos); + SciCall_SetFirstVisibleLine(vis1stLine); FreeMem(pchText); - Sci_GotoPosTop(curPos); return true; } else { diff --git a/src/Notepad3.c b/src/Notepad3.c index b8f7ec2a9..3dab1848a 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6746,6 +6746,8 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case CMD_ESCAPE: { + + DocLn const vis1stLine = SciCall_GetFirstVisibleLine(); DocPos const iCurPos = SciCall_GetCurrentPos(); int skipLevel = Settings2.ExitOnESCSkipLevel; @@ -6764,6 +6766,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) SciCall_ClearSelections(); //~EndUndoTransAction(); SciCall_GotoPos(iCurPos); + SciCall_SetFirstVisibleLine(vis1stLine); s_bInMultiEditMode = false; --skipLevel; } @@ -8440,6 +8443,7 @@ static void _HandleAutoCloseTags() /// int const lexerID = SciCall_GetLexer(); /// if (lexerID == SCLEX_HTML || lexerID == SCLEX_XML) DocPos const maxSearchBackward = 8192; + DocLn const vis1stLine = SciCall_GetFirstVisibleLine(); DocPos const iCurPos = SciCall_GetCurrentPos(); DocPos const iHelper = iCurPos - maxSearchBackward; DocPos const iStartPos = max_p(0, iHelper); @@ -8479,6 +8483,7 @@ static void _HandleAutoCloseTags() if ((cchIns > 3) && !isNonClosingTag) { EditReplaceSelection(replaceBuf, false); SciCall_GotoPos(iCurPos); + SciCall_SetFirstVisibleLine(vis1stLine); } } } diff --git a/src/SciCall.h b/src/SciCall.h index ec1f0efc3..ec75f18d2 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -805,8 +805,6 @@ DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, bool); //~#define Sci_GetDocEndPosition() SciCall_GetTextLength() #define Sci_GetDocEndPosition() SciCall_PositionAfter(SciCall_GetTextLength() - 1) -#define Sci_GotoPosTop(position) { SciCall_GotoPos(Sci_GetDocEndPosition()); SciCall_GotoPos(curPos); } - #define Sci_ClampAlpha(alpha) clampi((alpha), SC_ALPHA_TRANSPARENT, SC_ALPHA_OPAQUE) //~SC_ALPHA_NOALPHA // ----------------------------------------------------------------------------