SynEdit: multi caret, allow espape (remove all carets) to be shared with other plugins / make "escape" default

git-svn-id: trunk@58190 -
This commit is contained in:
martin 2018-06-08 20:51:13 +00:00
parent dc1a9b3fc8
commit 98b1d8f6ad
4 changed files with 23 additions and 5 deletions

View File

@ -2335,6 +2335,7 @@ begin
ActiveMode := mcmAddingCarets;
end;
ecPluginMultiCaretClearAll: begin
Handled := FCarets.Count > 0;
ClearCarets;
if not SelectionObj.SelAvail then
SelectionObj.Clear; // clear invisibel selection

View File

@ -79,6 +79,7 @@ type
TSynHighlightElement = TSynHighlighterAttributes;
TCustomSynClass = class of TSrcIDEHighlighter;
TLazSynPluginTemplateMultiCaret = class(TForm) end;
TLazSynPluginTemplateEditForm = class(TForm) end;
TLazSynPluginTemplateEditFormOff = class(TForm) end;
TLazSynPluginSyncroEditFormSel = class(TForm) end;
@ -5212,6 +5213,19 @@ begin
end;
end;
if (ASynEdit.Plugin[c] is TSynPluginMultiCaret) then begin
// Only ecPluginMultiCaretClearAll
// the others are handled in SynEdit.Keystrokes
TSynPluginMultiCaret(ASynEdit.Plugin[c]).Keystrokes.Clear;
if i >= 0 then begin
TSynPluginMultiCaret(ASynEdit.Plugin[c]).Keystrokes.Assign(
TSynPluginMultiCaret(SimilarEdit.Plugin[i]).KeyStrokes);
end else begin
KeyMap.AssignTo(TSynPluginMultiCaret(ASynEdit.Plugin[c]).Keystrokes,
TLazSynPluginTemplateMultiCaret, 0); //ecIdePTmplOffset);
end;
end;
dec(c);
end;
end;

View File

@ -1063,7 +1063,7 @@ begin
ecPluginMultiCaretSetCaret: SetSingle(VK_INSERT,[ssShift, XCtrl]);
ecPluginMultiCaretUnsetCaret: SetSingle(VK_DELETE,[ssShift, XCtrl]);
//ecPluginMultiCaretToggleCaret: SetSingle(VK_INSERT,[ssShift, XCtrl]);
ecPluginMultiCaretClearAll: SetSingle(VK_ESCAPE,[ssShift, XCtrl]);
ecPluginMultiCaretClearAll: SetSingle(VK_ESCAPE,[ssShift, ssCtrl], VK_ESCAPE,[]);
ecPluginMultiCaretModeCancelOnMove: SetCombo(VK_Q,[ssShift, XCtrl], VK_X,[ssShift, XCtrl]);
ecPluginMultiCaretModeMoveAll: SetCombo(VK_Q,[ssShift, XCtrl], VK_M,[ssShift, XCtrl]);
@ -1534,7 +1534,7 @@ begin
ecPluginMultiCaretSetCaret: SetSingle(VK_INSERT,[ssShift, ssCtrl]);
ecPluginMultiCaretUnsetCaret: SetSingle(VK_DELETE,[ssShift, ssCtrl]);
//ecPluginMultiCaretToggleCaret: SetSingle(VK_INSERT,[ssShift, ssCtrl]);
ecPluginMultiCaretClearAll: SetSingle(VK_ESCAPE,[ssShift, ssCtrl], VK_ESCAPE,[ssShift]);
ecPluginMultiCaretClearAll: SetSingle(VK_ESCAPE,[ssShift, ssCtrl], VK_ESCAPE,[]);
ecPluginMultiCaretModeCancelOnMove: SetCombo(VK_Q,[ssShift, ssCtrl], VK_X,[ssShift, ssCtrl]);
ecPluginMultiCaretModeMoveAll: SetCombo(VK_Q,[ssShift, ssCtrl], VK_M,[ssShift, ssCtrl]);
@ -2158,7 +2158,7 @@ begin
ecPluginMultiCaretSetCaret: SetSingle(VK_INSERT,[ssShift, ssCtrl]);
ecPluginMultiCaretUnsetCaret: SetSingle(VK_DELETE,[ssShift, ssCtrl]);
//ecPluginMultiCaretToggleCaret: SetSingle(VK_INSERT,[ssShift, ssCtrl]);
ecPluginMultiCaretClearAll: SetSingle(VK_ESCAPE,[ssShift, ssCtrl], VK_ESCAPE,[ssShift]);
ecPluginMultiCaretClearAll: SetSingle(VK_ESCAPE,[ssShift, ssCtrl], VK_ESCAPE,[]);
ecPluginMultiCaretModeCancelOnMove: SetCombo(VK_Q,[ssShift, ssCtrl], VK_X,[ssShift, ssCtrl]);
ecPluginMultiCaretModeMoveAll: SetCombo(VK_Q,[ssShift, ssCtrl], VK_M,[ssShift, ssCtrl]);
@ -2720,13 +2720,14 @@ begin
AddDefault(C, 'Column Select to absolute end', srkmecColSelEditorBottom, ecColSelEditorBottom);
// multi caret
C:=Categories[AddCategory('MultiCaret', srkmCatMultiCaret, nil)];
C:=Categories[AddCategory('MultiCaret', srkmCatMultiCaret, IDECmdScopeSrcEditOnly)];
AddDefault(C, 'Add extra caret', srkmecPluginMultiCaretSetCaret, ecPluginMultiCaretSetCaret);
AddDefault(C, 'Remove extra caret', srkmecPluginMultiCaretUnsetCaret, ecPluginMultiCaretUnsetCaret);
AddDefault(C, 'Toggle extra caret', srkmecPluginMultiCaretToggleCaret, ecPluginMultiCaretToggleCaret);
AddDefault(C, 'Clear all extra carets', srkmecPluginMultiCaretClearAll, ecPluginMultiCaretClearAll);
AddDefault(C, 'Cursor keys clear all extra carets', srkmecPluginMultiCaretModeCancelOnMove, ecPluginMultiCaretModeCancelOnMove);
AddDefault(C, 'Cursor keys move all extra carets', srkmecPluginMultiCaretModeMoveAll, ecPluginMultiCaretModeMoveAll);
C:=Categories[AddCategory('MultiCaret', srkmCatMultiCaret, IDECmdScopeSrcEditOnlyMultiCaret)];
AddDefault(C, 'Clear all extra carets', srkmecPluginMultiCaretClearAll, ecPluginMultiCaretClearAll);
// editing - without menu items in the IDE bar
C:=Categories[AddCategory(CommandCategoryTextEditingName,srkmCatEditing,

View File

@ -2238,6 +2238,8 @@ begin
IDECmdScopeSrcEdit.AddWindowClass(nil);
IDECmdScopeSrcEditOnly.AddWindowClass(TSourceEditorWindowInterface);
IDECmdScopeSrcEditOnlyMultiCaret.AddWindowClass(TLazSynPluginTemplateMultiCaret);
IDECmdScopeSrcEditOnlyTmplEdit.AddWindowClass(TLazSynPluginTemplateEditForm);
IDECmdScopeSrcEditOnlyTmplEditOff.AddWindowClass(TLazSynPluginTemplateEditFormOff);