SynEdit: Trailing-Space-Trimmer, clean up / better workaround for syncro edit

git-svn-id: trunk@60078 -
This commit is contained in:
martin 2019-01-14 01:45:01 +00:00
parent 26d29fe3be
commit 02479b4a1f

View File

@ -561,12 +561,12 @@ begin
if (not fEnabled) then exit; if (not fEnabled) then exit;
if (fLockCount > 0) or (length(fSpaces) = 0) or if (fLockCount > 0) or (length(fSpaces) = 0) or
(fLineIndex < 0) or (fLineIndex >= fSynStrings.Count) or (fLineIndex < 0) or (fLineIndex >= fSynStrings.Count) or
( (fLineIndex = TSynEditCaret(Sender).LinePos - 1) and ( (fLineIndex = ToIdx(TSynEditCaret(Sender).LinePos)) and
( (FTrimType in [settLeaveLine]) or ( (FTrimType in [settLeaveLine]) or
((FTrimType in [settEditLine]) and not FLineEdited) )) ((FTrimType in [settEditLine]) and not FLineEdited) ))
then begin then begin
if (fLineIndex <> TSynEditCaret(Sender).LinePos - 1) then begin if (fLineIndex <> ToIdx(TSynEditCaret(Sender).LinePos)) then begin
{$IFDEF SynTrimDebug}debugln(['--- Trimmer -- CaretChnaged - Clearing 1 ', ' fLineIndex=', fLineIndex, ' fSpaces=',length(fSpaces), 'newCaretYPos=',TSynEditCaret(Sender).LinePos]);{$ENDIF} {$IFDEF SynTrimDebug}debugln(['--- Trimmer -- CaretChanged - Clearing 1 ', ' fLineIndex=', fLineIndex, ' fSpaces=',length(fSpaces), 'newCaretYPos=',TSynEditCaret(Sender).LinePos]);{$ENDIF}
if fSpaces <> '' then IncViewChangeStamp; if fSpaces <> '' then IncViewChangeStamp;
fLineIndex := TSynEditCaret(Sender).LinePos - 1; fLineIndex := TSynEditCaret(Sender).LinePos - 1;
fSpaces := ''; fSpaces := '';
@ -579,7 +579,7 @@ begin
if (fLineIndex <> TSynEditCaret(Sender).LinePos - 1) or if (fLineIndex <> TSynEditCaret(Sender).LinePos - 1) or
(FTrimType = settIgnoreAll) then (FTrimType = settIgnoreAll) then
begin begin
{$IFDEF SynTrimDebug}debugln(['--- Trimmer -- CaretChnaged - Trimming,clear 1 ', ' fLineIndex=', fLineIndex, ' fSpaces=',length(fSpaces), 'newCaretYPos=',TSynEditCaret(Sender).LinePos]);{$ENDIF} {$IFDEF SynTrimDebug}debugln(['--- Trimmer -- CaretChanged - Trimming,clear 1 ', ' fLineIndex=', fLineIndex, ' fSpaces=',length(fSpaces), 'newCaretYPos=',TSynEditCaret(Sender).LinePos]);{$ENDIF}
MaybeAddUndoForget(FLineIndex+1, FSpaces); MaybeAddUndoForget(FLineIndex+1, FSpaces);
i := length(FSpaces); i := length(FSpaces);
fSpaces := ''; fSpaces := '';
@ -596,7 +596,7 @@ begin
else else
j := i - length(s) - 1; j := i - length(s) - 1;
s := copy(FSpaces, j + 1, MaxInt); s := copy(FSpaces, j + 1, MaxInt);
{$IFDEF SynTrimDebug}debugln(['--- Trimmer -- CarteChnaged - Trimming,part to ',length(s),' ', ' fLineIndex=', fLineIndex, ' fSpaces=',length(fSpaces), 'newCaretYPos=',TSynEditCaret(Sender).LinePos]);{$ENDIF} {$IFDEF SynTrimDebug}debugln(['--- Trimmer -- CaretChanged - Trimming,part to ',length(s),' ', ' fLineIndex=', fLineIndex, ' fSpaces=',length(fSpaces), 'newCaretYPos=',TSynEditCaret(Sender).LinePos]);{$ENDIF}
FSpaces := copy(FSpaces, 1, j); FSpaces := copy(FSpaces, 1, j);
i := length(s); i := length(s);
MaybeAddUndoForget(FLineIndex+1, s); MaybeAddUndoForget(FLineIndex+1, s);
@ -815,6 +815,8 @@ procedure TSynEditStringTrimmingList.ForceTrim;
begin begin
FlushNotificationCache; FlushNotificationCache;
DoCaretChanged(fCaret); // Caret May be locked DoCaretChanged(fCaret); // Caret May be locked
if (fLockCount > 1) then
exit; // workaround for syncro edit
TrimAfterLock; TrimAfterLock;
end; end;