This is the mail archive of the
frysk@sourceware.org
mailing list for the frysk project.
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() {