Compare commits
2 Commits
citadel
...
benzea/use
Author | SHA1 | Date | |
---|---|---|---|
|
869f8f480c | ||
|
4e54cbcc60 |
@ -1,7 +1,7 @@
|
||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||
/* exported findUrls, spawn, spawnCommandLine, spawnApp, trySpawnCommandLine,
|
||||
formatTime, formatTimeSpan, createTimeLabel, insertSorted,
|
||||
ensureActorVisibleInScrollView, wiggle */
|
||||
/* exported findUrls, spawn, spawnCommandLine, spawnApp, trySpawnAppCommandline,
|
||||
trySpawnCommandLine, formatTime, formatTimeSpan, createTimeLabel,
|
||||
insertSorted, ensureActorVisibleInScrollView, wiggle */
|
||||
|
||||
const { Clutter, Gio, GLib, Shell, St, GnomeDesktop } = imports.gi;
|
||||
const Gettext = imports.gettext;
|
||||
@ -86,18 +86,49 @@ function spawnCommandLine(commandLine) {
|
||||
}
|
||||
}
|
||||
|
||||
// trySpawnAppCommandline:
|
||||
// @command: The command to spawn
|
||||
//
|
||||
// Runs @command as if it was an application, handling startup notification
|
||||
// and placing it into a separate systemd scope.
|
||||
function trySpawnAppCommandline(command) {
|
||||
const quoted = command.replace(/%/g, '%%');
|
||||
|
||||
// This cannot fail currently
|
||||
const app = Gio.AppInfo.create_from_commandline(quoted, null,
|
||||
Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
|
||||
|
||||
// Launching applications does not check whether the executable exists,
|
||||
// it'll just log an error later on. So do an explicit check here.
|
||||
const exec = app.get_executable();
|
||||
if (!GLib.find_program_in_path(exec)) {
|
||||
throw new GLib.SpawnError({
|
||||
code: GLib.SpawnError.NOENT,
|
||||
message: _('Command not found'),
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
let context = global.create_app_launch_context(0, -1);
|
||||
|
||||
app.launch([], context);
|
||||
} catch (err) {
|
||||
// Replace "Error invoking global.create_app_launch_context: " with
|
||||
// something nicer
|
||||
err.message = err.message.replace(/[^:]*: /, '%s\n'.format(_('Could not parse command:')));
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
// spawnApp:
|
||||
// @argv: an argv array
|
||||
//
|
||||
// Runs @argv as if it was an application, handling startup notification
|
||||
// and placing it into a separate systemd scope.
|
||||
function spawnApp(argv) {
|
||||
try {
|
||||
let app = Gio.AppInfo.create_from_commandline(argv.join(' '), null,
|
||||
Gio.AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION);
|
||||
|
||||
let context = global.create_app_launch_context(0, -1);
|
||||
app.launch([], context);
|
||||
} catch (err) {
|
||||
trySpawnAppCommandline(argv.join(' '));
|
||||
} catch (err) {
|
||||
_handleSpawnError(argv[0], err);
|
||||
}
|
||||
}
|
||||
|
@ -196,7 +196,7 @@ class RunDialog extends ModalDialog.ModalDialog {
|
||||
let execArg = this._terminalSettings.get_string(EXEC_ARG_KEY);
|
||||
command = '%s %s %s'.format(exec, execArg, input);
|
||||
}
|
||||
Util.trySpawnCommandLine(command);
|
||||
Util.trySpawnAppCommandline(command);
|
||||
} catch (e) {
|
||||
// Mmmh, that failed - see if @input matches an existing file
|
||||
let path = null;
|
||||
|
Loading…
Reference in New Issue
Block a user