Is it possible to open a file with processing sketch? (command line)

I would like to create something like a text editor, and allow the user to open text files with the text editor, rather than having to open the editor first. Is this possible? I’ve tried to achieve this before but I haven’t had any luck and I haven’t been able to find any information on this issue.

You can use selectInput() to open a platform-specific file chooser dialog to select a file for input. After the selection is made, the selected File will be passed to the ‘callback’ function

a crude text editor might be achieved by loading the file’s strings with loadStrings() and then it’s up to you to write the associated text editor

You could also use a BufferedReader to read line by line the file

1 Like

Hello,

Exporting applications:

Related:

:)

Sorry, I worded this pretty badly initially.
I’ve made a text editor already, I know how to load and save files, within the sketch/application.
What I want to be able to do is set my sketch as the default program for a file to open in. Like on windows for example, the default program for a text file is notepad. I would like to know if it’s possible to change that to my processing sketch so it can be used much easier as a text editing application.

in Windows:
You need to export your Sketch as an exe

Then in Windows right click a txt-file, Choose Open With…

  • choose your Sketches exe
  • and check Option Box use this always

How would I configure my processing sketch to recognise that I have opened it with the context of the selected document though? I’ve managed to set it as a default before but I haven’t found a way to actually get it to open a document that way.

When you selected the Option Box “always use this app”
Windows should always use your Sketch to open ANY txt file.

It’s a matter of Windows not of your Sketch.

example from the forum


//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;

boolean lorem = false; 

void setup() 
{

  size (770, 770); 

  // 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);
      lorem=true; 
      // ...do something
      break;
    }
  }
  //exit();
}

void draw()
{
  background(setBack);
  if (lorem)
    text("lorem", 20, 20);
}

use batch file (name c1.bat) to test

content

start sketch_210104b.exe "lorem=ipsum dolor sit amet, consectetur adipiscing elit"

see also Can't detect PDE vs command line, PDE no longer passing --external

Does it work now?

Chrisir

new version

//https://forum.processing.org/two/discussion/23999/detect-command-line-invocation-of-a-sketch

/**
 * CommandLineDetect
 * 2017-09-21 Jeremy Douglass - Processing 3.3.6 
 * 
 * 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 & Chrisir.  See original (above) for the complete version.

color setBack = 0;
String str1;


void setup() {

  size (770, 770); 

  // Local command-line arguments for testing:  
  // String [] args = {"external", "foo", "bar=baz", "lorem=ipsum dolor sit amet, consectetur adipiscing elit", "etc"};

  if (args == null) {
    println("args is null"); 
    str1 = "no args / internal";
  } else {
    printArray(args); 
    str1 = args[0];
  }//else
}//func 

void draw() {
  background(setBack);
  text( str1, 20, 20 );
}
//

keywords: command line, cmd, cmdline, args, arguments, starting, start of Sketch, environment

sorry for the incredibly late reply, I had moved on to another project and forgot about this thread. But this works! and it is exactly what I needed, thank you so much. :slight_smile:

1 Like