diff --git a/src/ce_editoroptions.pas b/src/ce_editoroptions.pas index 53f1584c..05913024 100644 --- a/src/ce_editoroptions.pas +++ b/src/ce_editoroptions.pas @@ -6,7 +6,7 @@ interface uses Classes, SysUtils, Graphics, SynEdit, SynEditMouseCmds, SynEditMiscClasses, - SynEditKeyCmds, Menus, + SynEditKeyCmds, Menus, LCLProc, ce_interfaces, ce_observer, ce_common, ce_writableComponent, ce_synmemo, ce_d2syn, ce_txtsyn; @@ -127,6 +127,7 @@ constructor TCEEditorOptionsBase.Create(AOwner: TComponent); var i: integer; shc: TCEPersistentShortcut; + ed: TSynEdit; begin inherited; // @@ -175,18 +176,18 @@ begin [emAltSetsColumnMode, emDragDropEditing, emCtrlWheelZoom, emShowCtrlMouseLinks]; // fShortCuts := TCollection.Create(TCEPersistentShortcut); - with TSynEdit.Create(nil) do + ed := TSynEdit.Create(nil); try - // note cant use a TCESynMemo because it'd be added to the EntitiesConnector - SetDefaultKeystrokes; - for i:= 0 to Keystrokes.Count-1 do + // note: cant use a TCESynMemo because it'd be added to the EntitiesConnector + SetDefaultCoeditKeystrokes(ed); + for i:= 0 to ed.Keystrokes.Count-1 do begin shc := TCEPersistentShortcut(fShortCuts.Add); - shc.actionName:= EditorCommandToCodeString(Keystrokes.Items[i].Command); - shc.shortcut := Keystrokes.Items[i].ShortCut; + shc.actionName:= EditorCommandToCodeString(ed.Keystrokes.Items[i].Command); + shc.shortcut := ed.Keystrokes.Items[i].ShortCut; end; finally - free; + ed.free; end; end; @@ -448,10 +449,12 @@ begin if shc.actionName = EditorCommandToCodeString(kst.Command) then begin try + // if anEditor.Keystrokes.FindShortcut(); + // try to find, if not match cur action, set to 0 kst.ShortCut := shc.shortcut; except - //TODO-cfeaure: manage shortcuts conflicts - //either here or a the shortcut editor level + // TODO-cfeaure: manage shortcuts conflicts + // either here or in the shortcut editor. // by default and if a conflict exists synedit will raise an exception here. end; break; diff --git a/src/ce_synmemo.pas b/src/ce_synmemo.pas index 945d8332..2bb1f27d 100644 --- a/src/ce_synmemo.pas +++ b/src/ce_synmemo.pas @@ -144,6 +144,8 @@ type property MouseStart: Integer read getMouseFileBytePos; end; + procedure SetDefaultCoeditKeystrokes(ed: TSynEdit); + var D2Syn: TSynD2Syn; LfmSyn: TSynLfmSyn; @@ -338,7 +340,7 @@ begin inherited; // fDefaultFontSize := 10; - SetDefaultKeystrokes; // not called in inherited if owner = nil ! + SetDefaultCoeditKeystrokes(Self); // not called in inherited if owner = nil ! // ShowHint :=false; InitHintWins; @@ -401,6 +403,112 @@ begin inherited; end; +procedure SetDefaultCoeditKeystrokes(ed: TSynEdit); +begin + with ed do begin + Keystrokes.Clear; + // + AddKey(ecUp, VK_UP, [], 0, []); + AddKey(ecSelUp, VK_UP, [ssShift], 0, []); + AddKey(ecScrollUp, VK_UP, [ssCtrl], 0, []); + AddKey(ecDown, VK_DOWN, [], 0, []); + AddKey(ecSelDown, VK_DOWN, [ssShift], 0, []); + AddKey(ecScrollDown, VK_DOWN, [ssCtrl], 0, []); + AddKey(ecLeft, VK_LEFT, [], 0, []); + AddKey(ecSelLeft, VK_LEFT, [ssShift], 0, []); + AddKey(ecWordLeft, VK_LEFT, [ssCtrl], 0, []); + AddKey(ecSelWordLeft, VK_LEFT, [ssShift,ssCtrl], 0, []); + AddKey(ecRight, VK_RIGHT, [], 0, []); + AddKey(ecSelRight, VK_RIGHT, [ssShift], 0, []); + AddKey(ecWordRight, VK_RIGHT, [ssCtrl], 0, []); + AddKey(ecSelWordRight, VK_RIGHT, [ssShift,ssCtrl], 0, []); + AddKey(ecPageDown, VK_NEXT, [], 0, []); + AddKey(ecSelPageDown, VK_NEXT, [ssShift], 0, []); + AddKey(ecPageBottom, VK_NEXT, [ssCtrl], 0, []); + AddKey(ecSelPageBottom, VK_NEXT, [ssShift,ssCtrl], 0, []); + AddKey(ecPageUp, VK_PRIOR, [], 0, []); + AddKey(ecSelPageUp, VK_PRIOR, [ssShift], 0, []); + AddKey(ecPageTop, VK_PRIOR, [ssCtrl], 0, []); + AddKey(ecSelPageTop, VK_PRIOR, [ssShift,ssCtrl], 0, []); + AddKey(ecLineStart, VK_HOME, [], 0, []); + AddKey(ecSelLineStart, VK_HOME, [ssShift], 0, []); + AddKey(ecEditorTop, VK_HOME, [ssCtrl], 0, []); + AddKey(ecSelEditorTop, VK_HOME, [ssShift,ssCtrl], 0, []); + AddKey(ecLineEnd, VK_END, [], 0, []); + AddKey(ecSelLineEnd, VK_END, [ssShift], 0, []); + AddKey(ecEditorBottom, VK_END, [ssCtrl], 0, []); + AddKey(ecSelEditorBottom, VK_END, [ssShift,ssCtrl], 0, []); + AddKey(ecToggleMode, VK_INSERT, [], 0, []); + AddKey(ecDeleteChar, VK_DELETE, [], 0, []); + AddKey(ecDeleteLastChar, VK_BACK, [], 0, []); + AddKey(ecDeleteLastWord, VK_BACK, [ssCtrl], 0, []); + AddKey(ecLineBreak, VK_RETURN, [], 0, []); + AddKey(ecSelectAll, ord('A'), [ssCtrl], 0, []); + AddKey(ecCopy, ord('C'), [ssCtrl], 0, []); + AddKey(ecBlockIndent, ord('I'), [ssCtrl,ssShift], 0, []); + AddKey(ecInsertLine, ord('N'), [ssCtrl], 0, []); + AddKey(ecDeleteWord, ord('T'), [ssCtrl], 0, []); + AddKey(ecBlockUnindent, ord('U'), [ssCtrl,ssShift], 0, []); + AddKey(ecPaste, ord('V'), [ssCtrl], 0, []); + AddKey(ecCut, ord('X'), [ssCtrl], 0, []); + AddKey(ecDeleteLine, ord('Y'), [ssCtrl], 0, []); + AddKey(ecDeleteEOL, ord('Y'), [ssCtrl,ssShift], 0, []); + AddKey(ecUndo, ord('Z'), [ssCtrl], 0, []); + AddKey(ecRedo, ord('Z'), [ssCtrl,ssShift], 0, []); + AddKey(ecGotoMarker0, ord('0'), [ssCtrl], 0, []); + AddKey(ecGotoMarker1, ord('1'), [ssCtrl], 0, []); + AddKey(ecGotoMarker2, ord('2'), [ssCtrl], 0, []); + AddKey(ecGotoMarker3, ord('3'), [ssCtrl], 0, []); + AddKey(ecGotoMarker4, ord('4'), [ssCtrl], 0, []); + AddKey(ecGotoMarker5, ord('5'), [ssCtrl], 0, []); + AddKey(ecGotoMarker6, ord('6'), [ssCtrl], 0, []); + AddKey(ecGotoMarker7, ord('7'), [ssCtrl], 0, []); + AddKey(ecGotoMarker8, ord('8'), [ssCtrl], 0, []); + AddKey(ecGotoMarker9, ord('9'), [ssCtrl], 0, []); + AddKey(ecSetMarker0, ord('0'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker1, ord('1'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker2, ord('2'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker3, ord('3'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker4, ord('4'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker5, ord('5'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker6, ord('6'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker7, ord('7'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker8, ord('8'), [ssCtrl,ssShift], 0, []); + AddKey(ecSetMarker9, ord('9'), [ssCtrl,ssShift], 0, []); + AddKey(ecFoldLevel1, ord('1'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel2, ord('2'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel3, ord('3'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel4, ord('4'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel5, ord('5'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel6, ord('6'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel7, ord('7'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel8, ord('8'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel9, ord('9'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldLevel0, ord('0'), [ssAlt,ssShift], 0, []); + AddKey(ecFoldCurrent, ord('-'), [ssAlt,ssShift], 0, []); + AddKey(ecUnFoldCurrent, ord('+'), [ssAlt,ssShift], 0, []); + AddKey(EcToggleMarkupWord, ord('M'), [ssAlt], 0, []); + AddKey(ecNormalSelect, ord('N'), [ssCtrl,ssShift], 0, []); + AddKey(ecColumnSelect, ord('C'), [ssCtrl,ssShift], 0, []); + AddKey(ecLineSelect, ord('L'), [ssCtrl,ssShift], 0, []); + AddKey(ecTab, VK_TAB, [], 0, []); + AddKey(ecShiftTab, VK_TAB, [ssShift], 0, []); + AddKey(ecMatchBracket, ord('B'), [ssCtrl,ssShift], 0, []); + AddKey(ecColSelUp, VK_UP, [ssAlt, ssShift], 0, []); + AddKey(ecColSelDown, VK_DOWN, [ssAlt, ssShift], 0, []); + AddKey(ecColSelLeft, VK_LEFT, [ssAlt, ssShift], 0, []); + AddKey(ecColSelRight, VK_RIGHT, [ssAlt, ssShift], 0, []); + AddKey(ecColSelPageDown, VK_NEXT, [ssAlt, ssShift], 0, []); + AddKey(ecColSelPageBottom, VK_NEXT, [ssAlt, ssShift,ssCtrl], 0, []); + AddKey(ecColSelPageUp, VK_PRIOR, [ssAlt, ssShift], 0, []); + AddKey(ecColSelPageTop, VK_PRIOR, [ssAlt, ssShift,ssCtrl], 0, []); + AddKey(ecColSelLineStart, VK_HOME, [ssAlt, ssShift], 0, []); + AddKey(ecColSelLineEnd, VK_END, [ssAlt, ssShift], 0, []); + AddKey(ecColSelEditorTop, VK_HOME, [ssAlt, ssShift,ssCtrl], 0, []); + AddKey(ecColSelEditorBottom, VK_END, [ssAlt, ssShift,ssCtrl], 0, []); + end; +end; + procedure TCESynMemo.setDefaultFontSize(aValue: Integer); var old: Integer;