aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-08-09 20:10:38 +0200
committerAdrian Kummerlaender2015-08-09 20:10:38 +0200
commit22276404e5c3f3833a2de5f1971be24f0729aa6e (patch)
tree4a846db44335097894a26bef95c96aedaa19c858
parent3d618159831b6379f2aefc27d8f744fd46a9f3d2 (diff)
downloadMetaTerm-22276404e5c3f3833a2de5f1971be24f0729aa6e.tar
MetaTerm-22276404e5c3f3833a2de5f1971be24f0729aa6e.tar.gz
MetaTerm-22276404e5c3f3833a2de5f1971be24f0729aa6e.tar.bz2
MetaTerm-22276404e5c3f3833a2de5f1971be24f0729aa6e.tar.lz
MetaTerm-22276404e5c3f3833a2de5f1971be24f0729aa6e.tar.xz
MetaTerm-22276404e5c3f3833a2de5f1971be24f0729aa6e.tar.zst
MetaTerm-22276404e5c3f3833a2de5f1971be24f0729aa6e.zip
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_.
-rw-r--r--qml/CommandInput.qml19
-rw-r--r--qml/StateHandler.qml2
-rw-r--r--qml/commands.js19
-rw-r--r--qml/ui.qrc1
4 files changed, 33 insertions, 8 deletions
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 @@
<file>CommandInput.qml</file>
<file>TerminalList.qml</file>
<file>Highlighter.qml</file>
+ <file>commands.js</file>
</qresource>
</RCC>