Thanks for bringing this to the topics!
I will be using processing command-line in the future.
This is my first pass at this and “green” background from command-line launch and “red” from PDE launch:
//https://forum.processing.org/two/discussion/23999/detect-command-line-invocation-of-a-sketch
// 2019-08-25
// Modified to check for external argument only!
/**
* CommandLineDetect
* 2017-09-21 Jeremy Douglass - Processing 3.3.6
* Was a sketch run from PDE, or from the command line?
* If from the command line, what are its arguments and their values?
*
* Invoke it:
* 1. from the command line above the sketch folder, with no arguments:
* processing-java --sketch=`pwd`/CommandLineDetect --run
* 2. ...or with arguments:
* processing-java --sketch=`pwd`/CommandLineDetect --run foo bar=baz lorem="ipsum dolor sit amet, consectetur adipiscing elit" etc
* 3. or form PDE
*
* The sketch relies on the --external flag to detect a PDE launch, as per:
* - processing.github.io/processing-javadocs/core/processing/core/PApplet.html#main-java.lang.String:A-
*
* The command line passes in a String[] of args. If you wish to arguments of the:
* - form foo=bar
* - lorem="ipsum dolor"
*
* Related forum discussions:
* - forum.processing.org/two/discussion/23999/detect-command-line-invocation-of-a-sketch
* - forum.processing.org/two/discussion/23924/handling-command-line-arguments-in-a-sketch
* - forum.processing.org/two/discussion/6457/how-to-use-arguments-with-an-application-built-with-processing
*/
// Some editing by GLV. See original (above) for the complete version.
boolean PDE;
StringDict argDict = new StringDict();
color setBack = 0;
String str1;
void setup()
{
// Local command-line arguments for testing:
// String [] args = {"external", "foo", "bar=baz", "lorem=ipsum dolor sit amet, consectetur adipiscing elit", "etc"};
println(args == null ? "null" : args);
if (args == null)
str1 = "internal";
else
str1 = args[0];
if (str1.equals("external"))
{
PDE=true;
setBack = color(0, 255, 0);
}
else
{
PDE=false;
setBack = color(255, 0, 0);
}
// load command line arguments, load them
if (args != null)
{
for (String arg : args)
{
String[] entry = split(arg, "=");
if (entry.length == 1)
{
argDict.set(entry[0], "");
}
if (entry.length == 2)
{
argDict.set(entry[0], entry[1]);
}
}
}
// set default if specific arg not present
if (!argDict.hasKey("xyzzy")) {
println("Setting default for xyzzy");
// ...do something
}
// demonstrate using arguments
for (String arg : argDict.keyArray()) {
switch(arg) {
case "external":
//arg external
println("mode:", arg);
break;
//case "foo":
// // key only arg
// println("mode:", arg);
// // ...do something
// break;
case "bar":
// key=value arg
println("Setting", arg, "=", argDict.get(arg));
// ...do something
break;
case "lorem":
// parsed value
String parsed = join(sort(argDict.get(arg).split(" ")), " ");
println("Sorting", arg, "=", parsed);
// ...do something
break;
}
}
//exit();
}
void draw()
{
background(setBack);
}