[gnome-shell] [runDialog] Support opening files and folders
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] [runDialog] Support opening files and folders
- Date: Mon, 8 Mar 2010 23:07:34 +0000 (UTC)
commit 62ca7fb2684e757abaacd3f19c2ff847b017be96
Author: Florian Müllner <fmuellner src gnome org>
Date: Fri Feb 26 20:07:44 2010 +0100
[runDialog] Support opening files and folders
Support completion on files and folders in the run dialog and launch
the default application when activated. Assume a path relative to the
home directory if execution as command fails and the input doesn't start
with a slash.
Removed workaround for relayout of error messages.
https://bugzilla.gnome.org/show_bug.cgi?id=611209
js/ui/runDialog.js | 51 +++++++++++++++++++++++++++++++++------------------
1 files changed, 33 insertions(+), 18 deletions(-)
---
diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js
index 11008a7..e1c26eb 100644
--- a/js/ui/runDialog.js
+++ b/js/ui/runDialog.js
@@ -26,6 +26,7 @@ CommandCompleter.prototype = {
_init : function() {
this._changedCount = 0;
this._paths = GLib.getenv('PATH').split(':');
+ this._paths.push(GLib.get_home_dir());
this._valid = false;
this._updateInProgress = false;
this._childs = new Array(this._paths.length);
@@ -300,37 +301,51 @@ RunDialog.prototype = {
}
},
- _run : function(command, inTerminal) {
+ _run : function(input, inTerminal) {
+ let command = input;
this._commandError = false;
let f;
if (this._enableInternalCommands)
- f = this._internalCommands[command];
+ f = this._internalCommands[input];
else
f = null;
if (f) {
f();
- } else if (command) {
+ } else if (input) {
try {
if (inTerminal)
- command = 'gnome-terminal -x ' + command;
+ command = 'gnome-terminal -x ' + input;
let [ok, len, args] = GLib.shell_parse_argv(command);
let p = new Shell.Process({ 'args' : args });
p.run();
} catch (e) {
- this._commandError = true;
- /*
- * The exception contains an error string like:
- * Error invoking Shell.run: Failed to execute child process "foo"
- * (No such file or directory)
- * We are only interested in the actual error, so parse that out.
- */
- let m = /.+\((.+)\)/.exec(e);
- let errorStr = _("Execution of '%s' failed:").format(command) + "\n" + m[1];
- this._errorMessage.set_text(errorStr);
-
- this._errorBox.show();
- // preferred_size change. Without this, message will show with delay
- this._errorBox.get_parent().queue_relayout();
+ // Mmmh, that failed - see if @input matches an existing file
+ let path = null;
+ if (input.charAt(0) == '/') {
+ path = input;
+ } else {
+ if (input.charAt(0) == '~')
+ input = input.slice(1);
+ path = GLib.get_home_dir() + '/' + input;
+ }
+
+ if (GLib.file_test(path, GLib.FileTest.EXISTS)) {
+ let file = Gio.file_new_for_path(path);
+ Gio.app_info_launch_default_for_uri(file.get_uri(),
+ global.create_app_launch_context());
+ } else {
+ this._commandError = true;
+ // The exception contains an error string like:
+ // Error invoking Shell.run: Failed to execute child
+ // process "foo" (No such file or directory)
+ // We are only interested in the actual error, so parse
+ //that out.
+ let m = /.+\((.+)\)/.exec(e);
+ let errorStr = _("Execution of '%s' failed:").format(command) + "\n" + m[1];
+ this._errorMessage.set_text(errorStr);
+
+ this._errorBox.show();
+ }
}
}
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]