From 30e46ba8227dcabe20c2fbc49460c981dbd0acbe Mon Sep 17 00:00:00 2001 From: Ville Skyttä Date: Nov 25 2010 22:12:25 +0000 Subject: - Use jline in bsh script for command history support. --- diff --git a/bsh-readline.patch b/bsh-readline.patch deleted file mode 100644 index 999c317..0000000 --- a/bsh-readline.patch +++ /dev/null @@ -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 -+ **/ -+public class BshCompleter implements ReadlineCompleter { -+ -+ private NameCompletion completer; -+ -+ /** -+ * Constructs a ReadlineCompleter out of a -+ * NameCompleter 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 -+ } -+ } -+ -+} diff --git a/bsh.spec b/bsh.spec index adcac13..2d5312a 100644 --- a/bsh.spec +++ b/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ä - 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 - 0:1.3.0-16 - Fix pom filenames (Resolves rhbz#655791)