diff options
author | Adrian Kummerlaender | 2015-12-05 19:12:26 +0100 |
---|---|---|
committer | Adrian Kummerlaender | 2015-12-05 19:12:26 +0100 |
commit | eaa6b0b5f43738c0386e99eeba26b44250e6136d (patch) | |
tree | 3400c97d336bb59a9216e4e5400ad8f7617a5682 | |
parent | 428dc1d77bd843c0e7313cb28dc69f26154fdea6 (diff) | |
download | MetaTerm-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.cc | 30 | ||||
-rw-r--r-- | src/command/commands.js | 10 |
2 files changed, 38 insertions, 2 deletions
@@ -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()); + } +} |