- Use jline in bsh script for command history support.
This commit is contained in:
parent
39d249054a
commit
30e46ba822
@ -1,151 +0,0 @@
|
||||
--- BeanShell/src/bsh/Interpreter.java~ 2003-09-03 19:56:58.000000000 -0400
|
||||
+++ BeanShell/src/bsh/Interpreter.java 2004-01-25 09:59:41.730059108 -0500
|
||||
@@ -38,6 +38,13 @@
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
+import bsh.util.BshCompleter;
|
||||
+import bsh.util.NameCompletionTable;
|
||||
+import bsh.classpath.ClassManagerImpl;
|
||||
+import org.gnu.readline.Readline;
|
||||
+import org.gnu.readline.ReadlineLibrary;
|
||||
+import org.gnu.readline.ReadlineReader;
|
||||
+
|
||||
/**
|
||||
The BeanShell script interpreter.
|
||||
|
||||
@@ -394,10 +401,59 @@
|
||||
else
|
||||
src = System.in;
|
||||
|
||||
- Reader in = new CommandLineReader( new InputStreamReader(src));
|
||||
- Interpreter interpreter =
|
||||
- new Interpreter( in, System.out, System.err, true );
|
||||
- interpreter.run();
|
||||
+ Reader in = null;
|
||||
+ boolean usingReadline = false;
|
||||
+ String backingLib = System.getProperty("bsh.console.readlinelib");
|
||||
+ if (backingLib != null) {
|
||||
+ try {
|
||||
+ File history = new File(System.getProperty("user.home") +
|
||||
+ File.separator + ".bsh_history");
|
||||
+ if (!history.exists()) {
|
||||
+ try {
|
||||
+ history.createNewFile();
|
||||
+ } catch(IOException ioe) {
|
||||
+ debug("Unable to create history " + history.getAbsolutePath());
|
||||
+ }
|
||||
+ }
|
||||
+ ReadlineLibrary lib = ReadlineLibrary.byName(backingLib);
|
||||
+ // should I wrap CommandLineReader around it?
|
||||
+ if (history.canWrite() && history.canRead()) {
|
||||
+ in = new ReadlineReader("bsh % ", history,lib);
|
||||
+ } else {
|
||||
+ in = new ReadlineReader("bsh % ",lib);
|
||||
+ debug("Unable to read/write history " + history.getAbsolutePath());
|
||||
+ }
|
||||
+ } catch (IOException ioe) {
|
||||
+ System.err.println("Unable to invoke ReadlineReader " +
|
||||
+ "due to: " + ioe);
|
||||
+ }
|
||||
+ }
|
||||
+ if (in == null)
|
||||
+ in = new CommandLineReader( new InputStreamReader(src));
|
||||
+ else
|
||||
+ usingReadline = true;
|
||||
+ Interpreter interpreter =
|
||||
+ new Interpreter( in, System.out, System.err, true );
|
||||
+ if (usingReadline) {
|
||||
+ NameCompletionTable nct = new NameCompletionTable();
|
||||
+ nct.add(interpreter.getNameSpace());
|
||||
+
|
||||
+ /** ClassManager does a lot of chatting to the stdout,
|
||||
+ * so this has been commented out for the time being
|
||||
+ **/
|
||||
+
|
||||
+// try {
|
||||
+// BshClassManager bcm = BshClassManager.getClassManager();
|
||||
+// if (bcm != null) {
|
||||
+// nct.add(((ClassManagerImpl)bcm).getClassPath());
|
||||
+// }
|
||||
+// } catch(ClassPathException cpe) {
|
||||
+// debug("classpath exception in name compl:" + cpe);
|
||||
+// }
|
||||
+
|
||||
+ Readline.setCompleter(new BshCompleter(nct));
|
||||
+ }
|
||||
+ interpreter.run();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -445,7 +501,7 @@
|
||||
System.err.flush();
|
||||
Thread.yield(); // this helps a little
|
||||
|
||||
- if ( interactive )
|
||||
+ if ( interactive && !(in instanceof ReadlineReader))
|
||||
print( getBshPrompt() );
|
||||
|
||||
eof = Line();
|
||||
@@ -548,10 +604,17 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if ( interactive && exitOnEOF )
|
||||
- System.exit(0);
|
||||
+ if ( interactive && exitOnEOF ) {
|
||||
+ /* should be done for all streams in general, but this
|
||||
+ * ensures that the history for readline is flushed */
|
||||
+ try {
|
||||
+ in.close();
|
||||
+ } catch (IOException ioe) {
|
||||
+ }
|
||||
+
|
||||
+ System.exit(0);
|
||||
}
|
||||
-
|
||||
+ }
|
||||
// begin source and eval
|
||||
|
||||
/**
|
||||
--- /dev/null 2003-10-19 02:52:03.000000000 -0400
|
||||
+++ BeanShell/src/bsh/util/BshCompleter.java 2004-01-25 10:14:10.184458217 -0500
|
||||
@@ -0,0 +1,38 @@
|
||||
+package bsh.util;
|
||||
+
|
||||
+import org.gnu.readline.ReadlineCompleter;
|
||||
+
|
||||
+/**
|
||||
+ * An adapter for org.gnu.readline's ReadlineCompleter interface to map to
|
||||
+ * BeanShell's NameCompleter interface.
|
||||
+ *
|
||||
+ * @see org.gnu.readline.ReadlineReader
|
||||
+ * @version $Revision: 1.1 $
|
||||
+ * @author Shane Celis <shane@terraspring.com>
|
||||
+ **/
|
||||
+public class BshCompleter implements ReadlineCompleter {
|
||||
+
|
||||
+ private NameCompletion completer;
|
||||
+
|
||||
+ /**
|
||||
+ * Constructs a <code>ReadlineCompleter</code> out of a
|
||||
+ * <code>NameCompleter</code> object.
|
||||
+ **/
|
||||
+ public BshCompleter(NameCompletion completer) {
|
||||
+ this.completer = completer;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Returns String of completion if unambiguous, otherwise null
|
||||
+ **/
|
||||
+ public String completer(String text, int state) {
|
||||
+ // Not sure what state is used for in ReadlineCompleter
|
||||
+ String[] completions = completer.completeName(text);
|
||||
+ if (completions.length == 1 && state == 0) {
|
||||
+ return completions[0];
|
||||
+ } else {
|
||||
+ return null; // ambiguous result
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+}
|
19
bsh.spec
19
bsh.spec
@ -102,6 +102,7 @@ Demonstrations and samples for %{name}.
|
||||
Summary: %{name} utilities
|
||||
Group: Development/Tools
|
||||
Requires: %{name} = %{epoch}:%{version}-%{release}
|
||||
Requires: jline
|
||||
Provides: %{name}-desktop = %{epoch}:%{version}-%{release}
|
||||
Obsoletes: %{name}-desktop < 0:1.3.0-17
|
||||
# So that yum will pull this in on base package upgrades from < 0:1.3.0-17
|
||||
@ -221,6 +222,11 @@ install -m 644 dist/bshservlet-wbsh.war $RPM_BUILD_ROOT%{_datadir}/%{name}/webap
|
||||
install -d $RPM_BUILD_ROOT%{_bindir}
|
||||
|
||||
function bsh_script() {
|
||||
local jars=%{name}.jar runclass=
|
||||
if [ $2 = jline.ConsoleRunner ] ; then
|
||||
jars="$jars jline.jar"
|
||||
runclass=bsh.Interpreter
|
||||
fi
|
||||
cat > $RPM_BUILD_ROOT%{_bindir}/$1 << EOF
|
||||
#!/bin/sh
|
||||
#
|
||||
@ -246,13 +252,7 @@ if [ -n "\$BSH_DEBUG" ]; then
|
||||
BASE_FLAGS=-Ddebug=true
|
||||
fi
|
||||
|
||||
BASE_JARS="%{name}.jar"
|
||||
|
||||
#if [ -f /usr/lib/libJavaReadline.so ]; then
|
||||
# BASE_FLAGS="$BASE_FLAGS -Djava.library.path=/usr/lib"
|
||||
# BASE_FLAGS="\$BASE_FLAGS -Dbsh.console.readlinelib=GnuReadline"
|
||||
# BASE_JARS="\$BASE_JARS libreadline-java.jar"
|
||||
#fi
|
||||
BASE_JARS="$jars"
|
||||
|
||||
# Set parameters
|
||||
set_jvm
|
||||
@ -261,11 +261,11 @@ set_flags \$BASE_FLAGS
|
||||
set_options \$BASE_OPTIONS
|
||||
|
||||
# Let's start
|
||||
run "\$@"
|
||||
run $runclass "\$@"
|
||||
EOF
|
||||
}
|
||||
|
||||
bsh_script bsh bsh.Interpreter
|
||||
bsh_script bsh jline.ConsoleRunner
|
||||
bsh_script bsh-desktop bsh.Console
|
||||
|
||||
cat > $RPM_BUILD_ROOT%{_bindir}/%{name}doc << EOF
|
||||
@ -329,6 +329,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
||||
* Thu Nov 25 2010 Ville Skyttä <ville.skytta@iki.fi> - 0:1.3.0-17
|
||||
- Rename -desktop to -utils, move shell scripts and menu entry to it (#417491).
|
||||
- Bring icon cache scriptlets up to date with current guidelines.
|
||||
- Use jline in bsh script for command history support.
|
||||
|
||||
* Thu Nov 25 2010 Stanislav Ochotnicky <sochotnicky@redhat.com> - 0:1.3.0-16
|
||||
- Fix pom filenames (Resolves rhbz#655791)
|
||||
|
Loading…
Reference in New Issue
Block a user