diff --git a/src/_renderer.js b/src/_renderer.js index 3d7c681fdf69ec806220b398ffab4f513009d362..b7641144a0da7d1f1104381bf18c2623911ecac8 100644 --- a/src/_renderer.js +++ b/src/_renderer.js @@ -295,6 +295,9 @@ initGreeter = () => { }) }; window.currentTerm = 0; + window.term[0].onprocesschange = p => { + document.getElementById("shell_tab0").innerText = "MAIN - "+p; + }; // Prevent losing hardware keyboard focus on the terminal when using touch keyboard window.onmouseup = (e) => { window.term[window.currentTerm].term.focus(); @@ -316,6 +319,14 @@ initGreeter = () => { window.themeChanger = (theme) => { window.focusShellTab(0); + for (let i = 1; i <= 4; i++) { + if (typeof window.term[i] !== undefined) { + window.term[i].socket.close(); + delete window.term[i]; + document.getElementById("shell_tab"+i).innerText = "EMPTY"; + document.getElementById("terminal"+i).innerHTML = ""; + } + } let src = path.join(themesDir, theme+".json" || settings.theme+".json"); // Always get fresh theme files @@ -348,6 +359,11 @@ window.themeChanger = (theme) => { }) }; window.currentTerm = 0; + window.term[0].onprocesschange = p => { + document.getElementById("shell_tab0").innerText = "MAIN - "+p; + }; + + initMods(); window.fsDisp = new FilesystemDisplay({ parentId: "filesystem" @@ -383,6 +399,8 @@ window.focusShellTab = (number) => { window.term[number].fit(); window.term[number].term.focus(); window.term[number].resendCWD(); + + window.fsDisp.followTab(); } else if (number > 0 && number <= 4 && window.term[number] !== null) { window.term[number] = null; @@ -401,12 +419,17 @@ window.focusShellTab = (number) => { }); window.term[number].onclose = e => { + delete window.term[number].onprocesschange; document.getElementById("shell_tab"+number).innerText = "EMPTY"; document.getElementById("terminal"+number).innerHTML = ""; delete window.term[number]; window.focusShellTab(0); }; + window.term[number].onprocesschange = p => { + document.getElementById("shell_tab"+number).innerText = `#${number} - ${p}`; + }; + document.getElementById("shell_tab"+number).innerText = "::"+port; setTimeout(() => { window.focusShellTab(number); diff --git a/src/classes/filesystem.class.js b/src/classes/filesystem.class.js index 25446fd6430faed8f85656430efd5abfad5872b3..115cbd2f1b00a4e5e85c694b9a3fd4067d4627e4 100644 --- a/src/classes/filesystem.class.js +++ b/src/classes/filesystem.class.js @@ -55,20 +55,25 @@ class FilesystemDisplay {

CANNOT ACCESS CURRENT WORKING DIRECTORY

`; }; - window.term[window.currentTerm].oncwdchange = (cwd) => { - if (cwd) { - if (this._fsWatcher) { - this._fsWatcher.close(); - } - if (cwd.startsWith("FALLBACK |-- ")) { - this.readFS(cwd.slice(13)); - this._noTracking = true; - } else { - this.readFS(cwd); - this.watchFS(cwd); + this.followTab = () => { + let num = window.currentTerm; + + window.term[num].oncwdchange = (cwd) => { + if (cwd && window.currentTerm === num) { + if (this._fsWatcher) { + this._fsWatcher.close(); + } + if (cwd.startsWith("FALLBACK |-- ")) { + this.readFS(cwd.slice(13)); + this._noTracking = true; + } else { + this.readFS(cwd); + this.watchFS(cwd); + } } - } + }; }; + this.followTab(); this.watchFS = (dir) => { if (this._fsWatcher) { diff --git a/src/classes/terminal.class.js b/src/classes/terminal.class.js index 80284b3c22d3915d98f8f2082543cce4237ce30e..d7dc5e167897728f3d14f619211b0cea029daedf 100644 --- a/src/classes/terminal.class.js +++ b/src/classes/terminal.class.js @@ -85,6 +85,11 @@ class Terminal { this.cwd = "FALLBACK |-- "+args[1]; this.oncwdchange(this.cwd); break; + case "New process": + if (this.onprocesschange) { + this.onprocesschange(args[1]); + } + break; default: return; } @@ -239,6 +244,7 @@ class Terminal { }); }; this._nextTickUpdateTtyCWD = false; + this._nextTickUpdateProcess = false; this._tick = setInterval(() => { if (this._nextTickUpdateTtyCWD && this._disableCWDtracking === false) { this._nextTickUpdateTtyCWD = false; @@ -258,6 +264,11 @@ class Terminal { } }); } + + if (this.renderer && this._nextTickUpdateProcess) { + this.renderer.send("terminal_channel-"+this.port, "New process", this.tty._file); + this._nextTickUpdateProcess = false; + } }, 1000); this.tty = this.Pty.spawn(opts.shell || "bash", opts.params || [], { @@ -315,6 +326,7 @@ class Terminal { }); this.tty.on("data", (data) => { this._nextTickUpdateTtyCWD = true; + this._nextTickUpdateProcess = true; try { ws.send(data); } catch (e) {