This is the mail archive of the frysk@sourceware.org mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Patch: word-wrapping for 'help' output


Mark> The CLI doesn't have the PtyTerminal (created in fhpd.java).
Mark> It might make sense to pass that to the CLI so it can use
Mark> getTerminalWidth() here when constructing the WordWrapWriter.

Here's a patch to do it -- but *don't* check this in.

getTerminalWidth seems to return something bogus, because everything
started wrapping at column 20.  I didn't look into this any more
deeply.

Tom

b/frysk-core/frysk/bindir/ChangeLog:
2008-03-01  Tom Tromey  <tromey@redhat.com>

	* fhpd.java (CommandLine): Pass terminal to CLI constructor.

b/frysk-core/frysk/hpd/ChangeLog:
2008-03-01  Tom Tromey  <tromey@redhat.com>

	* CLI.java (terminal): New field.
	(CLI): Add 'terminal' argument.
	(CLI(String,ObservingTerminal,Writer)): New constructor.
	(getWordWrapWriter): Compute number of columns.

diff --git a/frysk-core/frysk/bindir/fhpd.java b/frysk-core/frysk/bindir/fhpd.java
index efc8520..69be24c 100644
--- a/frysk-core/frysk/bindir/fhpd.java
+++ b/frysk-core/frysk/bindir/fhpd.java
@@ -106,7 +106,7 @@ public class fhpd {
                 FlowControlWriter writer = new FlowControlWriter(printWriter);
                 terminal.getObservable()
                     .addObserver(new TerminalObserver(writer));
-                cli = new CLI("(fhpd) ", writer);
+                cli = new CLI("(fhpd) ", terminal, writer);
 		reader = new ConsoleReader
                     (new FileInputStream(java.io.FileDescriptor.in),
 		     printWriter,
diff --git a/frysk-core/frysk/hpd/CLI.java b/frysk-core/frysk/hpd/CLI.java
index f8f16c8..08e8ed6 100644
--- a/frysk-core/frysk/hpd/CLI.java
+++ b/frysk-core/frysk/hpd/CLI.java
@@ -61,6 +61,7 @@ import frysk.rt.ProcTaskIDManager;
 import frysk.stepping.SteppingEngine;
 import frysk.stepping.TaskStepEngine;
 import frysk.util.CountDownLatch;
+import frysk.util.ObservingTerminal;
 import frysk.util.WordWrapWriter;
 import frysk.expr.Expression;
 import frysk.expr.ScratchSymTab;
@@ -186,10 +187,17 @@ public class CLI {
      * Return a WordWrapWriter which wraps this CLI's output writer.
      */
     WordWrapWriter getWordWrapWriter() {
-	return new WordWrapWriter(outWriter);
+	// If there is no terminal, use the standard.
+	int cols = terminal == null ? 80 : terminal.getTerminalWidth();
+	// Subtract a bit so that the words don't run right up to the
+	// terminal's edge.  But, if the user makes a very silly
+	// terminal size, just pick something a bit less weird.
+	cols = Math.max(20, cols - 8);
+	return new WordWrapWriter(outWriter, cols);
     }
 
     final PrintWriter outWriter;
+    final ObservingTerminal terminal;
     private Preprocessor prepro;
     private String prompt; // string to represent prompt, will be moved
     private final Command topLevelCommand = new TopLevelCommand();
@@ -226,11 +234,13 @@ public class CLI {
     /**
      * Constructor
      * @param prompt String initially to be used as the prompt
+     * @param terminal the terminal to which we are connected
      * @param out PrintWriter for output
      * @param steppingEngine existing SteppingEngine
      */
-    public CLI(String prompt, Writer outWriter, SteppingEngine steppingEngine) {
+    public CLI(String prompt, ObservingTerminal terminal, Writer outWriter, SteppingEngine steppingEngine) {
         this.prompt = prompt;
+	this.terminal = terminal;
         this.outWriter = new PrintWriter(outWriter);
         this.steppingEngine = steppingEngine;
         idManager = ProcTaskIDManager.getSingleton();
@@ -262,10 +272,20 @@ public class CLI {
     /**
      * Constructor that creates a new steppingEngine
      * @param prompt String initially to be used as the prompt
+     * @param terminal the terminal to which we are connected
+     * @param out PrintWriter for output.
+     */
+    public CLI(String prompt, ObservingTerminal terminal, Writer outWriter) {
+        this(prompt, terminal, outWriter, new SteppingEngine());
+    }
+   
+    /**
+     * Constructor that creates a new steppingEngine
+     * @param prompt String initially to be used as the prompt
      * @param out PrintWriter for output.
      */
     public CLI(String prompt, Writer outWriter) {
-        this(prompt, outWriter, new SteppingEngine());
+        this(prompt, null, outWriter, new SteppingEngine());
     }
    
     public String getPrompt() {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]