Skip to content

Commit 00d5b47

Browse files
committed
add properties support
1 parent 93d31ae commit 00d5b47

File tree

21 files changed

+563
-57
lines changed

21 files changed

+563
-57
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def pomConfig = {
5252
}
5353
}
5454

55-
ext.groovyVersion = '2.4.7'
55+
ext.groovyVersion = '2.4.9'
5656

5757
allprojects {
5858
group = 'org.beryx'

gradle.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
textIoVersionMajor = 1
2-
textIoVersionMinor = 10
1+
textIoVersionMajor = 2
2+
textIoVersionMinor = 0
33
textIoVersionPatch = 0
44
# textIoVersionLabel = rc-1
55
textIoReleaseBuild = false

gradle/wrapper/gradle-wrapper.jar

570 Bytes
Binary file not shown.
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Mon Apr 25 12:16:33 CEST 2016
1+
#Thu Mar 02 10:02:15 CET 2017
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-3.4-all.zip

gradlew

+40-28
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,35 @@
1-
#!/usr/bin/env bash
1+
#!/usr/bin/env sh
22

33
##############################################################################
44
##
55
## Gradle start up script for UN*X
66
##
77
##############################################################################
88

9-
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10-
DEFAULT_JVM_OPTS=""
9+
# Attempt to set APP_HOME
10+
# Resolve links: $0 may be a link
11+
PRG="$0"
12+
# Need this for relative symlinks.
13+
while [ -h "$PRG" ] ; do
14+
ls=`ls -ld "$PRG"`
15+
link=`expr "$ls" : '.*-> \(.*\)$'`
16+
if expr "$link" : '/.*' > /dev/null; then
17+
PRG="$link"
18+
else
19+
PRG=`dirname "$PRG"`"/$link"
20+
fi
21+
done
22+
SAVED="`pwd`"
23+
cd "`dirname \"$PRG\"`/" >/dev/null
24+
APP_HOME="`pwd -P`"
25+
cd "$SAVED" >/dev/null
1126

1227
APP_NAME="Gradle"
1328
APP_BASE_NAME=`basename "$0"`
1429

30+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31+
DEFAULT_JVM_OPTS=""
32+
1533
# Use the maximum available, or set MAX_FD != -1 to use that value.
1634
MAX_FD="maximum"
1735

@@ -30,6 +48,7 @@ die ( ) {
3048
cygwin=false
3149
msys=false
3250
darwin=false
51+
nonstop=false
3352
case "`uname`" in
3453
CYGWIN* )
3554
cygwin=true
@@ -40,26 +59,11 @@ case "`uname`" in
4059
MINGW* )
4160
msys=true
4261
;;
62+
NONSTOP* )
63+
nonstop=true
64+
;;
4365
esac
4466

45-
# Attempt to set APP_HOME
46-
# Resolve links: $0 may be a link
47-
PRG="$0"
48-
# Need this for relative symlinks.
49-
while [ -h "$PRG" ] ; do
50-
ls=`ls -ld "$PRG"`
51-
link=`expr "$ls" : '.*-> \(.*\)$'`
52-
if expr "$link" : '/.*' > /dev/null; then
53-
PRG="$link"
54-
else
55-
PRG=`dirname "$PRG"`"/$link"
56-
fi
57-
done
58-
SAVED="`pwd`"
59-
cd "`dirname \"$PRG\"`/" >/dev/null
60-
APP_HOME="`pwd -P`"
61-
cd "$SAVED" >/dev/null
62-
6367
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
6468

6569
# Determine the Java command to use to start the JVM.
@@ -85,7 +89,7 @@ location of your Java installation."
8589
fi
8690

8791
# Increase the maximum file descriptors if we can.
88-
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
92+
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
8993
MAX_FD_LIMIT=`ulimit -H -n`
9094
if [ $? -eq 0 ] ; then
9195
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -150,11 +154,19 @@ if $cygwin ; then
150154
esac
151155
fi
152156

153-
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154-
function splitJvmOpts() {
155-
JVM_OPTS=("$@")
157+
# Escape application args
158+
save ( ) {
159+
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160+
echo " "
156161
}
157-
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158-
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
162+
APP_ARGS=$(save "$@")
163+
164+
# Collect all arguments for the java command, following the shell quoting and substitution rules
165+
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166+
167+
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168+
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169+
cd "$(dirname "$0")"
170+
fi
159171

160-
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
172+
exec "$JAVACMD" "$@"

gradlew.bat

+3-9
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
@rem Set local scope for the variables with windows NT shell
99
if "%OS%"=="Windows_NT" setlocal
1010

11-
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12-
set DEFAULT_JVM_OPTS=
13-
1411
set DIRNAME=%~dp0
1512
if "%DIRNAME%" == "" set DIRNAME=.
1613
set APP_BASE_NAME=%~n0
1714
set APP_HOME=%DIRNAME%
1815

16+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17+
set DEFAULT_JVM_OPTS=
18+
1919
@rem Find java.exe
2020
if defined JAVA_HOME goto findJavaFromJavaHome
2121

@@ -49,7 +49,6 @@ goto fail
4949
@rem Get command-line arguments, handling Windows variants
5050

5151
if not "%OS%" == "Windows_NT" goto win9xME_args
52-
if "%@eval[2+2]" == "4" goto 4NT_args
5352

5453
:win9xME_args
5554
@rem Slurp the command line arguments.
@@ -60,11 +59,6 @@ set _SKIP=2
6059
if "x%~1" == "x" goto execute
6160

6261
set CMD_LINE_ARGS=%*
63-
goto execute
64-
65-
:4NT_args
66-
@rem Get arguments from the 4NT Shell from JP Software
67-
set CMD_LINE_ARGS=%$
6862

6963
:execute
7064
@rem Setup the command line

text-io-demo/src/main/java/org/beryx/textio/demo/TextIoDemo.java

+1
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ private static TextIO chooseTextIO() {
106106
terminal.printf("\nCannot create a %s%s\n\n", terminalProvider, ((errMsg != null) ? (": " + errMsg) : "."));
107107
continue;
108108
}
109+
chosenTerminal.init();
109110
return new TextIO(chosenTerminal);
110111
}
111112
}

