Author: gnodet
Date: Tue Sep 21 17:05:46 2010
New Revision: 999499
URL: http://svn.apache.org/viewvc?rev=999499&view=rev
Log:
[KARAF-218] Add a more pager command
Modified:
karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/MoreAction.java
karaf/trunk/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
karaf/trunk/shell/commands/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
Modified:
karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/MoreAction.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/MoreAction.java?rev=999499&r1=999498&r2=999499&view=diff
==============================================================================
---
karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/MoreAction.java
(original)
+++
karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/MoreAction.java
Tue Sep 21 17:05:46 2010
@@ -16,8 +16,138 @@
*/
package org.apache.karaf.shell.commands;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.PipedInputStream;
+import java.io.Reader;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import jline.Terminal;
+import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
+import org.apache.karaf.shell.console.AbstractAction;
+
+...@command(scope = "shell", name = "more", description = "file pager")
+public class MoreAction extends AbstractAction {
+
+ @Option(name = "--lines", description = "stop after N lines")
+ int lines;
+
+ @Override
+ protected Object doExecute() throws Exception {
+ Terminal term = (Terminal) session.get(".jline.terminal");
+ if (term == null || !isTty(System.out)) {
+ BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ System.out.println(line);
+ }
+ return null;
+ } else {
+ boolean echo = term.getEcho();
+ term.disableEcho();
+ try {
+ if (lines == 0) {
+ lines = term.getTerminalHeight();
+ }
+ LineSplitter reader = new LineSplitter(new BufferedReader(new
InputStreamReader(System.in)), term.getTerminalWidth());
+ int count = 0;
+ int c;
+ do {
+ do {
+ String line;
+ if ((line = reader.readLine()) == null) {
+ return null;
+ }
+ System.out.println(line);
+ } while (++count < lines - 2);
+ c = -1;
+ while (c == -1) {
+ System.out.flush();
+ System.out.print("--More--");
+ System.out.flush();
+ c = term.readVirtualKey(session.getKeyboard());
+ switch (c) {
+ case 'q':
+ case -1:
+ c = 'q';
+ break;
+ case '\r':
+ case '\n':
+ case 14: // Down arrow
+ count--;
+ System.out.print("\r \r");
+ break;
+ case ' ':
+ count = 0;
+ System.out.print("\r \r");
+ break;
+ case 16: // Up arrow
+ // fall through
+ default:
+ c = -1;
+ System.out.print("\r \r");
+ break;
+ }
+ if (c == 'q') {
+ break;
+ }
+ }
+ } while (c != 'q');
+ return null;
+ } finally {
+ if (echo) {
+ term.enableEcho();
+ } else {
+ term.disableEcho();
+ }
+ }
+ }
+ }
+
+ public static class LineSplitter {
+
+ private final BufferedReader reader;
+ private final int width;
+ private final List<String> lines = new LinkedList<String>();
+
+ public LineSplitter(BufferedReader reader, int width) {
+ this.reader = reader;
+ this.width = width;
+ }
+
+ public String readLine() throws IOException {
+ if (lines.isEmpty()) {
+ String str = reader.readLine();
+ if (str == null) {
+ return null;
+ }
+ while (str.length() > width) {
+ lines.add(str.substring(0, width));
+ str = str.substring(width);
+ }
+ lines.add(str);
+ }
+ return lines.remove(0);
+ }
+ }
+
+ protected boolean isTty(OutputStream out) {
+ try {
+ Method mth = out.getClass().getDeclaredMethod("getCurrent");
+ mth.setAccessible(true);
+ Object current = mth.invoke(out);
+ return current == session.getConsole();
+ } catch (Throwable t) {
+ return false;
+ }
+ }
-...@command(scope = "shell", name = "more", description = "")
-public class MoreAction {
}
Modified:
karaf/trunk/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
URL:
http://svn.apache.org/viewvc/karaf/trunk/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands?rev=999499&r1=999498&r2=999499&view=diff
==============================================================================
---
karaf/trunk/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
(original)
+++
karaf/trunk/shell/commands/src/main/resources/META-INF/services/org/apache/karaf/shell/commands
Tue Sep 21 17:05:46 2010
@@ -24,6 +24,7 @@ org.apache.karaf.shell.commands.HistoryA
org.apache.karaf.shell.commands.IfAction
org.apache.karaf.shell.commands.JavaAction
org.apache.karaf.shell.commands.LogoutAction
+org.apache.karaf.shell.commands.MoreAction
org.apache.karaf.shell.commands.NewAction
org.apache.karaf.shell.commands.PrintfAction
org.apache.karaf.shell.commands.SleepAction
Modified:
karaf/trunk/shell/commands/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
URL:
http://svn.apache.org/viewvc/karaf/trunk/shell/commands/src/main/resources/OSGI-INF/blueprint/shell-commands.xml?rev=999499&r1=999498&r2=999499&view=diff
==============================================================================
---
karaf/trunk/shell/commands/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
(original)
+++
karaf/trunk/shell/commands/src/main/resources/OSGI-INF/blueprint/shell-commands.xml
Tue Sep 21 17:05:46 2010
@@ -50,11 +50,9 @@
<command name="shell/java">
<action class="org.apache.karaf.shell.commands.JavaAction"/>
</command>
- <!--
<command name="shell/more">
<action class="org.apache.karaf.shell.commands.MoreAction"/>
</command>
- -->
<command name="shell/new">
<action class="org.apache.karaf.shell.commands.NewAction">
<property name="blueprintConverter" ref="blueprintConverter"/>