X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2Fbackend%2FTTYSessionInfo.java;h=d7f5bc8e246d32da560da62c7e02886e7ddf1971;hb=505be508ae7d3fb48122be548b310a238cfb91eb;hp=22d5314eb9ed819e36c0eca16d43a60fec561993;hpb=be72cb5ccbd42fe304c0acafc380c5636f0d03a2;p=fanfix.git diff --git a/src/jexer/backend/TTYSessionInfo.java b/src/jexer/backend/TTYSessionInfo.java index 22d5314..d7f5bc8 100644 --- a/src/jexer/backend/TTYSessionInfo.java +++ b/src/jexer/backend/TTYSessionInfo.java @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (C) 2017 Kevin Lamonte + * Copyright (C) 2019 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -38,7 +38,11 @@ import java.util.StringTokenizer; * the session information. The username is taken from user.name, language * is taken from user.language, and text window size from 'stty size'. */ -public final class TTYSessionInfo implements SessionInfo { +public class TTYSessionInfo implements SessionInfo { + + // ------------------------------------------------------------------------ + // Variables -------------------------------------------------------------- + // ------------------------------------------------------------------------ /** * User name. @@ -65,6 +69,24 @@ public final class TTYSessionInfo implements SessionInfo { */ private long lastQueryWindowTime; + // ------------------------------------------------------------------------ + // Constructors ----------------------------------------------------------- + // ------------------------------------------------------------------------ + + /** + * Public constructor. + */ + public TTYSessionInfo() { + // Populate lang and user from the environment + username = System.getProperty("user.name"); + language = System.getProperty("user.language"); + queryWindowSize(); + } + + // ------------------------------------------------------------------------ + // SessionInfo ------------------------------------------------------------ + // ------------------------------------------------------------------------ + /** * Username getter. * @@ -101,54 +123,6 @@ public final class TTYSessionInfo implements SessionInfo { this.language = language; } - /** - * Call 'stty size' to obtain the tty window size. windowWidth and - * windowHeight are set automatically. - */ - private void sttyWindowSize() { - String [] cmd = { - "/bin/sh", "-c", "stty size < /dev/tty" - }; - try { - Process process = Runtime.getRuntime().exec(cmd); - BufferedReader in = new BufferedReader( - new InputStreamReader(process.getInputStream(), "UTF-8")); - String line = in.readLine(); - if ((line != null) && (line.length() > 0)) { - StringTokenizer tokenizer = new StringTokenizer(line); - 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( - new InputStreamReader(process.getErrorStream(), - "UTF-8")); - line = err.readLine(); - if ((line != null) && (line.length() > 0)) { - System.err.println("Error output from stty: " + line); - } - try { - process.waitFor(); - break; - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - int rc = process.exitValue(); - if (rc != 0) { - System.err.println("stty returned error code: " + rc); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - /** * Text window width getter. * @@ -183,8 +157,9 @@ public final class TTYSessionInfo implements SessionInfo { lastQueryWindowTime = System.currentTimeMillis(); } else { long nowTime = System.currentTimeMillis(); - if (nowTime - lastQueryWindowTime < 3000) { - // Don't re-spawn stty, it's been too soon. + if (nowTime - lastQueryWindowTime < 1000) { + // Don't re-spawn stty if it hasn't been a full second since + // the last time. return; } } @@ -198,13 +173,56 @@ public final class TTYSessionInfo implements SessionInfo { } } + // ------------------------------------------------------------------------ + // TTYSessionInfo --------------------------------------------------------- + // ------------------------------------------------------------------------ + /** - * Public constructor. + * Call 'stty size' to obtain the tty window size. windowWidth and + * windowHeight are set automatically. */ - public TTYSessionInfo() { - // Populate lang and user from the environment - username = System.getProperty("user.name"); - language = System.getProperty("user.language"); - queryWindowSize(); + private void sttyWindowSize() { + String [] cmd = { + "/bin/sh", "-c", "stty size < /dev/tty" + }; + try { + Process process = Runtime.getRuntime().exec(cmd); + BufferedReader in = new BufferedReader( + new InputStreamReader(process.getInputStream(), "UTF-8")); + String line = in.readLine(); + if ((line != null) && (line.length() > 0)) { + StringTokenizer tokenizer = new StringTokenizer(line); + 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( + new InputStreamReader(process.getErrorStream(), + "UTF-8")); + line = err.readLine(); + if ((line != null) && (line.length() > 0)) { + System.err.println("Error output from stty: " + line); + } + try { + process.waitFor(); + break; + } catch (InterruptedException e) { + // SQUASH + } + } + int rc = process.exitValue(); + if (rc != 0) { + System.err.println("stty returned error code: " + rc); + } + } catch (IOException e) { + e.printStackTrace(); + } } + }