From 6edb2e778848a040a1bf2a5726f25017e35a69f1 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 23 Jan 2020 18:12:20 +0100 Subject: [PATCH] Improve mini browser and terminal. --- .../src/org/argeo/swt/desktop/MiniBrowser.java | 13 ++++++++++--- .../src/org/argeo/swt/desktop/MiniTerminal.java | 17 +++++++++++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniBrowser.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniBrowser.java index 3152db1a9..4b41207fc 100644 --- a/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniBrowser.java +++ b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniBrowser.java @@ -48,18 +48,25 @@ public class MiniBrowser implements BiFunction context.setTitle(e.title)); context.addObserver((o, v) -> { String url = ((Context) o).getUrl(); - if (!url.equals(browser.getUrl())) + if (url != null && !url.equals(browser.getUrl())) browser.setUrl(url.toString()); }); return browser; diff --git a/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTerminal.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTerminal.java index 1280d1d44..cacf55aaa 100644 --- a/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTerminal.java +++ b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/swt/desktop/MiniTerminal.java @@ -54,9 +54,13 @@ public class MiniTerminal implements KeyListener, PaintListener { private String host = "localhost"; private String username; + // Sub process + private Process process; private boolean running = false; private OutputStream stdIn = null; + private Thread readOut; + public MiniTerminal(Composite parent, int style) { charset = StandardCharsets.UTF_8; @@ -107,6 +111,13 @@ public class MiniTerminal implements KeyListener, PaintListener { userInput.setLength(userInput.length() - 1); if (!running && buf.length() > 0) buf.setLength(buf.length() - 1); + } else if (e.stateMask == 0x40000 && e.keyCode == 0x63) {// Ctrl+C + if (process != null) + process.destroy(); + } else if (e.stateMask == 0x40000 && e.keyCode == 0xdf) {// Ctrl+\ + if (process != null) { + process.destroyForcibly(); + } } else { // if (!running) buf.append(e.character); @@ -196,10 +207,10 @@ public class MiniTerminal implements KeyListener, PaintListener { pb.redirectErrorStream(true); pb.directory(currentDir.toFile()); // Process process = Runtime.getRuntime().exec(input, null, currentPath.toFile()); - Process process = pb.start(); + process = pb.start(); stdIn = process.getOutputStream(); - Thread readOut = new Thread("Read out") { + readOut = new Thread("MinitTerminal read out") { @Override public void run() { running = true; @@ -215,6 +226,8 @@ public class MiniTerminal implements KeyListener, PaintListener { stdIn = null; displayPrompt(); running = false; + readOut = null; + process = null; } }; readOut.start(); -- 2.39.5