From eabdaef50e7194a6b1520e2d092d56691344a013 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Wed, 28 Feb 2024 11:11:12 +0100 Subject: [PATCH] +chg: try to preserve caret position after recoding --- src/Edit.c | 2 ++ src/Notepad3.c | 6 +++--- src/SciCall.h | 2 ++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index f7596dcb9..767a57ba3 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -524,9 +524,11 @@ 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); + DocPos const curPos = SciCall_GetCurrentPos(); EditSetNewText(hwnd, pchText, (cbText - 1), true, false); Encoding_Current(encDest); FreeMem(pchText); + Sci_GotoPosTop(curPos); return true; } else { diff --git a/src/Notepad3.c b/src/Notepad3.c index d0e8d6bd3..b8f7ec2a9 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6919,7 +6919,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) if (iPos != iAnchor) { UndoTransActionBegin(); - SciCall_SetSel(iPos, iPos); + SciCall_GotoPos(iPos); EndUndoTransAction(); } else { if (iPos == iStartPos) { @@ -6943,7 +6943,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) if (iPos != iAnchor) { UndoTransActionBegin(); - SciCall_SetSel(iPos, iPos); + SciCall_GotoPos(iPos); EndUndoTransAction(); } else { if (iStartPos != iEndPos) { @@ -8478,7 +8478,7 @@ static void _HandleAutoCloseTags() } if ((cchIns > 3) && !isNonClosingTag) { EditReplaceSelection(replaceBuf, false); - SciCall_SetSel(iCurPos, iCurPos); + SciCall_GotoPos(iCurPos); } } } diff --git a/src/SciCall.h b/src/SciCall.h index ec75f18d2..ec1f0efc3 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -805,6 +805,8 @@ 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 // ----------------------------------------------------------------------------