aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-12-05 19:12:26 +0100
committerAdrian Kummerlaender2015-12-05 19:12:26 +0100
commiteaa6b0b5f43738c0386e99eeba26b44250e6136d (patch)
tree3400c97d336bb59a9216e4e5400ad8f7617a5682
parent428dc1d77bd843c0e7313cb28dc69f26154fdea6 (diff)
downloadMetaTerm-eaa6b0b5f43738c0386e99eeba26b44250e6136d.tar
MetaTerm-eaa6b0b5f43738c0386e99eeba26b44250e6136d.tar.gz
MetaTerm-eaa6b0b5f43738c0386e99eeba26b44250e6136d.tar.bz2
MetaTerm-eaa6b0b5f43738c0386e99eeba26b44250e6136d.tar.lz
MetaTerm-eaa6b0b5f43738c0386e99eeba26b44250e6136d.tar.xz
MetaTerm-eaa6b0b5f43738c0386e99eeba26b44250e6136d.tar.zst
MetaTerm-eaa6b0b5f43738c0386e99eeba26b44250e6136d.zip
Implement `cd` command to enable changing _MetaTerm_'s working directory
Exposing access to the working directory to QML is the first step towards enabling usage analogously to a normal terminal emulator alongside the management of multiple running appications. i.e. executing `cd` should change the global working directory so that consecutive commands work as expected.
-rw-r--r--main.cc30
-rw-r--r--src/command/commands.js10
2 files changed, 38 insertions, 2 deletions
diff --git a/main.cc b/main.cc
index 617b43a..a27ab6c 100644
--- a/main.cc
+++ b/main.cc
@@ -1,12 +1,36 @@
+#include <QDir>
+#include <QQmlContext>
#include <QApplication>
#include <QQmlApplicationEngine>
+class WorkingDirectory : public QObject {
+ Q_OBJECT
+
+ public:
+ Q_INVOKABLE bool cd(const QString& path) const {
+ QDir current(QDir::current());
+
+ const bool result = current.cd(path);
+
+ QDir::setCurrent(current.absolutePath());
+
+ return result;
+ }
+
+ Q_INVOKABLE QString current() const {
+ return QDir::current().absolutePath();
+ }
+};
+
int main(int argc, char *argv[]) {
- QApplication application(argc, argv);
+ WorkingDirectory directory;
+ QApplication application(argc, argv);
+ QQmlApplicationEngine engine(QUrl(QStringLiteral("qrc:/main.qml")));
+
application.setOrganizationName("akr");
application.setApplicationName("MetaTerm");
- QQmlApplicationEngine engine(QUrl(QStringLiteral("qrc:/main.qml")));
+ engine.rootContext()->setContextProperty("workingDirectory", &directory);
QObject::connect(
static_cast<QObject*>(&engine),
@@ -17,3 +41,5 @@ int main(int argc, char *argv[]) {
return application.exec();
}
+
+#include "main.moc"
diff --git a/src/command/commands.js b/src/command/commands.js
index 732eb5b..2ec1bb6 100644
--- a/src/command/commands.js
+++ b/src/command/commands.js
@@ -114,3 +114,13 @@ function prev() {
function q() {
Qt.quit();
}
+
+function cd(output, path) {
+ if ( path.length > 0 ) {
+ if ( !workingDirectory.cd(path) ) {
+ output.error('\"' + path + '\" doesn\'t exist.');
+ }
+ } else {
+ output.log(workingDirectory.current());
+ }
+}