From d6b6f6739ee437bcb0ce79612af97e43529bba6d Mon Sep 17 00:00:00 2001 From: mattias Date: Fri, 20 Nov 2015 14:38:43 +0000 Subject: [PATCH] IDEint: DoRunFile: added parameter Filename to compile an arbitrary file git-svn-id: trunk@50444 - --- components/ideintf/lazideintf.pas | 3 +- ide/main.pp | 60 +++++++++++++++++++++---------- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/components/ideintf/lazideintf.pas b/components/ideintf/lazideintf.pas index 62caa2a4f2..2f96c93c4a 100644 --- a/components/ideintf/lazideintf.pas +++ b/components/ideintf/lazideintf.pas @@ -337,7 +337,8 @@ type function DoBuildFile({%H-}ShowAbort: Boolean; Filename: string = '' // if empty use active source editor file ): TModalResult; virtual; abstract; - function DoRunFile: TModalResult; virtual; abstract; + function DoRunFile(Filename: string = '' // if empty use active source editor file + ): TModalResult; virtual; abstract; // project property ActiveProject: TLazProject read GetActiveProject; diff --git a/ide/main.pp b/ide/main.pp index a3015f3eaf..07465b46d3 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -818,7 +818,7 @@ type function DoBuildLazarus(Flags: TBuildLazarusFlags): TModalResult; override; function DoBuildAdvancedLazarus(ProfileNames: TStringList): TModalResult; function DoBuildFile({%H-}ShowAbort: Boolean; Filename: string = ''): TModalResult; override; - function DoRunFile: TModalResult; override; + function DoRunFile(Filename: string = ''): TModalResult; override; function DoConfigureBuildFile: TModalResult; override; function GetIDEDirectives(aFilename: string; DirectiveList: TStrings): TModalResult; @@ -7284,15 +7284,23 @@ begin if ToolStatus<>itNone then exit; ActiveSrcEdit:=nil; ActiveUnitInfo:=nil; - if Filename='' then begin - if not BeginCodeTool(ActiveSrcEdit,ActiveUnitInfo,[]) then exit; - Filename:=ActiveUnitInfo.Filename; - end else begin - Filename:=TrimAndExpandFilename(Filename); - if Filename='' then exit; - end; Result:=DoSaveProject([]); if Result<>mrOk then exit; + if Filename='' then begin + if not BeginCodeTool(ActiveSrcEdit,ActiveUnitInfo,[]) then exit; + if not FilenameIsAbsolute(ActiveUnitInfo.Filename) then begin + Result:=DoSaveEditorFile(ActiveSrcEdit,[sfCheckAmbiguousFiles]); + if Result<>mrOk then exit; + end; + Filename:=ActiveUnitInfo.Filename; + end else begin + Filename:=TrimFilename(Filename); + if not FilenameIsAbsolute(Filename) then begin + IDEMessageDialog('Error','Unable to run file "'+Filename+'". Please save it first.', + mtError,[mbOk]); + exit; + end; + end; if ExternalTools.RunningCount=0 then IDEMessagesWindow.Clear; DirectiveList:=TStringList.Create; @@ -7361,7 +7369,7 @@ begin end; end; -function TMainIDE.DoRunFile: TModalResult; +function TMainIDE.DoRunFile(Filename: string): TModalResult; var ActiveSrcEdit: TSourceEditor; ActiveUnitInfo: TUnitInfo; @@ -7377,22 +7385,36 @@ var Params: string; ExtTool: TIDEExternalToolOptions; DirectiveList: TStringList; + Code: TCodeBuffer; begin Result:=mrCancel; if ToolStatus<>itNone then exit; ActiveSrcEdit:=nil; - if not BeginCodeTool(ActiveSrcEdit,ActiveUnitInfo,[]) then exit; - if not FilenameIsAbsolute(ActiveUnitInfo.Filename) then begin - Result:=DoSaveEditorFile(ActiveSrcEdit,[sfCheckAmbiguousFiles]); - if Result<>mrOk then exit; + ActiveUnitInfo:=nil; + if Filename='' then begin + if not BeginCodeTool(ActiveSrcEdit,ActiveUnitInfo,[]) then exit; + if not FilenameIsAbsolute(ActiveUnitInfo.Filename) then begin + Result:=DoSaveEditorFile(ActiveSrcEdit,[sfCheckAmbiguousFiles]); + if Result<>mrOk then exit; + end; + Filename:=ActiveUnitInfo.Filename; + end else begin + Filename:=TrimFilename(Filename); + if not FilenameIsAbsolute(Filename) then begin + IDEMessageDialog('Error','Unable to run file "'+Filename+'". Please save it first.', + mtError,[mbOk]); + exit; + end; end; DirectiveList:=TStringList.Create; try - Result:=GetIDEDirectives(ActiveUnitInfo.Filename,DirectiveList); + Result:=GetIDEDirectives(Filename,DirectiveList); if Result<>mrOk then exit; - if ActiveUnitInfo.Source.LineCount>0 then - FirstLine:=ActiveUnitInfo.Source.GetLine(0,false) + Code:=CodeToolBoss.LoadFile(Filename,true,false); + if Code=nil then exit; + if Code.LineCount>0 then + FirstLine:=Code.GetLine(0,false) else FirstLine:=''; HasShebang:=copy(FirstLine,1,2)='#!'; @@ -7409,7 +7431,7 @@ begin RunWorkingDir:=GetIDEStringDirective(DirectiveList, IDEDirectiveNames[idedRunWorkingDir],''); if RunWorkingDir='' then - RunWorkingDir:=ExtractFilePath(ActiveUnitInfo.Filename); + RunWorkingDir:=ExtractFilePath(Filename); if not GlobalMacroList.SubstituteStr(RunWorkingDir) then begin Result:=mrCancel; exit; @@ -7419,8 +7441,8 @@ begin else DefRunCommand:=IDEDirDefaultRunCommand; RunCommand:=GetIDEStringDirective(DirectiveList, - IDEDirectiveNames[idedRunCommand], - DefRunCommand); + IDEDirectiveNames[idedRunCommand], + DefRunCommand); if (not GlobalMacroList.SubstituteStr(RunCommand)) then exit(mrCancel); if (RunCommand='') then