IDE: run file: fixed running command in working directory, added checkbox to show run output

git-svn-id: trunk@56703 -
This commit is contained in:
mattias 2017-12-12 10:42:59 +00:00
parent c0a0ffc941
commit db74a11c8b
4 changed files with 109 additions and 77 deletions

View File

@ -1,7 +1,7 @@
object BuildFileDialog: TBuildFileDialog object BuildFileDialog: TBuildFileDialog
Left = 317 Left = 873
Height = 417 Height = 417
Top = 153 Top = 201
Width = 451 Width = 451
ActiveControl = Notebook1 ActiveControl = Notebook1
BorderIcons = [biSystemMenu] BorderIcons = [biSystemMenu]
@ -9,39 +9,41 @@ object BuildFileDialog: TBuildFileDialog
ClientHeight = 417 ClientHeight = 417
ClientWidth = 451 ClientWidth = 451
KeyPreview = True KeyPreview = True
OnCreate = BuildFileDialogCREATE OnCreate = BuildFileDialogCreate
OnKeyDown = BuildFileDialogKEYDOWN OnKeyDown = BuildFileDialogKeyDown
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '0.9.27' LCLVersion = '1.9.0.0'
object Notebook1: TPageControl object Notebook1: TPageControl
Left = 0 Left = 0
Height = 379 Height = 377
Top = 0 Top = 0
Width = 451 Width = 451
ActivePage = RunPage
Align = alClient Align = alClient
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
TabIndex = 2
TabOrder = 0 TabOrder = 0
object GeneralPage: TTabSheet object GeneralPage: TTabSheet
Caption = 'Options' Caption = 'Options'
ClientWidth = 443 ClientHeight = 350
ClientHeight = 337 ClientWidth = 447
object WhenFileIsActiveGroupbox: TGroupBox object WhenFileIsActiveGroupbox: TGroupBox
Left = 6 Left = 6
Height = 81 Height = 81
Top = 6 Top = 6
Width = 431 Width = 435
Align = alTop Align = alTop
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'When this file is active in source editor ...' Caption = 'When this file is active in source editor ...'
ClientHeight = 63 ClientHeight = 66
ClientWidth = 427 ClientWidth = 431
TabOrder = 0 TabOrder = 0
object OverrideBuildProjectCheckbox: TCheckBox object OverrideBuildProjectCheckbox: TCheckBox
Left = 6 Left = 6
Height = 22 Height = 24
Top = 6 Top = 6
Width = 415 Width = 419
Align = alTop Align = alTop
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'On build project execute the Build File command instead' Caption = 'On build project execute the Build File command instead'
@ -49,9 +51,9 @@ object BuildFileDialog: TBuildFileDialog
end end
object OverrideRunProjectCheckbox: TCheckBox object OverrideRunProjectCheckbox: TCheckBox
Left = 6 Left = 6
Height = 22 Height = 24
Top = 34 Top = 36
Width = 415 Width = 419
Align = alTop Align = alTop
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'On run project execute the Run File command instead' Caption = 'On run project execute the Run File command instead'
@ -61,8 +63,8 @@ object BuildFileDialog: TBuildFileDialog
end end
object BuildPage: TTabSheet object BuildPage: TTabSheet
Caption = 'Build' Caption = 'Build'
ClientWidth = 443 ClientHeight = 350
ClientHeight = 337 ClientWidth = 447
object BuildCommandGroupbox: TGroupBox object BuildCommandGroupbox: TGroupBox
Left = 6 Left = 6
Height = 80 Height = 80
@ -71,7 +73,7 @@ object BuildFileDialog: TBuildFileDialog
Align = alTop Align = alTop
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'Build Command' Caption = 'Build Command'
ClientHeight = 62 ClientHeight = 65
ClientWidth = 427 ClientWidth = 427
TabOrder = 0 TabOrder = 0
object BuildCommandMemo: TMemo object BuildCommandMemo: TMemo
@ -116,7 +118,7 @@ object BuildFileDialog: TBuildFileDialog
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'Working directory (Leave empty for file path)' Caption = 'Working directory (Leave empty for file path)'
ClientHeight = 42 ClientHeight = 45
ClientWidth = 427 ClientWidth = 427
TabOrder = 3 TabOrder = 3
object BuildWorkDirCombobox: TComboBox object BuildWorkDirCombobox: TComboBox
@ -128,10 +130,8 @@ object BuildFileDialog: TBuildFileDialog
Top = 6 Top = 6
Width = 384 Width = 384
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
AutoComplete = False
BorderSpacing.Around = 6 BorderSpacing.Around = 6
ItemHeight = 13 ItemHeight = 0
ItemWidth = 0
TabOrder = 0 TabOrder = 0
Text = 'BuildWorkDirCombobox' Text = 'BuildWorkDirCombobox'
end end
@ -153,34 +153,34 @@ object BuildFileDialog: TBuildFileDialog
end end
object RunPage: TTabSheet object RunPage: TTabSheet
Caption = 'Run' Caption = 'Run'
ClientWidth = 443 ClientHeight = 350
ClientHeight = 353 ClientWidth = 447
object AlwaysCompileFirstCheckbox: TCheckBox object RunBeforeBuildCheckbox: TCheckBox
Left = 6 Left = 6
Height = 17 Height = 24
Top = 6 Top = 6
Width = 431 Width = 435
Align = alTop Align = alTop
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'Always Build before Run' Caption = 'Run before build'
TabOrder = 0 TabOrder = 0
end end
object RunCommandGroupbox: TGroupBox object RunCommandGroupbox: TGroupBox
Left = 6 Left = 6
Height = 98 Height = 98
Top = 88 Top = 126
Width = 431 Width = 435
Align = alTop Align = alTop
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'Run Command' Caption = 'Run Command'
ClientHeight = 80 ClientHeight = 83
ClientWidth = 427 ClientWidth = 431
TabOrder = 1 TabOrder = 1
object RunCommandMemo: TMemo object RunCommandMemo: TMemo
Left = 6 Left = 6
Height = 68 Height = 71
Top = 6 Top = 6
Width = 415 Width = 419
Align = alClient Align = alClient
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Lines.Strings = ( Lines.Strings = (
@ -191,36 +191,34 @@ object BuildFileDialog: TBuildFileDialog
end end
object RunWorkDirGroupbox: TGroupBox object RunWorkDirGroupbox: TGroupBox
Left = 6 Left = 6
Height = 53 Height = 54
Top = 29 Top = 66
Width = 431 Width = 435
Align = alTop Align = alTop
AutoSize = True AutoSize = True
BorderSpacing.Around = 6 BorderSpacing.Around = 6
Caption = 'Working Directory (Leave empty for file path)' Caption = 'Working Directory (Leave empty for file path)'
ClientHeight = 35 ClientHeight = 39
ClientWidth = 427 ClientWidth = 431
TabOrder = 2 TabOrder = 2
object RunWorkDirCombobox: TComboBox object RunWorkDirCombobox: TComboBox
AnchorSideLeft.Control = RunWorkDirGroupbox AnchorSideLeft.Control = RunWorkDirGroupbox
AnchorSideTop.Control = RunWorkDirGroupbox AnchorSideTop.Control = RunWorkDirGroupbox
AnchorSideRight.Control = RunBrowseWorkDirButton AnchorSideRight.Control = RunBrowseWorkDirButton
Left = 6 Left = 6
Height = 21 Height = 27
Top = 6 Top = 6
Width = 384 Width = 388
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
AutoComplete = False
BorderSpacing.Around = 6 BorderSpacing.Around = 6
ItemHeight = 13 ItemHeight = 0
ItemWidth = 0
TabOrder = 0 TabOrder = 0
Text = 'RunWorkDirCombobox' Text = 'RunWorkDirCombobox'
end end
object RunBrowseWorkDirButton: TButton object RunBrowseWorkDirButton: TButton
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 396 Left = 400
Height = 23 Height = 27
Top = 6 Top = 6
Width = 25 Width = 25
HelpType = htKeyword HelpType = htKeyword
@ -231,13 +229,31 @@ object BuildFileDialog: TBuildFileDialog
TabOrder = 1 TabOrder = 1
end end
end end
object RunShowOutputCheckBox: TCheckBox
Left = 6
Height = 24
Top = 36
Width = 435
Align = alTop
BorderSpacing.Around = 6
Caption = 'Show output in Messages window'
TabOrder = 3
end
end end
end end
object ButtonPanel: TButtonPanel object ButtonPanel: TButtonPanel
Left = 6 Left = 6
Height = 26 Height = 28
Top = 385 Top = 383
Width = 439 Width = 439
OKButton.Name = 'OKButton'
OKButton.DefaultCaption = True
HelpButton.Name = 'HelpButton'
HelpButton.DefaultCaption = True
CloseButton.Name = 'CloseButton'
CloseButton.DefaultCaption = True
CancelButton.Name = 'CancelButton'
CancelButton.DefaultCaption = True
TabOrder = 1 TabOrder = 1
ShowButtons = [pbOK, pbCancel, pbHelp] ShowButtons = [pbOK, pbCancel, pbHelp]
ShowBevel = False ShowBevel = False

View File

@ -1,3 +1,5 @@
{ Dialog to configure Build/Run file
}
unit BuildFileDlg; unit BuildFileDlg;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
@ -37,32 +39,33 @@ type
{ TBuildFileDialog } { TBuildFileDialog }
TBuildFileDialog = class(TForm) TBuildFileDialog = class(TForm)
AlwaysCompileFirstCheckbox: TCHECKBOX; RunBeforeBuildCheckbox: TCheckBox;
BuildBrowseWorkDirButton: TBUTTON; BuildBrowseWorkDirButton: TButton;
BuildCommandGroupbox: TGROUPBOX; BuildCommandGroupbox: TGroupBox;
BuildCommandMemo: TMEMO; BuildCommandMemo: TMemo;
BuildScanForFPCMsgCheckbox: TCHECKBOX; BuildScanForFPCMsgCheckbox: TCheckBox;
BuildScanForMakeMsgCheckbox: TCHECKBOX; BuildScanForMakeMsgCheckbox: TCheckBox;
BuildWorkDirCombobox: TCOMBOBOX; BuildWorkDirCombobox: TComboBox;
BuildWorkingDirGroupbox: TGROUPBOX; BuildWorkingDirGroupbox: TGroupBox;
BuildPage: TTabSheet; BuildPage: TTabSheet;
ButtonPanel: TButtonPanel; ButtonPanel: TButtonPanel;
GeneralPage: TTabSheet; GeneralPage: TTabSheet;
Notebook1: TPageControl; Notebook1: TPageControl;
OverrideBuildProjectCheckbox: TCHECKBOX; OverrideBuildProjectCheckbox: TCheckBox;
OverrideRunProjectCheckbox: TCHECKBOX; OverrideRunProjectCheckbox: TCheckBox;
RunBrowseWorkDirButton: TBUTTON; RunBrowseWorkDirButton: TButton;
RunCommandGroupbox: TGROUPBOX; RunCommandGroupbox: TGroupBox;
RunCommandMemo: TMEMO; RunCommandMemo: TMemo;
RunPage: TTabSheet; RunPage: TTabSheet;
RunWorkDirCombobox: TCOMBOBOX; RunWorkDirCombobox: TComboBox;
RunWorkDirGroupbox: TGROUPBOX; RunWorkDirGroupbox: TGroupBox;
WhenFileIsActiveGroupbox: TGROUPBOX; RunShowOutputCheckBox: TCheckBox;
WhenFileIsActiveGroupbox: TGroupBox;
BuildMacroSelectionBox: TMacroSelectionBox; BuildMacroSelectionBox: TMacroSelectionBox;
RunMacroSelectionBox: TMacroSelectionBox; RunMacroSelectionBox: TMacroSelectionBox;
procedure BuildBrowseWorkDirButtonCLICK(Sender: TObject); procedure BuildBrowseWorkDirButtonCLICK(Sender: TObject);
procedure BuildFileDialogCREATE(Sender: TObject); procedure BuildFileDialogCreate(Sender: TObject);
procedure BuildFileDialogKEYDOWN(Sender: TObject; var Key: Word; procedure BuildFileDialogKeyDown(Sender: TObject; var Key: Word;
{%H-}Shift: TShiftState); {%H-}Shift: TShiftState);
procedure BuildMacroSelectionBoxAddMacro(Sender: TObject); procedure BuildMacroSelectionBoxAddMacro(Sender: TObject);
procedure HelpButtonClick(Sender: TObject); procedure HelpButtonClick(Sender: TObject);
@ -434,7 +437,7 @@ end;
{ TBuildFileDialog } { TBuildFileDialog }
procedure TBuildFileDialog.BuildFileDialogKEYDOWN(Sender: TObject; procedure TBuildFileDialog.BuildFileDialogKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState); var Key: Word; Shift: TShiftState);
begin begin
if Key=VK_ESCAPE then ModalResult:=mrCancel; if Key=VK_ESCAPE then ModalResult:=mrCancel;
@ -473,7 +476,7 @@ begin
RunCommandMemo.SelText:=MacroCode; RunCommandMemo.SelText:=MacroCode;
end; end;
procedure TBuildFileDialog.BuildFileDialogCREATE(Sender: TObject); procedure TBuildFileDialog.BuildFileDialogCreate(Sender: TObject);
begin begin
Notebook1.PageIndex:=0; Notebook1.PageIndex:=0;
@ -513,7 +516,8 @@ begin
BuildScanForMakeMsgCheckbox.Caption:=lisCOScanForMakeMessages; BuildScanForMakeMsgCheckbox.Caption:=lisCOScanForMakeMessages;
RunPage.Caption:=lisRun; RunPage.Caption:=lisRun;
AlwaysCompileFirstCheckbox.Caption:=lisBFAlwaysBuildBeforeRun; RunBeforeBuildCheckbox.Caption:=lisBFAlwaysBuildBeforeRun;
RunShowOutputCheckBox.Caption:=lisShowOutput;
RunWorkDirGroupbox.Caption:=lisBFWorkingDirectoryLeaveEmptyForFilePath; RunWorkDirGroupbox.Caption:=lisBFWorkingDirectoryLeaveEmptyForFilePath;
RunCommandGroupbox.Caption:=lisBFRunCommand; RunCommandGroupbox.Caption:=lisBFRunCommand;
@ -605,7 +609,6 @@ var
BuildCommand: String; BuildCommand: String;
BuildScanForFPCMsg: Boolean; BuildScanForFPCMsg: Boolean;
BuildScanForMakeMsg: Boolean; BuildScanForMakeMsg: Boolean;
AlwaysBuildBeforeRun: Boolean;
RunWorkingDir: String; RunWorkingDir: String;
RunCommand: String; RunCommand: String;
BuildScanStr: String; BuildScanStr: String;
@ -630,7 +633,6 @@ begin
RunFlags:=GetIDEDirRunFlagFromString( RunFlags:=GetIDEDirRunFlagFromString(
GetIDEStringDirective(DirectiveList, GetIDEStringDirective(DirectiveList,
IDEDirectiveNames[idedRunFlags],'')); IDEDirectiveNames[idedRunFlags],''));
AlwaysBuildBeforeRun:=idedrfBuildBeforeRun in RunFlags;
RunWorkingDir:=GetIDEStringDirective(DirectiveList, RunWorkingDir:=GetIDEStringDirective(DirectiveList,
IDEDirectiveNames[idedRunWorkingDir],''); IDEDirectiveNames[idedRunWorkingDir],'');
RunCommand:=GetIDEStringDirective(DirectiveList, RunCommand:=GetIDEStringDirective(DirectiveList,
@ -642,7 +644,8 @@ begin
BuildCommandMemo.Lines.Text:=BuildCommand; BuildCommandMemo.Lines.Text:=BuildCommand;
BuildScanForFPCMsgCheckbox.Checked:=BuildScanForFPCMsg; BuildScanForFPCMsgCheckbox.Checked:=BuildScanForFPCMsg;
BuildScanForMakeMsgCheckbox.Checked:=BuildScanForMakeMsg; BuildScanForMakeMsgCheckbox.Checked:=BuildScanForMakeMsg;
AlwaysCompileFirstCheckbox.Checked:=AlwaysBuildBeforeRun; RunBeforeBuildCheckbox.Checked:=idedrfBuildBeforeRun in RunFlags;
RunShowOutputCheckBox.Checked:=idedrfMessages in RunFlags;
RunWorkDirCombobox.Text:=RunWorkingDir; RunWorkDirCombobox.Text:=RunWorkingDir;
RunCommandMemo.Lines.Text:=RunCommand; RunCommandMemo.Lines.Text:=RunCommand;
end; end;
@ -654,7 +657,6 @@ var
BuildScanForFPCMsg: Boolean; BuildScanForFPCMsg: Boolean;
BuildScanForMakeMsg: Boolean; BuildScanForMakeMsg: Boolean;
BuildScan: TIDEDirBuildScanFlags; BuildScan: TIDEDirBuildScanFlags;
AlwaysBuildBeforeRun: Boolean;
RunWorkingDir: String; RunWorkingDir: String;
RunCommand: String; RunCommand: String;
RunFlags: TIDEDirRunFlags; RunFlags: TIDEDirRunFlags;
@ -670,9 +672,9 @@ begin
if BuildScanForMakeMsg then Include(BuildScan,idedbsfMake); if BuildScanForMakeMsg then Include(BuildScan,idedbsfMake);
// run // run
AlwaysBuildBeforeRun:=AlwaysCompileFirstCheckbox.Checked;
RunFlags:=[]; RunFlags:=[];
if AlwaysBuildBeforeRun then Include(RunFlags,idedrfBuildBeforeRun); if RunBeforeBuildCheckbox.Checked then Include(RunFlags,idedrfBuildBeforeRun);
if RunShowOutputCheckBox.Checked then Include(RunFlags,idedrfMessages);
RunWorkingDir:=SpecialCharsToSpaces(RunWorkDirCombobox.Text,true); RunWorkingDir:=SpecialCharsToSpaces(RunWorkDirCombobox.Text,true);
RunCommand:=SpecialCharsToSpaces(RunCommandMemo.Lines.Text,true); RunCommand:=SpecialCharsToSpaces(RunCommandMemo.Lines.Text,true);

View File

@ -496,6 +496,7 @@ resourcestring
lisMenuProjectOptions = 'Project Options ...'; lisMenuProjectOptions = 'Project Options ...';
lisBFWorkingDirectoryLeaveEmptyForFilePath = 'Working directory (leave empty for file path)'; lisBFWorkingDirectoryLeaveEmptyForFilePath = 'Working directory (leave empty for file path)';
lisShowOutput = 'Show output';
lisBFBuildCommand = 'Build Command'; lisBFBuildCommand = 'Build Command';
lisMenuQuickCompile = 'Quick Compile'; lisMenuQuickCompile = 'Quick Compile';
lisMenuCleanUpAndBuild = 'Clean up and Build ...'; lisMenuCleanUpAndBuild = 'Clean up and Build ...';

View File

@ -7662,7 +7662,7 @@ var
DefRunCommand: String; DefRunCommand: String;
RunCommand: String; RunCommand: String;
ProgramFilename: string; ProgramFilename: string;
Params: string; Params, aFilename: string;
ExtTool: TIDEExternalToolOptions; ExtTool: TIDEExternalToolOptions;
DirectiveList: TStringList; DirectiveList: TStringList;
Code: TCodeBuffer; Code: TCodeBuffer;
@ -7732,6 +7732,19 @@ begin
SourceEditorManager.ClearErrorLines; SourceEditorManager.ClearErrorLines;
SplitCmdLine(RunCommand,ProgramFilename,Params); SplitCmdLine(RunCommand,ProgramFilename,Params);
aFilename:=ProgramFilename;
if (aFilename<>'')
and (not FilenameIsAbsolute(aFilename))
and (Pos(PathDelim,aFilename)<1)
then begin
aFilename:=FileUtil.FindDefaultExecutablePath(aFilename,RunWorkingDir);
if aFilename='' then
aFilename:=ProgramFilename;
end;
if aFilename<>'' then
aFilename:=ExpandFileNameUTF8(aFilename,RunWorkingDir);
if (aFilename<>'') and FileExistsUTF8(aFilename) then
ProgramFilename:=aFilename;
ExtTool:=TIDEExternalToolOptions.Create; ExtTool:=TIDEExternalToolOptions.Create;
try try