From d1200ca432038a34a9fa063244136e737ce47735 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sat, 12 Dec 2015 23:37:11 +0100 Subject: Expose session PID and current working directory --- main.cc | 6 +++++- src/command/commands.js | 12 ++++++------ src/widget/EmbeddedTerminal.qml | 5 +++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/main.cc b/main.cc index a27ab6c..d4f68dc 100644 --- a/main.cc +++ b/main.cc @@ -20,6 +20,10 @@ class WorkingDirectory : public QObject { Q_INVOKABLE QString current() const { return QDir::current().absolutePath(); } + + Q_INVOKABLE QString currentOfPID(const int pid) const { + return QDir("/proc/" + QString::number(pid) + "/cwd/").canonicalPath(); + } }; int main(int argc, char *argv[]) { @@ -30,7 +34,7 @@ int main(int argc, char *argv[]) { application.setOrganizationName("akr"); application.setApplicationName("MetaTerm"); - engine.rootContext()->setContextProperty("workingDirectory", &directory); + engine.rootContext()->setContextProperty("cwd", &directory); QObject::connect( static_cast(&engine), diff --git a/src/command/commands.js b/src/command/commands.js index 2ec1bb6..13bb1c2 100644 --- a/src/command/commands.js +++ b/src/command/commands.js @@ -115,12 +115,12 @@ function q() { Qt.quit(); } -function cd(output, path) { - if ( path.length > 0 ) { - if ( !workingDirectory.cd(path) ) { - output.error('\"' + path + '\" doesn\'t exist.'); - } +function pwd(output) { + var terminal = terminalList.getCurrent().terminal; + + if ( terminal !== null ) { + output.log(cwd.currentOfPID(terminal.getPID())); } else { - output.log(workingDirectory.current()); + output.error('No running session selected.'); } } diff --git a/src/widget/EmbeddedTerminal.qml b/src/widget/EmbeddedTerminal.qml index 8a326ef..67d9a91 100644 --- a/src/widget/EmbeddedTerminal.qml +++ b/src/widget/EmbeddedTerminal.qml @@ -12,12 +12,13 @@ Item { property int lines : settings.terminal.initialLines property alias history : session.history + function getPID() { return session.getShellPID() } + function terminate() { return session.sendSignal(15) } + function select() { highlighter.select() } function deselect() { highlighter.deselect() } function displayOverlay() { overlay.displayBriefly() } - function terminate() { return session.sendSignal(15) } - height: terminal.height width: parent.width - settings.terminal.frameWidth -- cgit v1.2.3