text-io-demo/src/main/resources/public-html/web-demo.html

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
<title>WebTextTerminal Demo</title>
55
<link rel="stylesheet" href="textterm.css">
66
</head>
7-
</head>
87
<body>
98
<h1>WebTextTerminal Demo</h1>
109

text-io-web/src/main/java/org/beryx/textio/web/WebTextTerminal.java

+52-2
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
package org.beryx.textio.web;
1717

1818
import org.apache.commons.lang3.StringEscapeUtils;
19+
import org.beryx.textio.AbstractTextTerminal;
1920
import org.beryx.textio.TextTerminal;
2021
import org.slf4j.Logger;
2122
import org.slf4j.LoggerFactory;
2223

2324
import java.util.Arrays;
25+
import java.util.List;
2426
import java.util.concurrent.Executors;
2527
import java.util.concurrent.TimeUnit;
2628
import java.util.concurrent.locks.Condition;
@@ -32,11 +34,11 @@
3234
import static org.beryx.textio.web.TextTerminalData.Action.*;
3335

3436
/**
35-
* A TextTerminal that allows accessing the application via a browser.
37+
* A {@link TextTerminal} that allows accessing the application via a browser.
3638
* It works only in conjunction with a web server supporting the {@link DataApi} (such as {@link SparkDataServer})
3739
* and a web component that accesses this API (typically via textterm.js).
3840
*/
39-
public class WebTextTerminal implements TextTerminal<WebTextTerminal>, DataApi {
41+
public class WebTextTerminal extends AbstractTextTerminal<WebTextTerminal> implements DataApi {
4042
private static final Logger logger = LoggerFactory.getLogger(WebTextTerminal.class);
4143

4244
public static final long DEFAULT_TIMEOUT_NOT_EMPTY = 5000L;
@@ -77,6 +79,10 @@ public void setTimeoutHasAction(long timeoutHasAction) {
7779
};
7880
private boolean abortRead = true;
7981

82+
public WebTextTerminal() {
83+
addPropertyChangeListener(PROP_USER_INTERRUPT_KEY, (oldKey, newKey) -> setUserInterruptKey(newKey));
84+
}
85+
8086
public WebTextTerminal createCopy() {
8187
WebTextTerminal copy = new WebTextTerminal();
8288
copy.setOnDispose(this.onDispose);
@@ -257,6 +263,50 @@ public void postUserInterrupt(String partialInput) {
257263
postUserInput(partialInput, true);
258264
}
259265

266+
267+
private static class KeyCombination {
268+
final int code;
269+
final boolean ctrl;
270+
final boolean shift;
271+
final boolean alt;
272+
273+
KeyCombination(int code, boolean ctrl, boolean shift, boolean alt) {
274+
this.code = code;
275+
this.ctrl = ctrl;
276+
this.shift = shift;
277+
this.alt = alt;
278+
}
279+
}
280+
281+
private KeyCombination getKeyCombination(String keyStroke) {
282+
if(keyStroke == null) return null;
283+
String[] parts = keyStroke.trim().split("\\s+");
284+
if(parts.length < 2) return null;
285+
String charPart = parts[parts.length - 1];
286+
if(charPart.length() != 1) return null;
287+
char code = Character.toUpperCase(charPart.charAt(0));
288+
if(code < 'A' || code > 'Z')return null;
289+
List<String> modifiers = Arrays.asList("ctrl", "shift", "alt");
290+
int[] modCount = new int[3];
291+
for(int i=0; i < parts.length - 1; i++) {
292+
String part = parts[i].trim().toLowerCase();
293+
int idx = modifiers.indexOf(part);
294+
if(idx < 0) return null;
295+
if(modCount[idx] > 0) return null;
296+
modCount[idx]++;
297+
}
298+
return new KeyCombination(code, (modCount[0] > 0), (modCount[1] > 0), (modCount[2] > 0));
299+
}
300+
301+
public void setUserInterruptKey(String keyStroke) {
302+
KeyCombination kc = getKeyCombination(keyStroke);
303+
if(kc == null) {
304+
logger.warn("Invalid keyStroke: " + keyStroke);
305+
} else {
306+
setUserInterruptKey(kc.code, kc.ctrl, kc.shift, kc.alt);
307+
}
308+
}
309+
260310
public void setUserInterruptKey(int code, boolean ctrl, boolean shift, boolean alt) {
261311
dataLock.lock();
262312
try {

0 commit comments

Comments
 (0)