From 3633816889a62bb395ff68f9219dcd26d600c870 Mon Sep 17 00:00:00 2001 From: Kevin Lamonte Date: Sat, 21 Mar 2015 00:04:32 -0400 Subject: [PATCH] run jexer inside jexer --- README.md | 5 +++++ screenshots/yodawg.png | Bin 0 -> 4860 bytes src/jexer/session/TTYSessionInfo.java | 10 +++++++-- src/jexer/tterminal/ECMA48.java | 30 +++++++++++++++++++------- 4 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 screenshots/yodawg.png diff --git a/README.md b/README.md index 1a41908..89e852a 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,8 @@ ambiguous. This section describes such issues. emulation limitations. + + Roadmap ------- @@ -161,3 +163,6 @@ Screenshots ![Several Windows Open Including A Terminal](/screenshots/screenshot1.png?raw=true "Several Windows Open Including A Terminal") +![Yo Dawg...](/screenshots/yodawg.png?raw=true "Yo Dawg, I heard you + like text windowing systems, so I ran a text windowing system inside your + text windowing system so you can have a terminal in your terminal.") diff --git a/screenshots/yodawg.png b/screenshots/yodawg.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d3d314c6fe5d2c683f38e0775eb39f9f2d1f0d GIT binary patch literal 4860 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 HGx~o3ap~D0 literal 0 HcmV?d00001 diff --git a/src/jexer/session/TTYSessionInfo.java b/src/jexer/session/TTYSessionInfo.java index 080e949..4716e26 100644 --- a/src/jexer/session/TTYSessionInfo.java +++ b/src/jexer/session/TTYSessionInfo.java @@ -120,8 +120,14 @@ public final class TTYSessionInfo implements SessionInfo { String line = in.readLine(); if ((line != null) && (line.length() > 0)) { StringTokenizer tokenizer = new StringTokenizer(line); - windowHeight = Integer.parseInt(tokenizer.nextToken()); - windowWidth = Integer.parseInt(tokenizer.nextToken()); + int rc = Integer.parseInt(tokenizer.nextToken()); + if (rc > 0) { + windowHeight = rc; + } + rc = Integer.parseInt(tokenizer.nextToken()); + if (rc > 0) { + windowWidth = rc; + } } while (true) { BufferedReader err = new BufferedReader( diff --git a/src/jexer/tterminal/ECMA48.java b/src/jexer/tterminal/ECMA48.java index 017c3c7..d148b39 100644 --- a/src/jexer/tterminal/ECMA48.java +++ b/src/jexer/tterminal/ECMA48.java @@ -3307,17 +3307,31 @@ public class ECMA48 implements Runnable { * DECSTBM - Set top and bottom margins. */ private void decstbm() { - int top = getCsiParam(0, 1, 1, height) - 1; - int bottom = getCsiParam(1, height, 1, height) - 1; + boolean decPrivateModeFlag = false; - if (top > bottom) { - top = bottom; + for (int i = 0; i < collectBuffer.length(); i++) { + if (collectBuffer.charAt(i) == '?') { + decPrivateModeFlag = true; + break; + } } - scrollRegionTop = top; - scrollRegionBottom = bottom; + if (decPrivateModeFlag) { + // This could be restore DEC private mode values. + // Ignore it. + } else { + // DECSTBM + int top = getCsiParam(0, 1, 1, height) - 1; + int bottom = getCsiParam(1, height, 1, height) - 1; - // Home cursor - cursorPosition(0, 0); + if (top > bottom) { + top = bottom; + } + scrollRegionTop = top; + scrollRegionBottom = bottom; + + // Home cursor + cursorPosition(0, 0); + } } /** -- 2.27.0