IDE, SynEdit: command to toggle fold on current line. Issue #41359

This commit is contained in:
Martin 2025-01-26 12:20:02 +01:00
parent 5f5a6dca90
commit 21d8cebd73
4 changed files with 35 additions and 11 deletions

View File

@ -3653,8 +3653,25 @@ procedure TSynEditFoldedView.ProcessMySynCommand(Sender: TObject;
AfterProcessing: boolean; var Handled: boolean; AfterProcessing: boolean; var Handled: boolean;
var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer; var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer;
HandlerData: pointer); HandlerData: pointer);
var
CY: Integer; procedure FoldAtCaret;
var
CY: Integer;
begin
CY := ExpandedLineForBlockAtLine(FCaret.LinePos);
if CY > 0 then begin
FoldAtTextIndex(CY-1);
FCaret.ChangeOnTouch; // setting the caret always clears selection (even setting to current pos / no change)
FCaret.LineCharPos:= Point(1, CY);
end;
end;
procedure UnFoldAtCaret;
begin
UnFoldAtTextIndex(FCaret.LinePos-1);
FCaret.Touch;
end;
begin begin
if Handled then if Handled then
exit; exit;
@ -3674,18 +3691,20 @@ begin
end; end;
EcFoldCurrent: EcFoldCurrent:
begin begin
CY := ExpandedLineForBlockAtLine(FCaret.LinePos); FoldAtCaret;
if CY > 0 then begin
FoldAtTextIndex(CY-1);
FCaret.ChangeOnTouch; // setting the caret always clears selection (even setting to current pos / no change)
FCaret.LineCharPos:= Point(1, CY);
end;
Handled := True; Handled := True;
end; end;
EcUnFoldCurrent: EcUnFoldCurrent:
begin begin
UnFoldAtTextIndex(FCaret.LinePos-1); UnFoldAtCaret;
FCaret.Touch; Handled := True;
end;
EcFoldToggle:
begin
if IsFolded(FCaret.LinePos) then
UnFoldAtCaret
else
FoldAtCaret;
Handled := True; Handled := True;
end; end;
end; end;

View File

@ -232,6 +232,7 @@ const
EcFoldCurrent = 381; EcFoldCurrent = 381;
EcUnFoldCurrent = 382; EcUnFoldCurrent = 382;
EcToggleMarkupWord = 383; EcToggleMarkupWord = 383;
EcFoldToggle = 384;
ecZoomOut = 400; ecZoomOut = 400;
ecZoomIn = 401; ecZoomIn = 401;
@ -516,7 +517,7 @@ end;
{ Command mapping routines } { Command mapping routines }
const const
EditorCommandStrs: array[0..174] of TIdentMapEntry = ( EditorCommandStrs: array[0..175] of TIdentMapEntry = (
(Value: ecNone; Name: 'ecNone'), (Value: ecNone; Name: 'ecNone'),
(Value: ecLeft; Name: 'ecLeft'), (Value: ecLeft; Name: 'ecLeft'),
(Value: ecRight; Name: 'ecRight'), (Value: ecRight; Name: 'ecRight'),
@ -691,6 +692,7 @@ const
(Value: EcFoldLevel0; Name: 'EcFoldLevel0'), (Value: EcFoldLevel0; Name: 'EcFoldLevel0'),
(Value: EcFoldCurrent; Name: 'EcFoldCurrent'), (Value: EcFoldCurrent; Name: 'EcFoldCurrent'),
(Value: EcUnFoldCurrent; Name: 'EcUnFoldCurrent'), (Value: EcUnFoldCurrent; Name: 'EcUnFoldCurrent'),
(Value: EcFoldToggle; Name: 'EcFoldToggle'),
(Value: EcToggleMarkupWord; Name: 'EcToggleMarkupWord') (Value: EcToggleMarkupWord; Name: 'EcToggleMarkupWord')
); );

View File

@ -633,6 +633,7 @@ begin
EcFoldLevel0 : Result:= srkmecUnFoldAll; EcFoldLevel0 : Result:= srkmecUnFoldAll;
EcFoldCurrent : Result:= srkmecFoldCurrent; EcFoldCurrent : Result:= srkmecFoldCurrent;
EcUnFoldCurrent : Result:= srkmecUnFoldCurrent; EcUnFoldCurrent : Result:= srkmecUnFoldCurrent;
EcFoldToggle : Result:= srkmecFoldToggle;
EcToggleMarkupWord : Result := srkmecToggleMarkupWord; EcToggleMarkupWord : Result := srkmecToggleMarkupWord;
// file menu // file menu
@ -3059,6 +3060,7 @@ begin
AddDefault(C, 'Unfold all', srkmecUnFoldAll, EcFoldLevel0); AddDefault(C, 'Unfold all', srkmecUnFoldAll, EcFoldLevel0);
AddDefault(C, 'Fold at Cursor', srkmecFoldCurrent, EcFoldCurrent); AddDefault(C, 'Fold at Cursor', srkmecFoldCurrent, EcFoldCurrent);
AddDefault(C, 'Unfold at Cursor', srkmecUnFoldCurrent, EcUnFoldCurrent); AddDefault(C, 'Unfold at Cursor', srkmecUnFoldCurrent, EcUnFoldCurrent);
AddDefault(C, 'Toggle Fold at Cursor', srkmecFoldToggle, EcFoldToggle);
// marker - without menu items in the IDE bar // marker - without menu items in the IDE bar
C:=Categories[AddCategory('Marker',srkmCatMarker,IDECmdScopeSrcEditOnly)]; C:=Categories[AddCategory('Marker',srkmCatMarker,IDECmdScopeSrcEditOnly)];

View File

@ -3224,6 +3224,7 @@ resourcestring
srkmEcFoldLevel = 'Fold to Level %d'; srkmEcFoldLevel = 'Fold to Level %d';
srkmecUnFoldAll = 'Unfold all'; srkmecUnFoldAll = 'Unfold all';
srkmecFoldCurrent = 'Fold at Cursor'; srkmecFoldCurrent = 'Fold at Cursor';
srkmecFoldToggle = 'Toggle Fold at Cursor';
srkmecUnFoldCurrent = 'Unfold at Cursor'; srkmecUnFoldCurrent = 'Unfold at Cursor';
srkmecToggleMarkupWord = 'Toggle Current-Word highlight'; srkmecToggleMarkupWord = 'Toggle Current-Word highlight';