Terminal: Listen to sub-process status to exit

master
Hollow Man 6 years ago
parent 86a00f1505
commit 78a32abfcc
No known key found for this signature in database
GPG Key ID: 6CA2A0660F48F7A
  1. 13
      app/terminal/buffer.py
  2. 20
      app/terminal/index.html
  3. 3
      app/terminal/server.js

@ -65,7 +65,7 @@ class AppBuffer(BrowserBuffer):
self.timer=QTimer()
self.timer.start(250)
self.timer.timeout.connect(self.on_change_directory)
self.timer.timeout.connect(self.checking_status)
def focus_terminal(self):
event = QMouseEvent(QEvent.MouseButtonPress, QPointF(0, 0), Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
@ -81,19 +81,18 @@ class AppBuffer(BrowserBuffer):
html = f.read().replace("%1", str(self.port)).replace("%2", "file://" + os.path.join(os.path.dirname(__file__))).replace("%3", theme).replace("%4", self.emacs_var_dict["eaf-terminal-font-size"]).replace("%5", self.current_directory)
self.buffer_widget.setHtml(html)
def on_change_directory(self):
def checking_status(self):
changed_directory = str(self.buffer_widget.execute_js("title"))
if not changed_directory == self.current_directory:
self.update_title()
self.change_title(changed_directory)
self.eval_in_emacs.emit('''(setq default-directory "'''+ changed_directory +'''")''')
self.current_directory = changed_directory
def update_title(self):
self.change_title(str(self.buffer_widget.execute_js("title")))
if subprocess.Popen.poll(self.background_process) is not None:
self.destroy_buffer()
def destroy_buffer(self):
os.kill(self.background_process.pid, signal.SIGKILL)
super().destroy_buffer()
self.close_buffer()
self.timer.stop()
@interactive()

@ -33,14 +33,12 @@
<div id="xterm" class="xterm"/>
<script>
var first_time = true;
try {
var socket = new WebSocket("ws://127.0.0.1:%1");
}
catch(err) {
setTimeout('location.reload();',1000);
}
first_time = false;
const term = new Terminal({
fontSize: "%4",
cursorBlink: true,
@ -125,30 +123,18 @@
}
window.addEventListener("resize", sendSizeToServer);
}
socket.onmessage = (msg) => {
var re = /:([^\x07].*?)\x07/g;
arr = re.exec(msg.data)
if(arr) {
if (arr[1] === "/") {
title = arr[1];
}
else {
title = arr[1]+"/"
}
}
if(msg === "ESCAPED|-- CLOSED") {
socket.close();
title = arr[1];
}
}
socket.onclose = () => {
if(!first_time){
window.close();
}
}
socket.onclose = () => {}
socket.onerror = () => {}
</script>
</body>

@ -2,12 +2,13 @@ this.Pty = require("node-pty");
this.Websocket = require("ws").Server;
this.onclosed = () => {
ws.send("ESCAPED|-- CLOSED");
process.exit()
};
this.onopened = () => {};
this.onresize = () => {};
this.ondisconnected = () => {};
var port = process.argv.slice(2)[0]
var dir = process.argv.slice(3)[0]
var commands = process.argv.slice(4)[0].split(" ")

Loading…
Cancel
Save