Solution: Launching External Apps From Macros
Submitted by Wednesday, 1 April, 2009 - 00:25
on
Hi guys.
When i first moved to jEdit, I was extremely frustrated by the way Java launches external apps (via Runtime.getRuntime().exec()). It decided internally whether or not you should see a console window for a console program and other stupid stuff like that. There are solutions all over the place using cmd /c and cmd /k to remedy this problem, but that all gets very messy when you're dealing with batch files.
To solve this problem, I downloaded ShellExecute by OptimumX (http://www.optimumx.com/), which basically just uses ShellExecuteEx() to launch the app specified on the command line. When launching apps via this utility, they behave as you would expect them to.
To use it, put it in your jre bin directory, or somewhere in your path environment variable, and use it in your macro like so:
path = buffer.getPath().substring(0, buffer.getPath().lastIndexOf("\\"));
Process proc = Runtime.getRuntime().exec("ShellExecute.exe /F:cmd.exe", null, new File(path));
That example macro will open a command prompt in the directory containing the document of the current buffer.
Hope this helps some people out.
Ehtyar.
When i first moved to jEdit, I was extremely frustrated by the way Java launches external apps (via Runtime.getRuntime().exec()). It decided internally whether or not you should see a console window for a console program and other stupid stuff like that. There are solutions all over the place using cmd /c and cmd /k to remedy this problem, but that all gets very messy when you're dealing with batch files.
To solve this problem, I downloaded ShellExecute by OptimumX (http://www.optimumx.com/), which basically just uses ShellExecuteEx() to launch the app specified on the command line. When launching apps via this utility, they behave as you would expect them to.
To use it, put it in your jre bin directory, or somewhere in your path environment variable, and use it in your macro like so:
path = buffer.getPath().substring(0, buffer.getPath().lastIndexOf("\\"));
Process proc = Runtime.getRuntime().exec("ShellExecute.exe /F:cmd.exe", null, new File(path));
That example macro will open a command prompt in the directory containing the document of the current buffer.
Hope this helps some people out.
Ehtyar.