terminal kill runnig apps
This commit is contained in:
parent
644ebe1c05
commit
86793bfdc1
@ -1,5 +1,6 @@
|
||||
package bin;
|
||||
|
||||
import kernel.log.Log;
|
||||
import kernel.binstore.BinStore;
|
||||
import kernel.ps.ProcessHandle;
|
||||
import kernel.ps.Process;
|
||||
@ -15,6 +16,7 @@ class Terminal implements Process {
|
||||
private var backlog:Array<String> = [];
|
||||
private var handle:ProcessHandle;
|
||||
private var requestRender: () -> Void;
|
||||
private var runningPID:PID = -1;
|
||||
|
||||
public function new() {}
|
||||
|
||||
@ -28,27 +30,41 @@ class Terminal implements Process {
|
||||
|
||||
statelessContext.setRenderFunc(this.render);
|
||||
|
||||
this.context.onChar.handle(char -> {
|
||||
handle.addCallbackLink(this.context.onChar.handle(char -> {
|
||||
if (this.runningPID > 0) return;
|
||||
this.input += char;
|
||||
this.requestRender();
|
||||
});
|
||||
}));
|
||||
|
||||
this.context.onKey.handle(e -> {
|
||||
if (e.keyCode == 259) { // Backspace
|
||||
this.input = this.input.substr(0, this.input.length - 1);
|
||||
this.requestRender();
|
||||
} else if (e.keyCode == 257) { // Enter
|
||||
this.backlog.push("> " + this.input);
|
||||
var command = this.input;
|
||||
this.input = "";
|
||||
this.requestRender();
|
||||
this.invokeCommand(command);
|
||||
handle.addCallbackLink(this.context.onKey.handle(e -> {
|
||||
switch (e.keyCode) {
|
||||
case 259: // Backspace
|
||||
if (this.runningPID > 0) return;
|
||||
this.input = this.input.substr(0, this.input.length - 1);
|
||||
this.requestRender();
|
||||
case 257: // Enter
|
||||
if (this.runningPID > 0) return;
|
||||
this.backlog.push("> " + this.input);
|
||||
var command = this.input;
|
||||
this.input = "";
|
||||
this.requestRender();
|
||||
this.invokeCommand(command);
|
||||
case 269: // END
|
||||
this.stopCurrentPS();
|
||||
}
|
||||
});
|
||||
}));
|
||||
|
||||
this.requestRender();
|
||||
}
|
||||
|
||||
private function stopCurrentPS() {
|
||||
if (this.runningPID < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
ProcessManager.kill(this.runningPID);
|
||||
}
|
||||
|
||||
private function render() {
|
||||
redrawBacklog();
|
||||
redrawInput();
|
||||
@ -114,7 +130,7 @@ class Terminal implements Process {
|
||||
return;
|
||||
}
|
||||
|
||||
ProcessManager.run(ps,{
|
||||
this.runningPID = ProcessManager.run(ps,{
|
||||
args: commandArgs,
|
||||
onWrite: (s:String) -> {
|
||||
if (s == "") {
|
||||
@ -138,6 +154,7 @@ class Terminal implements Process {
|
||||
this.requestRender();
|
||||
},
|
||||
onExit: (success:Bool) -> {
|
||||
this.runningPID = -1;
|
||||
if (this.backlog[this.backlog.length - 1] == "") {
|
||||
this.backlog.pop();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user