Fix posix
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1736012 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java
index f1d2581..974b43f 100644
--- a/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java
+++ b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Posix.java
@@ -64,14 +64,15 @@
import java.util.stream.Stream;
import org.apache.felix.gogo.jline.Shell.Context;
-import org.apache.felix.gogo.runtime.Pipe;
import org.apache.felix.service.command.CommandProcessor;
import org.apache.felix.service.command.CommandSession;
import org.apache.sshd.common.util.OsUtils;
import org.jline.builtins.Commands;
-import org.jline.builtins.Less.Source;
-import org.jline.builtins.Less.StdInSource;
-import org.jline.builtins.Less.URLSource;
+import org.jline.builtins.Less;
+import org.jline.builtins.Source;
+import org.jline.builtins.Source.PathSource;
+import org.jline.builtins.Source.StdInSource;
+import org.jline.builtins.Nano;
import org.jline.builtins.Options;
import org.jline.terminal.Attributes;
import org.jline.terminal.Terminal;
@@ -114,13 +115,13 @@
run(session, argv);
} catch (IllegalArgumentException e) {
System.err.println(e.getMessage());
- Pipe.error(2);
+ session.error(2);
} catch (HelpException e) {
System.err.println(e.getMessage());
- Pipe.error(0);
+ session.error(0);
} catch (Exception e) {
System.err.println(argv[0] + ": " + e.getMessage());
- Pipe.error(1);
+ session.error(1);
}
}
@@ -301,12 +302,15 @@
}
protected void nano(final CommandSession session, String[] argv) throws Exception {
- Commands.nano(
- Shell.getTerminal(session),
- System.out,
- System.err,
- session.currentDir(),
- Arrays.copyOfRange(argv, 1, argv.length));
+ final String[] usage = {
+ "nano - edit files",
+ "Usage: nano [FILES]",
+ " -? --help Show help",
+ };
+ Options opt = parseOptions(session, usage, argv);
+ Nano edit = new Nano(Shell.getTerminal(session), session.currentDir());
+ edit.open(opt.args());
+ edit.run();
}
protected void watch(final CommandSession session, String[] argv) throws Exception {
@@ -366,13 +370,56 @@
}
}
- protected void less(CommandSession session, String[] argv) throws IOException, InterruptedException {
- Commands.less(
- Shell.getTerminal(session),
- System.out,
- System.err,
- session.currentDir(),
- Arrays.copyOfRange(argv, 1, argv.length));
+ protected void less(CommandSession session, String[] argv) throws Exception {
+ final String[] usage = {
+ "less - file pager",
+ "Usage: less [OPTIONS] [FILES]",
+ " -? --help Show help",
+ " -e --quit-at-eof Exit on second EOF",
+ " -E --QUIT-AT-EOF Exit on EOF",
+ " -q --quiet --silent Silent mode",
+ " -Q --QUIET --SILENT Completely silent",
+ " -S --chop-long-lines Do not fold long lines",
+ " -i --ignore-case Search ignores lowercase case",
+ " -I --IGNORE-CASE Search ignores all case",
+ " -x --tabs Set tab stops",
+ " -N --LINE-NUMBERS Display line number for each line"
+ };
+ Options opt = parseOptions(session, usage, argv);
+ List<Source> sources = new ArrayList<>();
+ if (opt.args().isEmpty()) {
+ opt.args().add("-");
+ }
+ for (String arg : opt.args()) {
+ if ("-".equals(arg)) {
+ sources.add(new StdInSource());
+ } else {
+ sources.add(new PathSource(session.currentDir().resolve(arg), arg));
+ }
+ }
+
+ if (!session.isTty(1)) {
+ for (Source source : sources) {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(source.read()))) {
+ cat(reader, opt.isSet("LINE-NUMBERS"));
+ }
+ }
+ return;
+ }
+
+ Less less = new Less(Shell.getTerminal(session));
+ less.quitAtFirstEof = opt.isSet("QUIT-AT-EOF");
+ less.quitAtSecondEof = opt.isSet("quit-at-eof");
+ less.quiet = opt.isSet("quiet");
+ less.veryQuiet = opt.isSet("QUIET");
+ less.chopLongLines = opt.isSet("chop-long-lines");
+ less.ignoreCaseAlways = opt.isSet("IGNORE-CASE");
+ less.ignoreCaseCond = opt.isSet("ignore-case");
+ if (opt.isSet("tabs")) {
+ less.tabs = opt.getNumber("tabs");
+ }
+ less.printLineNumbers = opt.isSet("LINE-NUMBERS");
+ less.run(sources);
}
protected void sort(CommandSession session, String[] argv) throws Exception {
@@ -873,7 +920,7 @@
if ("-".equals(arg)) {
sources.add(new StdInSource());
} else {
- sources.add(new URLSource(session.currentDir().resolve(arg).toUri().toURL(), arg));
+ sources.add(new PathSource(session.currentDir().resolve(arg), arg));
}
}
boolean match = false;
@@ -957,7 +1004,7 @@
match |= nb > 0;
}
}
- Pipe.error(match ? 0 : 1);
+ session.error(match ? 0 : 1);
}
protected void sleep(CommandSession session, String[] argv) throws Exception {