Hi @Gunnar
I would like to request a feature that would solve a real limitation that I encounter many times.
The problem:
Right now, the only way to run something external from a script is io.launch() (in JS) or the “launch” action (in midiScript). Both options actually opens/launches a target via the OS, which brings another application to the foreground and steals focus from the app I’m working in.
I would like that Cubase keeps window focus when a script calls the following actions:
- launch a plain command-line binary (launch opens a Terminal window)
- launch a URL command , like btt:// URL (launch activates BetterTouchTool)
In every case Cubase loses focus, which is disruptive during a session. So io.launch() / launch action are not approppiate for “fire-and-forget” background commands.
The request:
Could you add a complementary method like io.run() in JS, and “run” action in midiScript, that executes a command silently — i.e. runs an executable/command directly (like a plain exec / shell invocation) WITHOUT opening or activating any application, and without bringing any window to the foreground?
The key difference from launch:
- launch action / io.launch(path, parameters) → opens/activates a target via the OS (current behavior, keep as is).
- run action / io.run(command, parameters) → executes a command in the background, no app activation, no focus change, no Terminal window.
Why this matters:
This would make it possible to communicate with other tools (for example BetterTouchTool’s CLI, or any shell command) from a background script without changing the app focus (keeping focus on the DAW).
It would turn the plugin into a capable hub for “silent” automations, without the side effect of taking focus away from the user’s current app.
Optional nice-to-haves (only if easy):
- A way to capture the command’s stdout return value (string), so the script can react to the result.
- A flag to choose between blocking and non-blocking execution.
Thanks for considering this!