mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 11:29:19 +02:00
SynEdit: Fixes for undo with trim-spaces
git-svn-id: trunk@18122 -
This commit is contained in:
parent
1da8f90a7f
commit
c920e5366f
@ -5697,6 +5697,8 @@ begin
|
|||||||
{$IFDEF SYN_LAZARUS}crTrimSpace,{$ENDIF}
|
{$IFDEF SYN_LAZARUS}crTrimSpace,{$ENDIF}
|
||||||
crSilentDelete, crSilentDeleteAfterCursor: //mh 2000-10-30
|
crSilentDelete, crSilentDeleteAfterCursor: //mh 2000-10-30
|
||||||
begin
|
begin
|
||||||
|
if Item.fChangeReason = crTrimSpace then
|
||||||
|
FTrimmedLinesView.UndoTrimmedSpaces := true;
|
||||||
// If there's no selection, we have to set
|
// If there's no selection, we have to set
|
||||||
// the Caret's position manually.
|
// the Caret's position manually.
|
||||||
if Item.fChangeSelMode = smColumn then
|
if Item.fChangeSelMode = smColumn then
|
||||||
@ -5724,6 +5726,7 @@ begin
|
|||||||
fRedoList.AddChange(Item.fChangeReason, Item.fChangeStartPos,
|
fRedoList.AddChange(Item.fChangeReason, Item.fChangeStartPos,
|
||||||
Item.fChangeEndPos, '', Item.fChangeSelMode);
|
Item.fChangeEndPos, '', Item.fChangeSelMode);
|
||||||
EnsureCursorPosVisible;
|
EnsureCursorPosVisible;
|
||||||
|
FTrimmedLinesView.UndoTrimmedSpaces := False;
|
||||||
end;
|
end;
|
||||||
crTrimRealSpace:
|
crTrimRealSpace:
|
||||||
FTrimmedLinesView.UndoRealSpaces(Item);
|
FTrimmedLinesView.UndoRealSpaces(Item);
|
||||||
@ -5796,6 +5799,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
|
FTrimmedLinesView.UndoTrimmedSpaces := False;
|
||||||
FBlockSelection.SelectionMode := OldSelMode;
|
FBlockSelection.SelectionMode := OldSelMode;
|
||||||
FBlockSelection.ActiveSelectionMode := Item.fChangeSelMode;
|
FBlockSelection.ActiveSelectionMode := Item.fChangeSelMode;
|
||||||
if ChangeScrollPastEol then //mh 2000-10-30
|
if ChangeScrollPastEol then //mh 2000-10-30
|
||||||
|
@ -43,6 +43,7 @@ type
|
|||||||
fLineText: String;
|
fLineText: String;
|
||||||
fLineIndex: Integer;
|
fLineIndex: Integer;
|
||||||
fEnabled: Boolean;
|
fEnabled: Boolean;
|
||||||
|
FUndoTrimmedSpaces: Boolean;
|
||||||
fLockCount: Integer;
|
fLockCount: Integer;
|
||||||
fLockList : TStringList;
|
fLockList : TStringList;
|
||||||
procedure DoCaretChanged(Sender : TObject);
|
procedure DoCaretChanged(Sender : TObject);
|
||||||
@ -79,6 +80,7 @@ type
|
|||||||
procedure ForceTrim; // for redo; redo can not wait for UnLock
|
procedure ForceTrim; // for redo; redo can not wait for UnLock
|
||||||
procedure UndoRealSpaces(Item: TSynEditUndoItem);
|
procedure UndoRealSpaces(Item: TSynEditUndoItem);
|
||||||
property Enabled : Boolean read fEnabled write SetEnabled;
|
property Enabled : Boolean read fEnabled write SetEnabled;
|
||||||
|
property UndoTrimmedSpaces: Boolean read FUndoTrimmedSpaces write FUndoTrimmedSpaces;
|
||||||
property UndoList: TSynEditUndoList read fUndoList write fUndoList;
|
property UndoList: TSynEditUndoList read fUndoList write fUndoList;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -95,6 +97,7 @@ begin
|
|||||||
fLineIndex:= -1;
|
fLineIndex:= -1;
|
||||||
fSpaces := '';
|
fSpaces := '';
|
||||||
fEnabled:=false;
|
fEnabled:=false;
|
||||||
|
FUndoTrimmedSpaces := False;
|
||||||
Inherited Create(ASynStringSource);
|
Inherited Create(ASynStringSource);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -136,6 +139,8 @@ procedure TSynEditStringTrimmingList.UndoRealSpaces(Item: TSynEditUndoItem);
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
if length(fSynStrings.Strings[Item.fChangeStartPos.y-1]) + 1 <> Item.fChangeStartPos.x then
|
||||||
|
exit;
|
||||||
fSynStrings.Strings[Item.fChangeStartPos.y-1]
|
fSynStrings.Strings[Item.fChangeStartPos.y-1]
|
||||||
:= copy(fSynStrings.Strings[Item.fChangeStartPos.y-1],
|
:= copy(fSynStrings.Strings[Item.fChangeStartPos.y-1],
|
||||||
1, Item.fChangeStartPos.x-1) + Item.fChangeStr;
|
1, Item.fChangeStartPos.x-1) + Item.fChangeStr;
|
||||||
@ -150,26 +155,31 @@ var
|
|||||||
l, i:integer;
|
l, i:integer;
|
||||||
temp: String;
|
temp: String;
|
||||||
begin
|
begin
|
||||||
if (not fEnabled) or (fUndoList.IsLocked) then exit(s);
|
if (not fEnabled) then exit(s);
|
||||||
if RealUndo then begin
|
If (fUndoList.IsLocked and not UndoTrimmedSpaces) then begin
|
||||||
temp := fSynStrings.Strings[Index];
|
result := s;
|
||||||
l := length(temp);
|
temp := '';
|
||||||
i:= l;
|
end else begin
|
||||||
while (i>0) and (temp[i] in [#9, ' ']) do dec(i);
|
if RealUndo then begin
|
||||||
// Add RealSpaceUndo
|
temp := fSynStrings.Strings[Index];
|
||||||
if i < l then
|
l := length(temp);
|
||||||
fUndoList.AddChange(crTrimRealSpace, Point(i+1, Index+1),
|
i:= l;
|
||||||
Point(l, Index+1), copy(temp, i+1, l-i), smNormal);
|
while (i>0) and (temp[i] in [#9, ' ']) do dec(i);
|
||||||
end;
|
// Add RealSpaceUndo
|
||||||
|
if i < l then
|
||||||
|
fUndoList.AddChange(crTrimRealSpace, Point(i+1, Index+1),
|
||||||
|
Point(l, Index+1), copy(temp, i+1, l-i), smNormal);
|
||||||
|
end;
|
||||||
|
|
||||||
l := length(s);
|
l := length(s);
|
||||||
i := l;
|
i := l;
|
||||||
while (i>0) and (s[i] in [#9, ' ']) do dec(i);
|
while (i>0) and (s[i] in [#9, ' ']) do dec(i);
|
||||||
temp := copy(s, i+1, l-i);
|
temp := copy(s, i+1, l-i);
|
||||||
if i=l then
|
if i=l then
|
||||||
result := s // No need to make a copy
|
result := s // No need to make a copy
|
||||||
else
|
else
|
||||||
result := copy(s, 1, i);
|
result := copy(s, 1, i);
|
||||||
|
end;
|
||||||
|
|
||||||
if fLockCount > 0 then begin
|
if fLockCount > 0 then begin
|
||||||
i := fLockList.IndexOfObject(TObject(pointer(Index)));
|
i := fLockList.IndexOfObject(TObject(pointer(Index)));
|
||||||
|
Loading…
Reference in New Issue
Block a user