1(*
2This Source Code Form is subject to the terms of the Mozilla Public
3License, v. 2.0. If a copy of the MPL was not distributed with this
4file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
6Copyright (c) Alexey Torgashin
7*)
8{$ifdef nn}begin end;{$endif}
9
10procedure TfmMain.TimerCmdTimer(Sender: TObject);
11var
12  Cmd: integer;
13  CmdInvoke: TATEditorCommandInvoke;
14  Frame: TEditorFrame;
15  Ed: TATSynEdit;
16  EdGrp: TATGroups;
17  NIndex: integer;
18  NColor: TColor;
19  Params: TAppVariantArray;
20begin
21 TimerCmd.Enabled:= false;
22
23 repeat
24  case AppCommandGet(Ed, Cmd, CmdInvoke) of
25    acgNoCommands:
26      Break;
27    acgBadCommand:
28      Continue;
29  end;
30
31  Frame:= TGroupsHelper.GetEditorFrame(Ed);
32
33  //support floating groups
34  if Assigned(Frame) then
35    EdGrp:= Frame.GetTabGroups
36  else
37    EdGrp:= Groups;
38
39  case Cmd of
40
41    cmd_FileClose:
42      begin
43        EdGrp.CloseTabs(tabCloseCurrent, false);
44        Frame:= CurrentFrame;
45        if Assigned(Frame) then
46          Frame.SetFocus;
47      end;
48
49    cmd_FileCloseAll:
50      begin
51        //EdGrp.CloseTabs(tabCloseAll, false);
52        DoCloseAllTabs;
53        Frame:= CurrentFrame;
54        if Assigned(Frame) then
55          Frame.SetFocus;
56      end;
57
58    cmd_FileCloseOtherThis:
59      begin
60        EdGrp.CloseTabs(tabCloseOthersThisPage, false);
61      end;
62
63    cmd_FileCloseOtherAll:
64      begin
65        EdGrp.CloseTabs(tabCloseOthersAllPages, false);
66      end;
67
68    cmd_FileCloseAndDelete:
69      begin
70        DoFileCloseAndDelete(Ed);
71      end;
72
73    cmd_FileNew:
74      DoFileNew;
75
76    cmd_FileNewMenu:
77      DoFileNewMenu(nil, CmdInvoke);
78
79    cmd_FileOpen:
80      DoFileOpenDialog;
81
82    cmd_FileOpen_TextViewer:
83      DoFileOpenDialog('/view-text /nozip /nopictures');
84
85    cmd_FileOpen_HexViewer:
86      DoFileOpenDialog('/view-hex /nozip /nopictures');
87
88    cmd_FileOpen_UnicodeViewer:
89      DoFileOpenDialog('/view-unicode /nozip /nopictures');
90
91    cmd_FileOpenFolder:
92      DoFolderAdd(CmdInvoke);
93
94    cmd_FileOpen_NoPlugins:
95      DoFileOpenDialog_NoPlugins;
96
97    cmd_FileReopen:
98      DoFileReopen(Ed);
99
100    cmd_FileSave:
101      DoFileSave(Ed);
102
103    cmd_FileSaveAs:
104      DoFileSaveAs(Ed);
105
106    cmd_FileSaveAll:
107      DoFileSaveAll;
108
109    cmd_FileExit:
110      Close;
111
112    cmd_FileExportHtml:
113      begin
114        if Assigned(Frame) then
115          DoFileExportHtml(Frame);
116      end;
117
118    cmd_OpenContainingFolder:
119      begin
120        if Ed.FileName<>'' then
121          AppBrowseToFilenameInShell(Ed.FileName);
122      end;
123
124    cmd_OpenFileInDefaultApp:
125      begin
126        if Ed.FileName<>'' then
127          OpenURL(Ed.FileName);
128      end;
129
130    cmd_ToggleFocusSplitEditors:
131      begin
132        if Assigned(Frame) then
133          Frame.DoToggleFocusSplitEditors;
134      end;
135
136    cmd_FocusEditor:
137      DoFocusEditor(CurrentEditor);
138
139    cmd_FocusNotificationPanel:
140      begin
141        if Assigned(Frame) then
142          Frame.DoFocusNotificationPanel;
143      end;
144
145    cmd_HideNotificationPanels:
146      begin
147        if Assigned(Frame) then
148          Frame.DoHideNotificationPanels;
149      end;
150
151    cmd_ToggleFileNotifications:
152      begin
153        UiOps.NotificationEnabled:= not UiOps.NotificationEnabled;
154        if UiOps.NotificationEnabled then
155          if AppNotifThread=nil then
156          begin
157            AppNotifThread:= TAppNotifThread.Create(false);
158            AppNotifThread.Priority:= tpLower;
159          end;
160      end;
161
162    cmd_SwitchTab_HotkeyNext:
163      DoSwitchTab(true);
164    cmd_SwitchTab_HotkeyPrev:
165      DoSwitchTab(false);
166    cmd_SwitchTab_SimpleNext:
167      DoSwitchTabSimply(true);
168    cmd_SwitchTab_SimplePrev:
169      DoSwitchTabSimply(false);
170    cmd_SwitchTab_Dialog:
171      DoDialogMenuTabSwitcher;
172    cmd_SwitchTab_Recent:
173      DoSwitchTabToRecent;
174
175    cmd_DialogCommands:
176      DoDialogCommands;
177
178    cmd_DialogGoto:
179      DoDialogGoto;
180
181    cmd_DialogGotoBookmark:
182      DoDialogGotoBookmark;
183
184    cmd_DialogFind:
185      DoDialogFind(false);
186
187    cmd_DialogFind_Hide:
188      DoDialogFind_Hide;
189
190    cmd_DialogReplace:
191      DoDialogFind(true);
192
193    cmd_DialogSaveTabs:
194      DoDialogSaveTabs;
195
196    cmd_DialogLexerProp:
197      begin
198        if Assigned(Frame) then
199          DoDialogLexerProp(Frame.Lexer[Ed]);
200      end;
201
202    cmd_DialogLexerLib:
203      DoDialogLexerLib;
204
205    cmd_DialogLexerStyleMap:
206      DoDialogLexerMap;
207
208    cmd_DialogThemeUi:
209      DoDialogTheme(true);
210
211    cmd_DialogThemeSyntax:
212      DoDialogTheme(false);
213
214    cmd_DialogLexerMenu:
215      DoDialogLexerMenu;
216
217    cmd_DialogCharMap:
218      DoDialogCharMap;
219
220    cmd_ShowMainMenuAsPopup:
221      DoSidebar_MainMenuClick(nil);
222
223    cmd_ToggleFullScreen:
224      begin
225        DoToggleFullScreen;
226        FNeedUpdateMenuChecks:= true;
227      end;
228    cmd_ToggleDistractionFree:
229      begin
230        DoToggleDistractionFree;
231        FNeedUpdateMenuChecks:= true;
232      end;
233
234    cmd_ToggleSidePanel:
235      begin
236        DoToggleSidePanel;
237        FNeedUpdateMenuChecks:= true;
238      end;
239    cmd_ToggleBottomPanel:
240      begin
241        DoToggleBottomPanel;
242        FNeedUpdateMenuChecks:= true;
243      end;
244
245    cmd_ToggleFindDialog:
246      DoToggleFindReplaceDialog(false);
247    cmd_ToggleReplaceDialog:
248      DoToggleFindReplaceDialog(true);
249
250    cmd_ToggleSidebar:
251      begin
252        DoToggleSidebar;
253        FNeedUpdateMenuChecks:= true;
254      end;
255
256    cmd_ToggleToolbar:
257      begin
258        DoToggleToolbar;
259        FNeedUpdateMenuChecks:= true;
260      end;
261
262    cmd_ToggleStatusbar:
263      begin
264        DoToggleStatusbar;
265        FNeedUpdateMenuChecks:= true;
266      end;
267
268    cmd_ToggleUiTabs:
269      DoToggleUiTabs;
270
271    cmd_ToggleOnTop:
272      begin
273        DoToggleOnTop;
274        FNeedUpdateMenuChecks:= true;
275      end;
276
277    cmd_ToggleFloatSide:
278    begin
279      DoToggleFloatSide;
280      FNeedUpdateMenuChecks:= true;
281    end;
282
283    cmd_ToggleFloatBottom:
284    begin
285      DoToggleFloatBottom;
286      FNeedUpdateMenuChecks:= true;
287    end;
288
289    cmd_OpsReloadAndApply:
290      DoOps_LoadOptionsAndApplyAll;
291
292    cmd_ShowPanelConsole:
293      begin
294        DoShowConsole(false);
295        FNeedUpdateMenuChecks:= true;
296      end;
297    cmd_ShowPanelOutput:
298      begin
299        DoShowOutput(false);
300        FNeedUpdateMenuChecks:= true;
301      end;
302    cmd_ShowPanelValidate:
303      begin
304        DoShowValidate(false);
305        FNeedUpdateMenuChecks:= true;
306      end;
307
308    cmd_ShowPanelConsole_AndFocus:
309      begin
310        DoShowConsole(true);
311        FNeedUpdateMenuChecks:= true;
312      end;
313    cmd_ShowPanelOutput_AndFocus:
314      begin
315        DoShowOutput(true);
316        FNeedUpdateMenuChecks:= true;
317      end;
318    cmd_ShowPanelValidate_AndFocus:
319      begin
320        DoShowValidate(true);
321        FNeedUpdateMenuChecks:= true;
322      end;
323
324    cmd_ShowSidePanelAsIs:
325      begin
326        AppPanels[cPaneSide].Visible:= true;
327        FNeedUpdateMenuChecks:= true;
328      end;
329
330    cmd_ShowSidePanelAndSyntaxTree:
331      begin
332        AppPanels[cPaneSide].UpdatePanels(msgPanelTree_Init, false, true);
333        FNeedUpdateMenuChecks:= true;
334      end;
335
336    cmd_ToggleSidePanelAndSyntaxTree:
337      begin
338        if AppPanels[cPaneSide].Visible then
339          AppPanels[cPaneSide].Visible:= false
340        else
341          AppPanels[cPaneSide].UpdatePanels(msgPanelTree_Init, false, true);
342        FNeedUpdateMenuChecks:= true;
343      end;
344
345    cmd_HideSidePanel:
346      begin
347        AppPanels[cPaneSide].Visible:= false;
348        FNeedUpdateMenuChecks:= true;
349      end;
350
351    cmd_HideBottomPanel:
352      begin
353        AppPanels[cPaneOut].Visible:= false;
354        FNeedUpdateMenuChecks:= true;
355      end;
356
357    cmd_FindFirst:
358      DoFindFirst;
359    cmd_FindNext:
360      DoFindNext(true);
361    cmd_FindPrev:
362      DoFindNext(false);
363
364    cmd_FindAllAndSelect:
365      DoFindMarkAll(markingSelections);
366    cmd_FindAllAndMarkers:
367      DoFindMarkAll(markingMarkers);
368    cmd_FindAllAndBookmarks:
369      DoFindMarkAll(markingBookmarks);
370
371    cmd_FindCurWordNext:
372      DoFindCurrentWordOrSel(Ed, true, true);
373    cmd_FindCurWordPrev:
374      DoFindCurrentWordOrSel(Ed, false, true);
375
376    cmd_FindCurSelNext:
377      DoFindCurrentWordOrSel(Ed, true, false);
378    cmd_FindCurSelPrev:
379      DoFindCurrentWordOrSel(Ed, false, false);
380
381    cmd_SelectExpandToWord:
382      EditorExpandSelectionToWord(Ed, @FinderShowResultSimple, true);
383    cmd_SelectExpandToWord_Skip:
384      EditorExpandSelectionToWord(Ed, @FinderShowResultSimple, false);
385
386    cmd_OpsClearRecent:
387      DoOps_ClearConfigHistory([acheRecentFiles]);
388    cmd_OpsClearSearchHistory:
389      DoOps_ClearConfigHistory([acheSearch]);
390    cmd_OpsClearConsoleHistory:
391      DoOps_ClearConfigHistory([acheConsole]);
392
393    cmd_OpsOpenDefault:
394      DoOps_OpenFile_Default;
395    cmd_OpsOpenUser:
396      DoOps_OpenFile_User;
397    cmd_OpsOpenDefaultAndUser:
398      DoOps_OpenFile_DefaultAndUser;
399    cmd_OpsOpenLexerSpecific:
400      DoOps_OpenFile_LexerSpecific;
401
402    cmd_OpsFontText:
403      DoOps_DialogFont_Text;
404    cmd_OpsFontUi:
405      DoOps_DialogFont_Ui;
406    cmd_OpsFontOutput:
407      DoOps_DialogFont_Output;
408
409    cmd_OpsFontSizeBigger:
410      DoOps_FontSizeChange(1);
411    cmd_OpsFontSizeSmaller:
412      DoOps_FontSizeChange(-1);
413    cmd_OpsFontSizeReset:
414      DoOps_FontSizeReset;
415
416    cmd_FindPythonLib:
417      DoOps_FindPythonLib(nil);
418
419    cmd_ResetPythonPlugins:
420      DoPyResetPlugins;
421
422    cmd_RunLastCommandPlugin:
423      DoPyRunLastPlugin(CmdInvoke);
424
425    cmd_RescanPythonPluginsInfFiles:
426      DoPyRescanPlugins;
427
428    cmd_Groups1:
429      UpdateGroupsMode(gmOne);
430    cmd_Groups2horz:
431      UpdateGroupsMode(gm2h);
432    cmd_Groups2vert:
433      UpdateGroupsMode(gm2v);
434    cmd_Groups3horz:
435      UpdateGroupsMode(gm3h);
436    cmd_Groups3vert:
437      UpdateGroupsMode(gm3v);
438    cmd_Groups3plus:
439      UpdateGroupsMode(gm1plus2v);
440    cmd_Groups3plushorz:
441      UpdateGroupsMode(gm1plus2h);
442    cmd_Groups4horz:
443      UpdateGroupsMode(gm4h);
444    cmd_Groups4vert:
445      UpdateGroupsMode(gm4v);
446    cmd_Groups4grid:
447      UpdateGroupsMode(gm4grid);
448    cmd_Groups6horz:
449      UpdateGroupsMode(gm6h);
450    cmd_Groups6vert:
451      UpdateGroupsMode(gm6v);
452    cmd_Groups6grid:
453      UpdateGroupsMode(gm6grid);
454
455    cmd_GroupActivateNext:
456      Groups.PagesSetNext(true);
457    cmd_GroupActivatePrev:
458      Groups.PagesSetNext(false);
459
460    cmd_GroupActivate1:
461      Groups.PagesSetIndex(0);
462    cmd_GroupActivate2:
463      Groups.PagesSetIndex(1);
464    cmd_GroupActivate3:
465      Groups.PagesSetIndex(2);
466    cmd_GroupActivate4:
467      Groups.PagesSetIndex(3);
468    cmd_GroupActivate5:
469      Groups.PagesSetIndex(4);
470    cmd_GroupActivate6:
471      Groups.PagesSetIndex(5);
472
473    cmd_GroupActivateFloat1:
474      DoFormFocus(FFormFloatGroups1, true);
475    cmd_GroupActivateFloat2:
476      DoFormFocus(FFormFloatGroups2, true);
477    cmd_GroupActivateFloat3:
478      DoFormFocus(FFormFloatGroups3, true);
479
480    cmd_MoveTabToGroupNext:
481      Groups.MoveCurrentTabToNext(true);
482    cmd_MoveTabToGroupPrev:
483      Groups.MoveCurrentTabToNext(false);
484
485    cmd_MoveTabToGroup1:
486      DoMoveTabToGroup(0, true);
487    cmd_MoveTabToGroup2:
488      DoMoveTabToGroup(1, true);
489
490    cmd_MoveTabToGroupFloating1:
491      DoMoveTabToGroup(6, true);
492    cmd_MoveTabToGroupFloating2:
493      DoMoveTabToGroup(7, true);
494    cmd_MoveTabToGroupFloating3:
495      DoMoveTabToGroup(8, true);
496
497    cmd_CopyLine:
498      EditorCopyLine(Ed);
499
500    cmd_CopyFilenameFull:
501      begin
502        if Assigned(Frame) then
503          SClipboardCopy(Frame.GetFileName(Ed));
504      end;
505    cmd_CopyFilenameDir:
506      begin
507        if Assigned(Frame) then
508          SClipboardCopy(ExtractFileDir(Frame.GetFileName(Ed)));
509      end;
510    cmd_CopyFilenameName:
511      begin
512        if Assigned(Frame) then
513          SClipboardCopy(ExtractFileName(Frame.GetFileName(Ed)));
514      end;
515
516    cmd_DuplicateLineEx:
517      begin
518        DoPyCommand_Cudaxlib(Ed, 'duplicate', CmdInvoke);
519      end;
520
521    cmd_AutoComplete:
522      DoAutoComplete(Ed);
523
524    cmd_GotoDefinition:
525      DoGotoDefinition(Ed);
526
527    cmd_ShowFunctionHint:
528      DoShowFuncHint(Ed);
529
530    cmd_MenuEnc:
531      begin
532        InitPopupEnc;
533        MenuShowAtEditorCorner(PopupEnc, CurrentEditor);
534      end;
535    cmd_MenuEnds:
536      begin
537        InitPopupEnds;
538        MenuShowAtEditorCorner(PopupEnds, CurrentEditor);
539      end;
540    cmd_MenuLexers:
541      begin
542        InitPopupLex;
543        MenuShowAtEditorCorner(PopupLex, CurrentEditor);
544      end;
545
546    cmd_SetTabColor:
547      begin
548        if Assigned(Frame) then
549        begin
550          NColor:= PyHelper_DialogColorPicker(Frame.TabColor);
551          if NColor>=0 then
552            Frame.TabColor:= NColor;
553        end;
554      end;
555    cmd_ResetTabColor:
556      begin
557        if Assigned(Frame) then
558          Frame.TabColor:= clNone;
559      end;
560
561    cmd_ToggleTabPinned:
562      begin
563        if Assigned(Frame) then
564          Frame.TabPinned:= not Frame.TabPinned;
565      end;
566
567    cmd_ChooseTranslation:
568      DoDialogMenuTranslations;
569    cmd_ChooseThemeUI:
570      DoDialogMenuThemes;
571
572    cmd_MacroStart:
573      begin
574        if Assigned(Frame) then
575        begin
576          Frame.DoMacroStartOrStop;
577          MsgStatus('');
578        end;
579      end;
580
581    cmd_MacroStop: //deprecated at 2021.10
582      begin
583        if Assigned(Frame) then
584        begin
585          Frame.DoMacroStop(false);
586          MsgStatus('');
587        end;
588      end;
589
590    cmd_MacroCancel: //deprecated at 2021.10
591      begin
592        if Assigned(Frame) then
593        begin
594          Frame.DoMacroStop(true);
595          MsgStatus('');
596        end;
597      end;
598
599    cmd_TreeGotoNext:
600      DoTreeviewJump(CodeTree.Tree, treeGoNext);
601    cmd_TreeGotoPrev:
602      DoTreeviewJump(CodeTree.Tree, treeGoPrev);
603    cmd_TreeGotoParent:
604      DoTreeviewJump(CodeTree.Tree, treeGoParent);
605    cmd_TreeGotoNextBrother:
606      DoTreeviewJump(CodeTree.Tree, treeGoNextBro);
607    cmd_TreeGotoPrevBrother:
608      DoTreeviewJump(CodeTree.Tree, treeGoPrevBro);
609    cmd_TreeUpdate:
610      UpdateTree(true, false{ignore visible});
611    cmd_TreeSelectBlockForCurNode:
612      DoCodetree_GotoBlockForCurrentNode(true);
613    cmd_TreeGotoBlockForCurNode:
614      DoCodetree_GotoBlockForCurrentNode(false);
615    cmd_TreeFilterClear:
616      CodeTreeFilter_ResetOnClick(nil);
617    cmd_TreeFilterFocus:
618      DoSidebar_FocusCodetreeFilter;
619    cmd_TreeFocus:
620      DoSidebar_FocusCodetree;
621
622    cmd_BracketHighlightOn:
623      begin
624        if Assigned(Frame) then
625        begin
626          Frame.BracketHilite:= true;
627          Frame.BracketHiliteUserChanged:= true;
628        end;
629      end;
630    cmd_BracketHighlightOff:
631      begin
632        if Assigned(Frame) then
633        begin
634          Frame.BracketHilite:= false;
635          Frame.BracketHiliteUserChanged:= true;
636        end;
637      end;
638    cmd_BracketHighlightToggle:
639      begin
640        if Assigned(Frame) then
641        begin
642          Frame.BracketHilite:= not Frame.BracketHilite;
643          Frame.BracketHiliteUserChanged:= true;
644        end;
645      end;
646    cmd_BracketJump:
647      begin
648        if Assigned(Frame) then
649          Frame.BracketJump(Ed);
650      end;
651    cmd_BracketSelect:
652      begin
653        if Assigned(Frame) then
654          Frame.BracketSelect(Ed);
655      end;
656    cmd_BracketSelectInside:
657      begin
658        if Assigned(Frame) then
659          Frame.BracketSelectInside(Ed);
660      end;
661
662    cmd_HelpAbout:
663      DoHelpAbout;
664    cmd_HelpForum:
665      DoHelpForum;
666    cmd_HelpWiki:
667      DoHelpWiki;
668    cmd_HelpIssues:
669      DoHelpIssues;
670
671    cmd_HelpCheckUpdates:
672      begin
673        if UiOps.AllowProgramUpdates then
674        begin
675          SetLength(Params, 0);
676          DoPyCommand('cuda_addonman', 'check_cudatext_updates', Params, CmdInvoke);
677        end;
678      end;
679
680    cmdFirstLexerCommand..
681    cmdLastLexerCommand:
682      SetFrameLexerByIndex(Ed, Cmd-cmdFirstLexerCommand);
683
684    cmdFirstPluginCommand..
685    cmdLastPluginCommand:
686      DoPyCommand_ByPluginIndex(Cmd-cmdFirstPluginCommand, CmdInvoke);
687
688    cmdFirstFileCommand..
689    cmdLastFileCommand:
690      begin
691        NIndex:= Cmd-cmdFirstFileCommand;
692        if NIndex<AppFrameList1.Count then
693        begin
694          Frame:= TEditorFrame(AppFrameList1[NIndex]);
695          SetFrame(Frame);
696          Frame.SetFocus;
697        end;
698      end;
699
700    cmdFirstRecentCommand..
701    cmdLastRecentCommand:
702      begin
703        NIndex:= Cmd-cmdFirstRecentCommand;
704        if NIndex<AppListRecents.Count then
705          DoFileOpen(AppListRecents[NIndex], '');
706      end;
707  end;
708 until false;
709
710 UpdateStatusbar;
711end;
712
713procedure TfmMain.FrameOnEditorCommand(Sender: TObject; ACommand: integer;
714  AInvoke: TATEditorCommandInvoke; const AText: string; var AHandled: boolean);
715var
716  Ed: TATSynEdit;
717  Frame: TEditorFrame;
718  Params: TAppVariantArray;
719  Str: string;
720begin
721  AHandled:= true;
722  if not Groups.Enabled then Exit;
723
724  Ed:= Sender as TATSynEdit;
725  Frame:= TGroupsHelper.GetEditorFrame(Ed);
726
727  if Assigned(Frame) and Frame.MacroRecord then
728    if not AppPython.IsRunning then
729      if IsCommandForMacros(ACommand) then
730      begin
731        Str:= IntToStr(ACommand);
732        if ACommand=cCommand_TextInsert then
733          Str:= Str+','+AText;
734        Frame.MacroStrings.Add(Str);
735      end;
736
737  if (ACommand=cCommand_TextInsert) and
738    (AText<>'') then
739  begin
740    SetLength(Params, 1);
741    Params[0]:= AppVariant(AText);
742    if DoPyEvent(Ed, cEventOnInsert, Params).Val = evrFalse then
743    begin
744      AHandled:= true;
745      exit
746    end;
747  end;
748
749  //handle commands cmd_
750  case ACommand of
751    cCommand_ToggleWordWrap,
752    cCommand_ToggleWordWrapAlt:
753      begin
754        UpdateStatusbar;
755        AHandled:= false;
756        exit
757      end;
758
759    cCommand_Cancel,
760    cCommand_CancelKeepLast,
761    cCommand_CancelKeepSel,
762    cCommand_CancelKeepLastAndSel:
763      begin
764        Ed.Markers.DeleteWithTag(UiOps.FindOccur_TagValue);
765        AHandled:= false;
766      end;
767
768    cmd_RepaintEditor:
769      begin
770        Ed.Update;
771        AHandled:= true;
772        exit
773      end;
774
775    cmd_ToggleTabUsesSpaces:
776      begin
777        Ed.OptTabSpaces:= not Ed.OptTabSpaces;
778        AHandled:= true;
779        exit
780      end;
781    cmd_ConvertTabsToSpaces:
782      begin
783        Ed.DoConvertTabsToSpaces;
784        AHandled:= true;
785        exit
786      end;
787    cmd_ConvertTabsToSpacesLeading:
788      begin
789        Ed.DoConvertIndentation(false);
790        AHandled:= true;
791        exit
792      end;
793    cmd_ConvertSpacesToTabsLeading:
794      begin
795        Ed.DoConvertIndentation(true);
796        AHandled:= true;
797        exit
798      end;
799
800    cmd_BookmarkToggle:
801      begin
802        if ed.Carets.Count>0 then
803          ed.BookmarkToggleForLine(ed.Carets[0].PosY, 1, '', bmadOption, true, 0);
804        UpdateFrameEx(Frame, false);
805        AHandled:= true;
806        exit
807      end;
808    cmd_BookmarkClearAll:
809      begin
810        ed.BookmarkDeleteAll;
811        UpdateFrameEx(Frame, false);
812        AHandled:= true;
813        exit
814      end;
815    cmd_BookmarkInvertAll:
816      begin
817        ed.BookmarkInvertAll;
818        UpdateFrameEx(Frame, false);
819        AHandled:= true;
820        exit
821      end;
822    cmd_BookmarkGotoNext:
823      begin
824        ed.BookmarkGotoNext(true, UiOps.FindIndentHorz, UiOps.FindIndentVert, true);
825        AHandled:= true;
826        exit
827      end;
828    cmd_BookmarkGotoPrev:
829      begin
830        ed.BookmarkGotoNext(false, UiOps.FindIndentHorz, UiOps.FindIndentVert, true);
831        AHandled:= true;
832        exit
833      end;
834    cmd_BookmarkPlaceCarets:
835      begin
836        Ed.BookmarkPlaceCaretsOnBookmarks;
837        AHandled:= true;
838        exit
839      end;
840    cmd_BookmarkPlaceBookmarksOnCarets:
841      begin
842        Ed.BookmarkPlaceBookmarksOnCarets;
843        AHandled:= true;
844        exit
845      end;
846    cmd_BookmarkCopyMarkedLines:
847      begin
848        Ed.BookmarkCopyMarkedLines;
849        AHandled:= true;
850        exit
851      end;
852    cmd_BookmarkDeleteMarkedLines:
853      begin
854        Ed.BookmarkDeleteMarkedLines;
855        AHandled:= true;
856        exit
857      end;
858
859    cmd_Markers_DropAtCaret:
860      begin
861        Ed.MarkerDrop;
862        UpdateStatusbar;
863        AHandled:= true;
864        exit
865      end;
866
867    cmd_Markers_GotoLastAndDelete:
868      begin
869        Ed.MarkerGotoLast(true,
870          UiOps.FindIndentHorz,
871          UiOps.FindIndentVert);
872        if Assigned(Frame) then
873         if Ed.Markers.Count=0 then
874          Frame.TabKeyCollectMarkers:= false;
875        UpdateStatusbar;
876        AHandled:= true;
877        exit
878      end;
879
880    cmd_Markers_GotoLastNoDelete:
881      begin
882        Ed.MarkerGotoLast(false,
883          UiOps.FindIndentHorz,
884          UiOps.FindIndentVert
885        );
886        UpdateStatusbar;
887        AHandled:= true;
888        exit
889      end;
890
891    cmd_Markers_ClearAll:
892      begin
893        Ed.MarkerClearAll;
894        if Assigned(Frame) then
895          Frame.TabKeyCollectMarkers:= false;
896        UpdateStatusbar;
897        AHandled:= true;
898        exit
899      end;
900
901    cmd_Markers_SwapCaretAndMarker:
902      begin
903        Ed.MarkerSwap;
904        UpdateStatusbar;
905        AHandled:= true;
906        exit
907      end;
908
909    cmd_Markers_SelectToCaret:
910      begin
911        Ed.MarkerSelectToCaret;
912        UpdateStatusbar;
913        AHandled:= true;
914        exit
915      end;
916
917    cmd_Markers_DeleteToCaret:
918      begin
919        Ed.MarkerDeleteToCaret;
920        UpdateStatusbar;
921        AHandled:= true;
922        exit
923      end;
924
925    cmd_FoldingEnable:
926      begin
927        if Assigned(Frame) then
928          Frame.EnabledFolding:= true;
929        AHandled:= true;
930        exit
931      end;
932    cmd_FoldingDisable:
933      begin
934        if Assigned(Frame) then
935          Frame.EnabledFolding:= false;
936        AHandled:= true;
937        exit
938      end;
939
940    cmd_DeleteNewColorAttrs:
941      begin
942        EditorDeleteNewColorAttribs(Ed);
943        AHandled:= true;
944        exit
945      end;
946
947    cmd_LineEndWin:
948      begin
949        UpdateFrameLineEnds(Frame, cEndWin);
950        AHandled:= true;
951        exit
952      end;
953    cmd_LineEndUnix:
954      begin
955        UpdateFrameLineEnds(Frame, cEndUnix);
956        AHandled:= true;
957        exit
958      end;
959    cmd_LineEndMac:
960      begin
961        UpdateFrameLineEnds(Frame, cEndMac);
962        AHandled:= true;
963        exit
964      end;
965
966    cmd_SplitTabToggle:
967      begin
968        if Assigned(Frame) then
969          Frame.Splitted:= not Frame.Splitted;
970        AHandled:= true;
971        exit
972      end;
973    cmd_SplitTabHorzVert:
974      begin
975        if Assigned(Frame) then
976          Frame.SplitHorz:= not Frame.SplitHorz;
977        AHandled:= true;
978        exit
979      end;
980
981    cmd_SplitTabHorz:
982      begin
983        if Assigned(Frame) then
984        begin
985          Frame.SplitHorz:= true;
986          Frame.Splitted:= true;
987        end;
988        AHandled:= true;
989        exit
990      end;
991    cmd_SplitTabVert:
992      begin
993        if Assigned(Frame) then
994        begin
995          Frame.SplitHorz:= false;
996          Frame.Splitted:= true;
997        end;
998        AHandled:= true;
999        exit
1000      end;
1001    cmd_SplitTabNo:
1002      begin
1003        if Assigned(Frame) then
1004          Frame.Splitted:= false;
1005        AHandled:= true;
1006        exit
1007      end;
1008
1009    cmd_SplitTab3070:
1010      begin
1011        if Assigned(Frame) then
1012          Frame.SplitPos:= 0.7;
1013        AHandled:= true;
1014        exit
1015      end;
1016    cmd_SplitTab4060:
1017      begin
1018        if Assigned(Frame) then
1019          Frame.SplitPos:= 0.6;
1020        AHandled:= true;
1021        exit
1022      end;
1023    cmd_SplitTab5050:
1024      begin
1025        if Assigned(Frame) then
1026          Frame.SplitPos:= 0.5;
1027        AHandled:= true;
1028        exit
1029      end;
1030    cmd_SplitTab6040:
1031      begin
1032        if Assigned(Frame) then
1033          Frame.SplitPos:= 0.4;
1034        AHandled:= true;
1035        exit
1036      end;
1037    cmd_SplitTab7030:
1038      begin
1039        if Assigned(Frame) then
1040          Frame.SplitPos:= 0.3;
1041        AHandled:= true;
1042        exit
1043      end;
1044
1045    cmd_LinkAtCaret_Open:
1046      begin
1047        Str:= EditorGetLinkAtCaret(Ed);
1048        if Str<>'' then
1049        begin
1050          EditorOpenLink(Str);
1051          MsgStatus(msgStatusOpenedBrowser);
1052        end;
1053        AHandled:= true;
1054        exit
1055      end;
1056
1057    cmd_LinkAtCaret_Copy:
1058      begin
1059        Str:= EditorGetLinkAtCaret(Ed);
1060        if Str<>'' then
1061        begin
1062          SClipboardCopy(UTF8Encode(Str));
1063          MsgStatus(msgStatusCopiedLink);
1064        end;
1065        AHandled:= true;
1066        exit
1067      end;
1068
1069    cmd_LinkAtPopup_Open:
1070      begin
1071        Str:= EditorGetLinkAtScreenCoord(Ed, PopupText.PopupPoint);
1072        if Str<>'' then
1073        begin
1074          EditorOpenLink(Str);
1075          MsgStatus(msgStatusOpenedBrowser);
1076        end;
1077        AHandled:= true;
1078        exit
1079      end;
1080
1081    cmd_LinkAtPopup_Copy:
1082      begin
1083        Str:= EditorGetLinkAtScreenCoord(Ed, PopupText.PopupPoint);
1084        if Str<>'' then
1085        begin
1086          SClipboardCopy(UTF8Encode(Str));
1087          MsgStatus(msgStatusCopiedLink);
1088        end;
1089        AHandled:= true;
1090        exit
1091      end;
1092
1093    cmd_Encoding_utf8bom_NoReload:   begin SetFrameEncoding(Ed, cEncNameUtf8_WithBom, false); AHandled:= true; exit end;
1094    cmd_Encoding_utf8nobom_NoReload: begin SetFrameEncoding(Ed, cEncNameUtf8_NoBom, false); AHandled:= true; exit end;
1095    cmd_Encoding_utf16le_NoReload:   begin SetFrameEncoding(Ed, cEncNameUtf16LE_WithBom, false); AHandled:= true; exit end;
1096    cmd_Encoding_utf16be_NoReload:   begin SetFrameEncoding(Ed, cEncNameUtf16BE_WithBom, false); AHandled:= true; exit end;
1097    cmd_Encoding_utf32le_NoReload:   begin SetFrameEncoding(Ed, cEncNameUtf32LE_WithBom, false); AHandled:= true; exit end;
1098    cmd_Encoding_utf32be_NoReload:   begin SetFrameEncoding(Ed, cEncNameUtf32BE_WithBom, false); AHandled:= true; exit end;
1099    cmd_Encoding_cp1250_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1250], false); AHandled:= true; exit end;
1100    cmd_Encoding_cp1251_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1251], false); AHandled:= true; exit end;
1101    cmd_Encoding_cp1252_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1252], false); AHandled:= true; exit end;
1102    cmd_Encoding_cp1253_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1253], false); AHandled:= true; exit end;
1103    cmd_Encoding_cp1254_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1254], false); AHandled:= true; exit end;
1104    cmd_Encoding_cp1255_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1255], false); AHandled:= true; exit end;
1105    cmd_Encoding_cp1256_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1256], false); AHandled:= true; exit end;
1106    cmd_Encoding_cp1257_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1257], false); AHandled:= true; exit end;
1107    cmd_Encoding_cp1258_NoReload:    begin SetFrameEncoding(Ed, cEncConvNames[eidCP1258], false); AHandled:= true; exit end;
1108    cmd_Encoding_mac_NoReload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCPMac], false); AHandled:= true; exit end;
1109    cmd_Encoding_iso1_NoReload:      begin SetFrameEncoding(Ed, cEncConvNames[eidISO1], false); AHandled:= true; exit end;
1110    cmd_Encoding_iso2_NoReload:      begin SetFrameEncoding(Ed, cEncConvNames[eidISO2], false); AHandled:= true; exit end;
1111    cmd_Encoding_iso15_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidISO15], false); AHandled:= true; exit end;
1112    cmd_Encoding_cp437_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP437], false); AHandled:= true; exit end;
1113    cmd_Encoding_cp850_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP850], false); AHandled:= true; exit end;
1114    cmd_Encoding_cp852_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP852], false); AHandled:= true; exit end;
1115    cmd_Encoding_cp866_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP866], false); AHandled:= true; exit end;
1116    cmd_Encoding_cp874_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP874], false); AHandled:= true; exit end;
1117    cmd_Encoding_cp932_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP932], false); AHandled:= true; exit end;
1118    cmd_Encoding_cp936_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP936], false); AHandled:= true; exit end;
1119    cmd_Encoding_cp949_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP949], false); AHandled:= true; exit end;
1120    cmd_Encoding_cp950_NoReload:     begin SetFrameEncoding(Ed, cEncConvNames[eidCP950], false); AHandled:= true; exit end;
1121
1122    cmd_Encoding_utf8bom_Reload:     begin SetFrameEncoding(Ed, cEncNameUtf8_WithBom, true); AHandled:= true; exit end;
1123    cmd_Encoding_utf8nobom_Reload:   begin SetFrameEncoding(Ed, cEncNameUtf8_NoBom, true); AHandled:= true; exit end;
1124    cmd_Encoding_utf16le_Reload:     begin SetFrameEncoding(Ed, cEncNameUtf16LE_WithBom, true); AHandled:= true; exit end;
1125    cmd_Encoding_utf16be_Reload:     begin SetFrameEncoding(Ed, cEncNameUtf16BE_WithBom, true); AHandled:= true; exit end;
1126    cmd_Encoding_utf32le_Reload:     begin SetFrameEncoding(Ed, cEncNameUtf32LE_WithBom, true); AHandled:= true; exit end;
1127    cmd_Encoding_utf32be_Reload:     begin SetFrameEncoding(Ed, cEncNameUtf32BE_WithBom, true); AHandled:= true; exit end;
1128    cmd_Encoding_cp1250_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1250], true); AHandled:= true; exit end;
1129    cmd_Encoding_cp1251_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1251], true); AHandled:= true; exit end;
1130    cmd_Encoding_cp1252_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1252], true); AHandled:= true; exit end;
1131    cmd_Encoding_cp1253_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1253], true); AHandled:= true; exit end;
1132    cmd_Encoding_cp1254_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1254], true); AHandled:= true; exit end;
1133    cmd_Encoding_cp1255_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1255], true); AHandled:= true; exit end;
1134    cmd_Encoding_cp1256_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1256], true); AHandled:= true; exit end;
1135    cmd_Encoding_cp1257_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1257], true); AHandled:= true; exit end;
1136    cmd_Encoding_cp1258_Reload:      begin SetFrameEncoding(Ed, cEncConvNames[eidCP1258], true); AHandled:= true; exit end;
1137    cmd_Encoding_mac_Reload:         begin SetFrameEncoding(Ed, cEncConvNames[eidCPMac], true); AHandled:= true; exit end;
1138    cmd_Encoding_iso1_Reload:        begin SetFrameEncoding(Ed, cEncConvNames[eidISO1], true); AHandled:= true; exit end;
1139    cmd_Encoding_iso2_Reload:        begin SetFrameEncoding(Ed, cEncConvNames[eidISO2], true); AHandled:= true; exit end;
1140    cmd_Encoding_iso15_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidISO15], true); AHandled:= true; exit end;
1141    cmd_Encoding_cp437_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP437], true); AHandled:= true; exit end;
1142    cmd_Encoding_cp850_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP850], true); AHandled:= true; exit end;
1143    cmd_Encoding_cp852_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP852], true); AHandled:= true; exit end;
1144    cmd_Encoding_cp866_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP866], true); AHandled:= true; exit end;
1145    cmd_Encoding_cp874_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP874], true); AHandled:= true; exit end;
1146    cmd_Encoding_cp932_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP932], true); AHandled:= true; exit end;
1147    cmd_Encoding_cp936_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP936], true); AHandled:= true; exit end;
1148    cmd_Encoding_cp949_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP949], true); AHandled:= true; exit end;
1149    cmd_Encoding_cp950_Reload:       begin SetFrameEncoding(Ed, cEncConvNames[eidCP950], true); AHandled:= true; exit end;
1150  end;
1151
1152  //handle other cmd_ commands
1153  if (ACommand>=cmdFirstAppCommand) and
1154     (ACommand<=cmdLastAppCommand) then
1155  begin
1156    AppCommandPut(Ed, ACommand, AInvoke, false);
1157    exit;
1158  end;
1159
1160  case ACommand of
1161    cCommand_KeyTab:
1162      begin
1163        if Assigned(Frame) then
1164          AHandled:= Frame.TabKeyCollectMarkers and (Ed.Markers.Count>0)
1165        else
1166          AHandled:= false;
1167        if AHandled then
1168        begin
1169          Ed.MarkerGotoLast(true,
1170            UiOps.FindIndentHorz,
1171            UiOps.FindIndentVert);
1172          if Ed.Markers.Count=0 then
1173            Frame.TabKeyCollectMarkers:= false;
1174        end;
1175      end;
1176
1177    cmd_MouseClickAtCursor:
1178      EditorMouseClick_AtCursor(Ed, false);
1179    cmd_MouseClickAtCursorAndSelect:
1180      EditorMouseClick_AtCursor(Ed, true);
1181    cmd_MouseClickNearCaret:
1182      EditorMouseClick_NearCaret(Ed, AText, false);
1183    cmd_MouseClickNearCaretAndSelect:
1184      EditorMouseClick_NearCaret(Ed, AText, true);
1185    cmd_FinderAction:
1186      DoFindActionFromString(AText);
1187    cmd_GotoLastEditingPos:
1188      EditorGotoLastEditingPos(Ed, UiOps.FindIndentHorz, UiOps.FindIndentVert);
1189
1190    else
1191      AHandled:= false;
1192  end;
1193end;
1194
1195
1196