Terminal changes.
This commit is contained in:
parent
0bc24e8d2e
commit
c2d9af807a
src/snek
@ -16,6 +16,7 @@ class TerminalSession:
|
||||
def __init__(self,command):
|
||||
self.master, self.slave = pty.openpty()
|
||||
self.sockets =[]
|
||||
self.buffer = b''
|
||||
self.process = subprocess.Popen(
|
||||
command.split(" "),
|
||||
stdin=self.slave,
|
||||
@ -29,17 +30,30 @@ class TerminalSession:
|
||||
loop = asyncio.get_event_loop()
|
||||
self.sockets.append(ws)
|
||||
if len(self.sockets) > 1:
|
||||
start = self.buffer.index(b'\n')
|
||||
await ws.send_bytes(self.buffer[start:])
|
||||
return
|
||||
while True:
|
||||
try:
|
||||
data = await loop.run_in_executor(None, os.read, self.master, 1024)
|
||||
if not data:
|
||||
break
|
||||
self.buffer += data
|
||||
if len(self.buffer) > 10000:
|
||||
self.buffer = self.buffer[:-10000]
|
||||
try:
|
||||
for ws in self.sockets: await ws.send_bytes(data) # Send raw bytes for ANSI support
|
||||
except:
|
||||
self.sockets.remove(ws)
|
||||
except Exception:
|
||||
print("Terminating process")
|
||||
self.process.terminate()
|
||||
print("Terminated process")
|
||||
for ws in self.sockets:
|
||||
try:
|
||||
await ws.close()
|
||||
except Exception:
|
||||
pass
|
||||
break
|
||||
|
||||
async def write_input(self, data):
|
||||
|
@ -11,7 +11,8 @@
|
||||
<script src="https://cdn.jsdelivr.net/npm/xterm/lib/xterm.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit/lib/xterm-addon-fit.js"></script>
|
||||
<style>
|
||||
#terminal { width: 100%; height: 480px; overflow-y: none; }
|
||||
#terminal { margin-right: 5%; width: 90%; height: 90%; overflow-y: none; }
|
||||
#terminal::-webkit-scrollbar { display: none; }
|
||||
</style>
|
||||
|
||||
<div class="container" id="terminal"></div>
|
||||
|
Loading…
Reference in New Issue
Block a user