diff --git a/NEWS.md b/NEWS.md
index 57a89647..bfc90d18 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -5,6 +5,7 @@ Version 0.11.0 For Dev-C++ 7 Beta
- fix: typo errors in settings dialog
- enhancement: console pauser clears STDIN buffer before show "press any key to continue..."
- fix: path in macros should use system's path separator
+ - fix: custom tools doesn't work
Version 0.10.4 For Dev-C++ 7 Beta
- fix: can't correctly undo/redo indent
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.qm b/RedPandaIDE/RedPandaIDE_zh_CN.qm
index e4e9a7f0..5c51ed73 100644
Binary files a/RedPandaIDE/RedPandaIDE_zh_CN.qm and b/RedPandaIDE/RedPandaIDE_zh_CN.qm differ
diff --git a/RedPandaIDE/RedPandaIDE_zh_CN.ts b/RedPandaIDE/RedPandaIDE_zh_CN.ts
index afe03650..6c614be1 100644
--- a/RedPandaIDE/RedPandaIDE_zh_CN.ts
+++ b/RedPandaIDE/RedPandaIDE_zh_CN.ts
@@ -1076,35 +1076,35 @@ Are you really want to continue?
要剪切的内容超过了字符数限制!
-
+
打印文档
-
-
-
+
+
+
Ctrl+单击以获取更多信息
-
-
+
+
未找到符号'%1'!
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
只读
@@ -2826,36 +2826,46 @@ Are you really want to continue?
+
+ 编译得到的文件的完整路径
+
+
+
当前源文件名
-
+
当前源文件路径
-
+
当前源文件所在文件夹
-
+
当前编辑器中光标处的单词
-
+
当前项目名称
-
+
项目文件完整路径
-
+
+
+ 当前项目文件的文件名
+
+
+
项目文件夹
@@ -2870,11 +2880,11 @@ Are you really want to continue?
-
-
-
-
-
+
+
+
+
+
编译器
@@ -2950,7 +2960,7 @@ Are you really want to continue?
-
+
调试主控台
@@ -3026,7 +3036,7 @@ Are you really want to continue?
工具栏2
-
+
新建
@@ -3084,8 +3094,8 @@ Are you really want to continue?
-
-
+
+
编译
@@ -3131,8 +3141,8 @@ Are you really want to continue?
-
-
+
+
复制
@@ -3143,7 +3153,7 @@ Are you really want to continue?
-
+
粘贴
@@ -3154,7 +3164,7 @@ Are you really want to continue?
-
+
选择全部
@@ -3274,14 +3284,14 @@ Are you really want to continue?
-
+
试题集
-
+
新建试题集
@@ -3300,14 +3310,14 @@ Are you really want to continue?
-
+
保存试题集
-
+
载入试题集
@@ -3343,7 +3353,7 @@ Are you really want to continue?
-
+
试题
@@ -3647,7 +3657,7 @@ Are you really want to continue?
-
+
删除所有断点
@@ -3748,7 +3758,7 @@ Are you really want to continue?
-
+
重命名符号
@@ -3769,13 +3779,13 @@ Are you really want to continue?
-
+
导出为RTF
-
+
导出为HTML
@@ -3895,7 +3905,7 @@ Are you really want to continue?
-
+
打开文件夹
@@ -3905,42 +3915,42 @@ Are you really want to continue?
运行参数...
-
+
文件编码
-
+
文件历史
-
-
-
-
-
-
+
+
+
+
+
+
正在调试
-
-
-
-
-
-
+
+
+
+
+
+
正在运行
-
-
-
-
-
-
+
+
+
+
+
+
正在编译
@@ -3949,189 +3959,189 @@ Are you really want to continue?
行:%1 列:%2 已选择:%3 总行数:%4 总长度:%5
-
+
Line: %1 Col: %2 Selected: %3 Lines: %4 Length: %5
行: %1 列: %2 已选择 :%3 总行数: %4 总长度: %5
-
+
只读
-
+
插入
-
+
覆写
-
+
关闭项目
-
+
你确定要关闭'%1'吗?
-
-
+
+
确认
-
-
-
+
+
+
源文件尚未编译。
-
-
+
+
现在编译?
-
-
-
+
+
+
源文件比可执行程序新。
-
+
重新编译?
-
+
无编译器设置
-
+
没有配置编译器设置。
-
+
无法启动调试器
-
-
+
+
启用调试参数
-
-
+
+
当前编译设置中未启用调试选项(-g3),或启用了信息剥除选项(-s)<br /><br/>是否纠正这一问题?
-
+
项目尚未构建
-
+
项目尚未构建。是否构建?
-
+
宿主程序不存在
-
+
动态链接库(DLL)需要一个宿主程序来运行。
-
+
但它不存在。
-
+
宿主程序不存在
-
+
宿主程序'%1'不存在。
-
+
重新编译?
-
-
+
+
保存上次打开信息失败
-
+
无法删除旧上次打开信息文件'%1'
-
+
无法保存上次打开信息文件'%1'
-
+
载入上次打开信息失败
-
+
无法载入上次打开信息文件'%1'
-
+
显示详细调试器日志
-
+
全部复制
-
-
+
+
清除
-
+
导出
-
+
插入代码段
-
-
+
+
试题集%1
@@ -4152,73 +4162,73 @@ Are you really want to continue?
或者选择使用其他的网络端口。
-
+
小熊猫Dev-C++
-
-
+
+
重新构建项目
-
-
+
+
项目已经被修改过,是否需要重新构建?
-
+
自动保存出错
-
+
自动保存"%1"到"%2"失败:%3
-
+
试题属性...
-
+
设置试题集名称
-
+
试题集名称:
-
+
删除
-
+
删除全部书签
-
+
修改描述
-
-
-
+
+
+
书签描述
-
-
-
+
+
+
描述:
@@ -4227,460 +4237,460 @@ Are you really want to continue?
在调试主控台中显示调试器输出
-
+
清除这次搜索
-
+
删除所有搜索
-
+
断点条件...
-
+
断点条件
-
+
输入当前断点的生效条件:
-
+
Remove all breakpoints
删除所有断点
-
+
删除当前断点
-
+
重命名文件
-
-
+
+
添加文件夹
-
+
新文件夹
-
+
文件夹:
-
+
重命名
-
+
删除文件夹
-
+
按类型排序
-
+
按名称排序
-
+
显示继承的成员
-
+
跳转到声明处
-
+
跳转到定义处
-
+
在编辑器中打开
-
+
使用外部程序打开
-
+
在终端中打开
-
+
在Windows浏览器中打开
-
+
字符集
-
+
已自动保存%1个文件
-
+
设置答案源代码...
-
+
选择其他文件...
-
+
选择答案源代码文件
-
+
C/C++Source Files (*.c *.cpp *.cc *.cxx
C/C++源代码文件 (*.c *.cpp *.cc *.cxx)
-
+
保存项目
-
+
项目'%1'有改动。
-
-
+
+
需要保存吗?
-
-
+
+
文件已发生变化
-
+
新建项目文件?
-
+
您是否要将新建的文件加入项目?
-
-
-
-
+
+
+
+
保存失败
-
+
改变项目编译器配置集
-
+
改变项目的编译器配置集会导致所有的自定义编译器选项被重置。
-
+
你真的想要做那些吗?
-
+
您真的要清除该文件的所有断点吗?
-
+
新建项目
-
+
关闭'%1'以打开新项目?
-
+
文件夹不存在
-
+
文件夹'%1'不存在。是否创建?
-
+
无法创建文件夹
-
+
创建文件夹'%1'失败。
-
+
-
+
小熊猫Dev-C++项目文件 (*.dev)
-
+
新建项目失败
-
+
无法使用模板创建项目
-
+
删除文件
-
+
同时从硬盘上删除文件?
-
+
无标题
-
+
新的项目文件名
-
+
文件名:
-
+
文件已存在!
-
+
文件'%1'已经存在!
-
+
添加到项目
-
+
重命名出错
-
+
符号'%1'在系统头文件中定义,无法修改。
-
+
新名称
-
-
+
+
替换出错
-
+
无法打开文件'%1'进行替换!
-
+
内容和上次查找时不一致。
-
+
RTF格式文件 (*.rtf)
-
+
HTML文件 (*.html)
-
+
当前的试题集不是空的。
-
+
试题%1
-
-
+
+
试题集文件 (*.pbs)
-
+
载入失败
-
-
+
+
试题案例%1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
错误
-
+
项目历史
-
+
磁盘文件'%1'已被修改。
-
+
是否重新读取它的内容?
-
+
磁盘文件'%1'已被删除。
-
+
是否保持它在小熊猫C++中打开的编辑窗口?
-
+
打开
-
+
编译失败
-
+
运行失败
-
-
+
+
确认转换
-
-
+
+
当前编辑器中的文件将会使用%1编码保存。<br />这项操作无法被撤回。<br />你确定要继续吗?
-
+
新监视表达式
-
+
输入监视表达式
-
+
(%1/%2)正在解析文件"%3"
-
-
+
+
完成%1个文件的解析,用时%2秒
-
+
(每秒%1个文件)
@@ -5855,27 +5865,27 @@ Are you really want to continue?
无标题
-
+
下标"%1"越界
-
+
字节
-
+
KB
-
+
MB
-
+
GB
@@ -6164,12 +6174,12 @@ Are you really want to continue?
无标题
-
+
构造函数
-
+
析构函数
@@ -6553,7 +6563,8 @@ Are you really want to continue?
-
+
+ Cancle
取消
@@ -6608,7 +6619,7 @@ Are you really want to continue?
自动链接
-
+
@@ -6684,15 +6695,15 @@ Are you really want to continue?
杂项
-
-
+
+
程序运行
-
+
试题集
diff --git a/RedPandaIDE/mainwindow.cpp b/RedPandaIDE/mainwindow.cpp
index 6c8ece9f..eb2e4469 100644
--- a/RedPandaIDE/mainwindow.cpp
+++ b/RedPandaIDE/mainwindow.cpp
@@ -36,6 +36,7 @@
#include
#include
#include
+#include
#include
#include
@@ -1800,30 +1801,48 @@ void MainWindow::updateTools()
if (!mToolsManager->tools().isEmpty()) {
ui->menuTools->addSeparator();
foreach (const PToolItem& item, mToolsManager->tools()) {
- QAction* action = new QAction(item->title,ui->menuTools);
+ QAction* action = new QAction(tr(item->title.toUtf8()),ui->menuTools);
connect(action, &QAction::triggered,
[item] (){
QString program = parseMacros(item->program);
QString workDir = parseMacros(item->workingDirectory);
- if (program == "del") {
- QString current = QDir::currentPath();
- QDir::setCurrent(workDir);
- qDebug()<<(program+" "+parseMacros(item->parameters));
- system((program+" "+parseMacros(item->parameters)).toLocal8Bit());
- QDir::setCurrent(current);
+ QString params = parseMacros(item->parameters);
+ if (!program.endsWith(".bat",Qt::CaseInsensitive)) {
+ QTemporaryFile file(QDir::tempPath()+QDir::separator()+"XXXXXX.bat");
+ file.setAutoRemove(false);
+ if (file.open()) {
+ file.write(QString("cd /d \"%1\"")
+ .arg(localizePath(workDir))
+ .toLocal8Bit()+LINE_BREAKER);
+ file.write((program+" "+params).toLocal8Bit()
+ + LINE_BREAKER);
+ file.close();
+ if (item->pauseAfterExit) {
+ executeFile(
+ includeTrailingPathDelimiter(pSettings->dirs().app())+"ConsolePauser.exe",
+ " 1 \""+localizePath(file.fileName())+"\" ",
+ workDir, file.fileName());
+ } else {
+ executeFile(
+ file.fileName(),
+ "",
+ workDir, file.fileName());
+ }
+ }
} else {
if (item->pauseAfterExit) {
executeFile(
includeTrailingPathDelimiter(pSettings->dirs().app())+"ConsolePauser.exe",
- " 0 \""+localizePath(program)+"\" "+parseMacros(item->parameters),
- workDir);
+ " 1 \""+program+"\" "+params,
+ workDir, "");
} else {
executeFile(
program,
- parseMacros(item->parameters),
- workDir);
+ params,
+ workDir, "");
}
}
+
});
ui->menuTools->addAction(action);
}
diff --git a/RedPandaIDE/settingsdialog/toolsgeneralwidget.cpp b/RedPandaIDE/settingsdialog/toolsgeneralwidget.cpp
index d1a5cda8..64035570 100644
--- a/RedPandaIDE/settingsdialog/toolsgeneralwidget.cpp
+++ b/RedPandaIDE/settingsdialog/toolsgeneralwidget.cpp
@@ -17,7 +17,7 @@ ToolsGeneralWidget::ToolsGeneralWidget(const QString &name, const QString &group
finishEditing(false);
connect(ui->lstTools->selectionModel(), &QItemSelectionModel::currentRowChanged,
this,&ToolsGeneralWidget::onToolsCurrentChanged);
- connect(ui->txtDirectory,&QLineEdit::textChanged,
+ connect(ui->txtProgram,&QLineEdit::textChanged,
this, &ToolsGeneralWidget::updateDemo);
connect(ui->txtParameters,&QLineEdit::textChanged,
this, &ToolsGeneralWidget::updateDemo);
diff --git a/RedPandaIDE/systemconsts.h b/RedPandaIDE/systemconsts.h
index df92700d..08cd08e4 100644
--- a/RedPandaIDE/systemconsts.h
+++ b/RedPandaIDE/systemconsts.h
@@ -52,6 +52,7 @@
#ifdef Q_OS_WIN
# define PATH_SENSITIVITY Qt::CaseInsensitive
# define PATH_SEPARATOR ";"
+# define LINE_BREAKER "\r\n"
# define NULL_FILE "NUL"
# define EXECUTABLE_EXT "exe"
# define STATIC_LIB_EXT "a"
@@ -60,6 +61,7 @@
#elif defined(Q_OS_LINUX)
# define PATH_SENSITIVITY Qt::CaseSensitive
# define PATH_SEPARATOR ":"
+# define LINE_BREAKER "\n"
# define NULL_FILE "/dev/null"
# define EXECUTABLE_EXT ""
# define STATIC_LIB_EXT "a"
diff --git a/RedPandaIDE/utils.cpp b/RedPandaIDE/utils.cpp
index 79df5d8e..7127fec6 100644
--- a/RedPandaIDE/utils.cpp
+++ b/RedPandaIDE/utils.cpp
@@ -786,30 +786,27 @@ QString parseMacros(const QString &s)
result.replace("","");
}
- // Project-dependent macros
- if (pMainWindow->project()) {
+ if (e!=nullptr && !e->inProject()) { // Non-project editor macros
+ result.replace("", extractFileName(changeFileExt(e->filename(),EXECUTABLE_EXT)));
+ result.replace("", localizePath(changeFileExt(e->filename(),EXECUTABLE_EXT)));
+ result.replace("", extractFileName(e->filename()));
+ result.replace("", localizePath(e->filename()));
+ result.replace("", extractFileName(e->filename()));
+ result.replace("", localizePath(extractFileDir(e->filename())));
+ } else if (pMainWindow->project()) {
result.replace("", extractFileName(pMainWindow->project()->executable()));
result.replace("", localizePath(pMainWindow->project()->executable()));
result.replace("", pMainWindow->project()->name());
result.replace("", localizePath(pMainWindow->project()->filename()));
result.replace("", extractFileName(pMainWindow->project()->filename()));
result.replace("", localizePath(pMainWindow->project()->directory()));
-// result.replace("', MainForm.Project.ListUnitStr(' '));
-// result.replace("","");
- } else if (e!=nullptr) { // Non-project editor macros
- result.replace("", extractFileName(changeFileExt(e->filename(),EXECUTABLE_EXT)));
- result.replace("", localizePath(changeFileExt(e->filename(),EXECUTABLE_EXT)));
- result.replace("", extractFileName(e->filename()));
- result.replace("", localizePath(e->filename()));
- result.replace("", extractFileName(e->filename()));
- result.replace("", localizePath(extractFileDir(e->filename())));
-// result.replace("", ""); // clear unchanged macros
} else {
result.replace("", "");
+ result.replace("", "");
result.replace("", "");
result.replace("", "");
+ result.replace("", "");
result.replace("", "");
-// result.replace("", ""); // clear unchanged macros
}
// Editor macros
@@ -827,26 +824,23 @@ QString parseMacros(const QString &s)
return result;
}
-void executeFile(const QString &fileName, const QString ¶ms, const QString &workingDir)
+void executeFile(const QString &fileName, const QString ¶ms, const QString &workingDir, const QString &tempFile)
{
- qDebug()<connect(runner, &QThread::finished,
- [runner](){
- qDebug()<<"finished";
+ [runner,tempFile](){
+ if (!tempFile.isEmpty()) {
+ QFile::remove(tempFile);
+ }
runner->deleteLater();
});
runner->connect(runner, &Runner::runErrorOccurred,
- [](const QString& s){
- qDebug()<<"error occured";
- qDebug()<setStartConsole(true);
runner->start();
}
diff --git a/RedPandaIDE/utils.h b/RedPandaIDE/utils.h
index bff61f39..ee7f9669 100644
--- a/RedPandaIDE/utils.h
+++ b/RedPandaIDE/utils.h
@@ -122,7 +122,10 @@ QByteArray runAndGetOutput(const QString& cmd, const QString& workingDir, const
const QByteArray& inputContent = QByteArray(),
bool inheritEnvironment = false);
-void executeFile(const QString& fileName, const QString& params, const QString& workingDir);
+void executeFile(const QString& fileName,
+ const QString& params,
+ const QString& workingDir,
+ const QString& tempFile);
bool isNonPrintableAsciiChar(char ch);
diff --git a/RedPandaIDE/widgets/macroinfomodel.cpp b/RedPandaIDE/widgets/macroinfomodel.cpp
index 6d4df062..daf725c1 100644
--- a/RedPandaIDE/widgets/macroinfomodel.cpp
+++ b/RedPandaIDE/widgets/macroinfomodel.cpp
@@ -2,7 +2,7 @@
MacroInfoModel::MacroInfoModel(QObject *parent) : QAbstractListModel(parent)
{
- addMacroInfo("", tr("The default directory"));
+ addMacroInfo("", tr("The default directory"));
addMacroInfo("", tr("Path to the Red Panda C++'s executable file."));
addMacroInfo("", tr("Version of the Red Panda C++"));
addMacroInfo("", tr("PATH to the Red Panda C++'s installation folder."));
diff --git a/tools/ConsolePauser/main.cpp b/tools/ConsolePauser/main.cpp
index b554b53d..5ff6ac01 100644
--- a/tools/ConsolePauser/main.cpp
+++ b/tools/ConsolePauser/main.cpp
@@ -78,15 +78,6 @@ string GetCommand(int argc,char** argv,bool &reInp,bool &pauseAfterExit) {
reInp = flags & RPF_REDIRECT_INPUT;
pauseAfterExit = flags & RPF_PAUSE_CONSOLE;
for(int i = 2;i < argc;i++) {
-/*
- // Quote the first argument in case the path name contains spaces
-// if(i == 1) {
-// result += string("\"") + string(argv[i]) + string("\"");
-// } else {
- // Quote the first argument in case the path name contains spaces
-// result += string(argv[i]);
-// }
-*/
// Quote the argument in case the path name contains spaces
result += string("\"") + string(argv[i]) + string("\"");