tools, added option to pipe current editor content to tool input stream

This commit is contained in:
Basile Burg 2015-11-22 23:16:59 +01:00
parent 0062b58a74
commit dfd6470537
1 changed files with 43 additions and 2 deletions

View File

@ -6,7 +6,8 @@ interface
uses uses
Classes, SysUtils, FileUtil, process, menus, ce_processes, Classes, SysUtils, FileUtil, process, menus, ce_processes,
ce_common, ce_writableComponent, ce_interfaces, ce_observer, ce_inspectors; ce_common, ce_writableComponent, ce_interfaces, ce_observer, ce_inspectors,
ce_synmemo;
type type
@ -21,6 +22,7 @@ type
fToolAlias: string; fToolAlias: string;
fQueryParams: boolean; fQueryParams: boolean;
fClearMessages: boolean; fClearMessages: boolean;
fEditorToInput: boolean;
fChainBefore: TStringList; fChainBefore: TStringList;
fChainAfter: TStringList; fChainAfter: TStringList;
fShortcut: TShortcut; fShortcut: TShortcut;
@ -39,6 +41,7 @@ type
property showWindows: TShowWindowOptions read fShowWin write fShowWin; property showWindows: TShowWindowOptions read fShowWin write fShowWin;
property queryParameters: boolean read fQueryParams write fQueryParams; property queryParameters: boolean read fQueryParams write fQueryParams;
property clearMessages: boolean read fClearMessages write fClearMessages; property clearMessages: boolean read fClearMessages write fClearMessages;
property editorToInput: boolean read fEditorToInput write fEditorToInput;
property chainBefore: TStringList read fChainBefore write setchainBefore; property chainBefore: TStringList read fChainBefore write setchainBefore;
property chainAfter: TStringList read fChainAfter write setChainAfter; property chainAfter: TStringList read fChainAfter write setChainAfter;
property shortcut: TShortcut read fShortcut write fShortcut; property shortcut: TShortcut read fShortcut write fShortcut;
@ -48,10 +51,11 @@ type
procedure assign(Source: TPersistent); override; procedure assign(Source: TPersistent); override;
end; end;
TCETools = class(TWritableLfmTextComponent, ICEMainMenuProvider, ICEEditableShortcut) TCETools = class(TWritableLfmTextComponent, ICEMainMenuProvider, ICEEditableShortcut, ICEMultiDocObserver)
private private
fTools: TCollection; fTools: TCollection;
fShctCount: Integer; fShctCount: Integer;
fDoc: TCESynMemo;
function getTool(index: Integer): TCEToolItem; function getTool(index: Integer): TCEToolItem;
procedure setTools(const aValue: TCollection); procedure setTools(const aValue: TCollection);
// //
@ -59,6 +63,11 @@ type
procedure menuUpdate(item: TMenuItem); procedure menuUpdate(item: TMenuItem);
procedure executeToolFromMenu(sender: TObject); procedure executeToolFromMenu(sender: TObject);
// //
procedure docNew(aDoc: TCESynMemo);
procedure docFocused(aDoc: TCESynMemo);
procedure docChanged(aDoc: TCESynMemo);
procedure docClosing(aDoc: TCESynMemo);
//
function scedWantFirst: boolean; function scedWantFirst: boolean;
function scedWantNext(out category, identifier: string; out aShortcut: TShortcut): boolean; function scedWantNext(out category, identifier: string; out aShortcut: TShortcut): boolean;
procedure scedSendItem(const category, identifier: string; aShortcut: TShortcut); procedure scedSendItem(const category, identifier: string; aShortcut: TShortcut);
@ -305,6 +314,29 @@ begin
end; end;
{$ENDREGION} {$ENDREGION}
{$REGION ICEMultidocObserver ---------------------------------------------------}
procedure TCETools.docNew(aDoc: TCESynMemo);
begin
fDoc := aDoc;
end;
procedure TCETools.docFocused(aDoc: TCESynMemo);
begin
fDoc := aDoc;
end;
procedure TCETools.docChanged(aDoc: TCESynMemo);
begin
end;
procedure TCETools.docClosing(aDoc: TCESynMemo);
begin
if fDoc <> aDoc then exit;
fDoc := nil;
end;
{$ENDREGION}
{$REGION Tools things ----------------------------------------------------------} {$REGION Tools things ----------------------------------------------------------}
procedure TCETools.setTools(const aValue: TCollection); procedure TCETools.setTools(const aValue: TCollection);
begin begin
@ -324,6 +356,7 @@ end;
procedure TCETools.executeTool(aTool: TCEToolItem); procedure TCETools.executeTool(aTool: TCEToolItem);
var var
nme: string; nme: string;
txt: string;
chained: TCollectionItem; chained: TCollectionItem;
begin begin
if aTool = nil then exit; if aTool = nil then exit;
@ -336,7 +369,15 @@ begin
if TCEToolItem(chained).toolAlias <> aTool.toolAlias then if TCEToolItem(chained).toolAlias <> aTool.toolAlias then
TCEToolItem(chained).execute; TCEToolItem(chained).execute;
if exeInSysPath(aTool.executable) then if exeInSysPath(aTool.executable) then
begin
aTool.execute; aTool.execute;
if aTool.editorToInput and assigned(fDoc) and (poUsePipes in aTool.options) then
begin
txt := fDoc.Text;
aTool.fProcess.Input.Write(txt[1], length(txt));
aTool.fProcess.CloseInput;
end;
end;
for nme in aTool.chainAfter do for nme in aTool.chainAfter do
for chained in fTools do for chained in fTools do
if TCEToolItem(chained).toolAlias = nme then if TCEToolItem(chained).toolAlias = nme then