diff --git a/builtins/pom.xml b/builtins/pom.xml
index e8b619327..670e2da9f 100644
--- a/builtins/pom.xml
+++ b/builtins/pom.xml
@@ -33,7 +33,7 @@
org.jline
- jline-script
+ jline-groovy
diff --git a/builtins/src/main/java/org/jline/builtins/ScriptCommands.java b/builtins/src/main/java/org/jline/builtins/ConsoleCommands.java
similarity index 67%
rename from builtins/src/main/java/org/jline/builtins/ScriptCommands.java
rename to builtins/src/main/java/org/jline/builtins/ConsoleCommands.java
index 5b9b8e847..f5413da37 100644
--- a/builtins/src/main/java/org/jline/builtins/ScriptCommands.java
+++ b/builtins/src/main/java/org/jline/builtins/ConsoleCommands.java
@@ -1,42 +1,49 @@
package org.jline.builtins;
+import java.io.File;
import java.nio.file.Path;
import java.util.*;
+import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.jline.builtins.Builtins;
import org.jline.builtins.Builtins.Command;
+import org.jline.builtins.Builtins.CommandInput;
import org.jline.builtins.Builtins.CommandMethods;
+import org.jline.builtins.Completers.SystemCompleter;
import org.jline.reader.Completer;
import org.jline.reader.ConfigurationPath;
import org.jline.reader.LineReader;
import org.jline.reader.Widget;
import org.jline.reader.impl.completer.NullCompleter;
-import org.jline.script.JLineEngine;
-
-public class ScriptCommands implements CommandRegistry {
- public enum Command {SET
+import org.jline.reader.ScriptEngine;
+
+public class ConsoleCommands implements CommandRegistry {
+ public enum Command {SHOW
, DEL
, ENGINES};
- private final JLineEngine engine;
+ private final ScriptEngine engine;
private Map commandName = new HashMap<>();
private Map nameCommand = new HashMap<>();
private Map aliasCommand = new HashMap<>();
private final Map commandExecute = new HashMap<>();
private Map> commandInfo = new HashMap<>();
private Exception exception;
+ private Consumer execute;
- public ScriptCommands(JLineEngine engine) {
+ public ConsoleCommands(ScriptEngine engine) {
this.engine = engine;
+// this.commandExecute = execute;
Set cmds = new HashSet<>(EnumSet.allOf(Command.class));
for (Command c: cmds) {
commandName.put(c, c.name().toLowerCase());
}
doNameCommand();
commandExecute.put(Command.ENGINES, new CommandMethods(this::engines, this::defaultCompleter));
- commandExecute.put(Command.SET, new CommandMethods(this::set, this::defaultCompleter));
+ commandExecute.put(Command.DEL, new CommandMethods(this::del, this::defaultCompleter));
+ commandExecute.put(Command.SHOW, new CommandMethods(this::show, this::defaultCompleter));
}
public Set commandNames() {
@@ -98,15 +105,35 @@ public List commandInfo(String command) {
}
public Completers.SystemCompleter compileCompleters() {
- return null;
+ SystemCompleter out = new SystemCompleter();
+ for (Map.Entry entry: commandName.entrySet()) {
+ out.add(entry.getValue(), commandExecute.get(entry.getKey()).compileCompleter().apply(entry.getValue()));
+ }
+ out.addAliases(aliasCommand);
+ return out;
}
public Widgets.CmdDesc commandDescription(String command) {
return null;
}
- public Object execute(String statement) throws Exception {
- return engine.execute(statement);
+ public Object execute(String cmd, String[] args, String statement) throws Exception {
+ Object out = null;
+ if (new File(cmd).exists()) {
+ File file = new File(cmd);
+ String name = file.getName();
+ String ext = name.contains(".") ? name.substring(name.lastIndexOf(".") + 1) : "";
+ if(engine.getExtensions().contains(ext)) {
+ out = engine.execute(file, args);
+ } else {
+ throw new IllegalArgumentException("Command not found: " + cmd);
+ }
+// execute.accept(statement);
+
+ } else {
+ out = engine.execute(statement);
+ }
+ return out;
}
public Object execute(String command, String[] args) throws Exception {
@@ -119,15 +146,19 @@ public Object execute(String command, String[] args) throws Exception {
}
public Object engines(Builtins.CommandInput input) {
- return JLineEngine.listEngines();
+ return ScriptEngine.listEngines();
}
- public Object set(Builtins.CommandInput input) {
+ public Object show(Builtins.CommandInput input) {
return engine.get();
}
+ public Object del(Builtins.CommandInput input) {
+ engine.del(input.args());
+ return null;
+ }
+
private List defaultCompleter(String command) {
return Arrays.asList(NullCompleter.INSTANCE);
}
-
-}
+}
\ No newline at end of file
diff --git a/builtins/src/test/java/org/jline/example/Example.java b/builtins/src/test/java/org/jline/example/Example.java
index 9bd7c8ae6..4fcbce3fc 100644
--- a/builtins/src/test/java/org/jline/example/Example.java
+++ b/builtins/src/test/java/org/jline/example/Example.java
@@ -30,8 +30,8 @@
import org.jline.builtins.Completers;
import org.jline.builtins.Completers.SystemCompleter;
import org.jline.builtins.Completers.TreeCompleter;
-import org.jline.builtins.Options.HelpException;
-import org.jline.builtins.ScriptCommands;
+import org.jline.builtins.Options;
+import org.jline.builtins.ConsoleCommands;
import org.jline.builtins.Widgets.ArgDesc;
import org.jline.builtins.Widgets.AutopairWidgets;
import org.jline.builtins.Widgets.AutosuggestionWidgets;
@@ -39,7 +39,7 @@
import org.jline.builtins.Widgets.CmdLine;
import org.jline.builtins.Widgets.TailTipWidgets;
import org.jline.builtins.Widgets.TailTipWidgets.TipType;
-import org.jline.script.impl.Groovy;
+import org.jline.groovy.Engine;
import org.jline.keymap.KeyMap;
import org.jline.reader.*;
import org.jline.reader.LineReader.Option;
@@ -643,12 +643,12 @@ public void complete(LineReader reader, ParsedLine line, List candida
builtins.alias("zle", "widget");
builtins.alias("bindkey", "keymap");
ExampleCommands exampleCommands = new ExampleCommands();
- ScriptCommands scriptCommands = new ScriptCommands(new Groovy());
- MasterRegistry masterRegistry = new MasterRegistry(builtins, exampleCommands);
+ ConsoleCommands consoleCommands = new ConsoleCommands(new Engine());
+ MasterRegistry masterRegistry = new MasterRegistry(builtins, consoleCommands, exampleCommands);
//
// Command completers
//
- AggregateCompleter finalCompleter = new AggregateCompleter(CommandRegistry.compileCompleters(builtins, exampleCommands)
+ AggregateCompleter finalCompleter = new AggregateCompleter(CommandRegistry.compileCompleters(builtins, consoleCommands, exampleCommands)
, completer != null ? completer : NullCompleter.INSTANCE);
//
// Terminal & LineReader
@@ -747,6 +747,7 @@ public void complete(LineReader reader, ParsedLine line, List candida
if (line.equalsIgnoreCase("quit") || line.equalsIgnoreCase("exit")) {
break;
}
+
ParsedLine pl = reader.getParser().parse(line, 0);
String[] argv = pl.words().subList(1, pl.words().size()).toArray(new String[0]);
String cmd = Parser.getCommand(pl.word());
@@ -760,18 +761,20 @@ else if (builtins.hasCommand(cmd)) {
else if (exampleCommands.hasCommand(cmd)) {
exampleCommands.execute(cmd, argv);
}
- else if (scriptCommands.hasCommand(cmd)) {
- result = scriptCommands.execute(cmd, argv);
+ else if (consoleCommands.hasCommand(cmd)) {
+ result = consoleCommands.execute(cmd, argv);
}
else {
- result = scriptCommands.execute(line);
+ result = consoleCommands.execute(cmd, argv, line);
}
if (result != null) {
System.out.println(result);
}
+
+
}
- catch (HelpException e) {
- HelpException.highlight(e.getMessage(), HelpException.defaultStyle()).print(terminal);
+ catch (Options.HelpException e) {
+ Options.HelpException.highlight(e.getMessage(), Options.HelpException.defaultStyle()).print(terminal);
}
catch (IllegalArgumentException|FileNotFoundException e) {
System.out.println(e.getMessage());
diff --git a/script/pom.xml b/groovy/pom.xml
similarity index 90%
rename from script/pom.xml
rename to groovy/pom.xml
index d1084d20d..51b8da0ba 100644
--- a/script/pom.xml
+++ b/groovy/pom.xml
@@ -10,15 +10,19 @@
3.13.3-SNAPSHOT
org.jline
- jline-script
+ jline-groovy
3.13.3-SNAPSHOT
- jline-script
+ JLine Groovy
http://maven.apache.org
UTF-8
2.5.8
+
+ org.jline
+ jline-reader
+
org.codehaus.groovy
groovy-all
diff --git a/script/src/main/java/org/jline/script/impl/Groovy.java b/groovy/src/main/java/org/jline/groovy/Engine.java
similarity index 82%
rename from script/src/main/java/org/jline/script/impl/Groovy.java
rename to groovy/src/main/java/org/jline/groovy/Engine.java
index fae8302a9..395bb797a 100644
--- a/script/src/main/java/org/jline/script/impl/Groovy.java
+++ b/groovy/src/main/java/org/jline/groovy/Engine.java
@@ -1,22 +1,20 @@
-package org.jline.script.impl;
+package org.jline.groovy;
import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
-import org.jline.script.JLineEngine;
+import org.jline.reader.ScriptEngine;
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import groovy.lang.Script;
-public class Groovy implements JLineEngine {
+public class Engine implements ScriptEngine {
private GroovyShell shell;
private Binding sharedData;
private Map imports = new HashMap();
- public Groovy() {
+ public Engine() {
this.sharedData = new Binding();
shell = new GroovyShell(sharedData);
}
@@ -37,7 +35,8 @@ public Map get() {
}
@Override
- public Object execute(File script) throws Exception {
+ public Object execute(File script, Object[] args) throws Exception {
+ sharedData.setProperty("args", args);
Script s = shell.parse(script);
return s.run();
}
@@ -52,7 +51,7 @@ public Object execute(String statement) throws Exception {
} else if (statement.equals("import")) {
out = new ArrayList<>(imports.keySet());
} else {
- String e="";
+ String e = "";
for (Map.Entry entry : imports.entrySet()) {
e += entry.getValue()+"\n";
}
@@ -67,6 +66,11 @@ public String getEngineName() {
return this.getClass().getSimpleName();
}
+ @Override
+ public List getExtensions() {
+ return Arrays.asList("groovy");
+ }
+
private void del(String var){
if (var==null) {
return;
diff --git a/groovy/src/test/script/hello.groovy b/groovy/src/test/script/hello.groovy
new file mode 100644
index 000000000..19b1de6ff
--- /dev/null
+++ b/groovy/src/test/script/hello.groovy
@@ -0,0 +1,9 @@
+class HelloWorld {
+ static void hello(def who) {
+ println "hello $who!"
+ }
+}
+
+def static main(args){
+ HelloWorld.hello(!args || args.size() == 0 ? 'world' : args[0])
+}
diff --git a/jline/pom.xml b/jline/pom.xml
index c7638213e..08c70479a 100644
--- a/jline/pom.xml
+++ b/jline/pom.xml
@@ -78,6 +78,11 @@
jline-reader
provided
+
+ org.jline
+ jline-groovy
+ provided
+
org.jline
jline-builtins
@@ -145,6 +150,14 @@
false
${project.build.directory}/generated-sources
+
+ org.jline
+ jline-groovy
+ sources
+ jar
+ false
+ ${project.build.directory}/generated-sources
+
org.jline
jline-builtins
@@ -211,6 +224,14 @@
${project.build.directory}/generated-resources
**/*.class
+
+ org.jline
+ jline-groovy
+ jar
+ false
+ ${project.build.directory}/generated-resources
+ **/*.class
+
org.jline
jline-builtins
@@ -294,6 +315,7 @@
**/TTop.java
+ **/groovy/Engine.java
-Xlint:all,-options
@@ -303,6 +325,19 @@
+
+ compile-accept-warn
+
+
+ **/groovy/Engine.java
+
+
+ -Xlint:all,-options
+ -profile
+ compact1
+
+
+
noncompact
diff --git a/pom.xml b/pom.xml
index 189e99c9a..452f9ecda 100644
--- a/pom.xml
+++ b/pom.xml
@@ -168,7 +168,7 @@
org.jline
- jline-script
+ jline-groovy
${project.version}
@@ -505,7 +505,7 @@
terminal-jna
terminal-jansi
reader
- script
+ groovy
builtins
remote-ssh
remote-telnet
diff --git a/script/src/main/java/org/jline/script/JLineEngine.java b/reader/src/main/java/org/jline/reader/ScriptEngine.java
similarity index 58%
rename from script/src/main/java/org/jline/script/JLineEngine.java
rename to reader/src/main/java/org/jline/reader/ScriptEngine.java
index d5d3c054d..330d155c8 100644
--- a/script/src/main/java/org/jline/script/JLineEngine.java
+++ b/reader/src/main/java/org/jline/reader/ScriptEngine.java
@@ -1,4 +1,4 @@
-package org.jline.script;
+package org.jline.reader;
import java.io.File;
import java.util.*;
@@ -6,23 +6,29 @@
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
-public interface JLineEngine {
+public interface ScriptEngine {
- public String getEngineName();
+ String getEngineName();
- public void put(String name, Object value);
+ Collection getExtensions();
- public Object get(String name);
+ void put(String name, Object value);
- public Map get();
+ Object get(String name);
- public void del(String... vars);
+ Map get();
- public Object execute(String statement) throws Exception;
+ void del(String... vars);
- public Object execute(File script) throws Exception;
+ Object execute(String statement) throws Exception;
- public static List