Terminal changes.

This commit is contained in:
retoor 2025-03-23 02:53:36 +01:00
parent 0bc24e8d2e
commit c2d9af807a
2 changed files with 16 additions and 1 deletions
src/snek

View File

@ -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):

View File

@ -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>