From 22276404e5c3f3833a2de5f1971be24f0729aa6e Mon Sep 17 00:00:00 2001
From: Adrian Kummerlaender
Date: Sun, 9 Aug 2015 20:10:38 +0200
Subject: Implement basic command dispatch logic
Moved command implementation into separate ressource.
Commands are plain JavaScript functions in this separate ressource and as such callable via a simple call to `eval`.
Introduced the concept of a command prefix to enable implementation of e.g. a search command analogously to _vim_.
---
qml/CommandInput.qml | 19 ++++++++++++-------
qml/StateHandler.qml | 2 +-
qml/commands.js | 19 +++++++++++++++++++
qml/ui.qrc | 1 +
4 files changed, 33 insertions(+), 8 deletions(-)
create mode 100644 qml/commands.js
diff --git a/qml/CommandInput.qml b/qml/CommandInput.qml
index 835ccae..e7defbf 100644
--- a/qml/CommandInput.qml
+++ b/qml/CommandInput.qml
@@ -2,6 +2,8 @@ import QtQuick 2.0
import QtQuick.Layouts 1.1
import Qt.labs.settings 1.0
+import "commands.js" as Commands
+
Item {
id: item
@@ -17,8 +19,9 @@ Item {
property color fontColor : "white"
}
- function focus() {
- visible = true;
+ function focus(prefix) {
+ visible = true;
+ command.text = prefix;
command.forceActiveFocus();
}
@@ -41,9 +44,9 @@ Item {
color: settings.fontColor
selectionColor: settings.fontColor
selectedTextColor: settings.background
- text: ":"
+ selectByMouse: true
- selectByMouse: true
+ function reset() { text = '' }
onAccepted: {
const prefix = String(text).charAt(0);
@@ -51,11 +54,13 @@ Item {
switch ( prefix ) {
case ':': {
- eval(cmd);
- text = ':';
+ Commands.execute(cmd);
+ reset();
break;
}
- default: { }
+ default: {
+ console.log('"' + prefix + '"' + " is not a command prefix");
+ }
}
}
}
diff --git a/qml/StateHandler.qml b/qml/StateHandler.qml
index 8c78e2f..75c5d6b 100644
--- a/qml/StateHandler.qml
+++ b/qml/StateHandler.qml
@@ -103,7 +103,7 @@ Item {
onTriggered: {
item.state = "COMMAND";
- commandInput.focus();
+ commandInput.focus(shortcut);
}
}
diff --git a/qml/commands.js b/qml/commands.js
new file mode 100644
index 0000000..ee13a1b
--- /dev/null
+++ b/qml/commands.js
@@ -0,0 +1,19 @@
+function execute(command) {
+ var args = command.split(' ');
+ var func = args[0];
+ args.shift();
+
+ eval(func + '(' + JSON.stringify(args) + ')');
+}
+
+function exec(args) {
+ eval(args.join(' '));
+}
+
+function next() {
+ terminalList.selectNext();
+}
+
+function prev() {
+ terminalList.selectPrev();
+}
diff --git a/qml/ui.qrc b/qml/ui.qrc
index df6d4e3..c8bd040 100644
--- a/qml/ui.qrc
+++ b/qml/ui.qrc
@@ -7,5 +7,6 @@
CommandInput.qml
TerminalList.qml
Highlighter.qml
+ commands.js
--
cgit v1.2.3