# HG changeset patch # User Richard Laager # Date 1157941859 0 # Node ID 82b59abcaee4ff47b101613f2d82fac0e2a1a55b # Parent e548832f0e821a7ccd2deeb2da1d96b8b6fbc7e8 [gaim-migrate @ 17240] SF Patch #1492561 from Lars T. Mikkelsen "This patch adds gaim-url-handler, a URL handler for most protocols in Gaim. The gaim-url-handler is similar to (and based on) gaim-remote, however, it uses the native URL format of each protocol. Furthermore, the patch includes a GConf schema, which allows Gnome applications to use the URL handler." With this and gaim-send/gaim-send-async, we should be able to drop gaim-remote. Please let me know if you object, or I'll remove gaim-remote shortly. For the record, I know this doesn't support 100% of the ChatZilla IRC URL spec, and I haven't investigated the XMPP URL spec beyond a casual first look. We can tweak these things later -- I figured it was important to get the bulk of the code in place. committer: Tailor Script diff -r e548832f0e82 -r 82b59abcaee4 COPYRIGHT --- a/COPYRIGHT Mon Sep 11 02:02:18 2006 +0000 +++ b/COPYRIGHT Mon Sep 11 02:30:59 2006 +0000 @@ -189,6 +189,7 @@ Torrey McMahon Robert McQueen Robert Mibus +Lars T. Mikkelsen Benjamin Miller Kevin Miller Paul Miller diff -r e548832f0e82 -r 82b59abcaee4 ChangeLog.API --- a/ChangeLog.API Mon Sep 11 02:02:18 2006 +0000 +++ b/ChangeLog.API Mon Sep 11 02:30:59 2006 +0000 @@ -321,6 +321,8 @@ call to gaim_util_fetch_url() or gaim_util_fetch_url_request(). * GaimGtkWindow: dialogs.search (previously in GaimGtkConversation) * gaim_buddy_get_server_alias() + * gaim_conv_send_confirm() + * GaimConversationUiOps.send_confirm Signals - Changed: (See the Doxygen docs for details on all signals.) * Signal propagation now stops after a handler returns a non-NULL value. diff -r e548832f0e82 -r 82b59abcaee4 acinclude.m4 --- a/acinclude.m4 Mon Sep 11 02:02:18 2006 +0000 +++ b/acinclude.m4 Mon Sep 11 02:30:59 2006 +0000 @@ -836,3 +836,42 @@ AC_SUBST(BINRELOC_CFLAGS) AC_SUBST(BINRELOC_LIBS) ]) +dnl AM_GCONF_SOURCE_2 +dnl Defines GCONF_SCHEMA_CONFIG_SOURCE which is where you should install schemas +dnl (i.e. pass to gconftool-2 +dnl Defines GCONF_SCHEMA_FILE_DIR which is a filesystem directory where +dnl you should install foo.schemas files +dnl + +AC_DEFUN([AM_GCONF_SOURCE_2], +[ + if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then + GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source` + else + GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE + fi + + AC_ARG_WITH(gconf-source, + [ --with-gconf-source=sourceaddress Config database for installing schema files.],GCONF_SCHEMA_CONFIG_SOURCE="$withval",) + + AC_SUBST(GCONF_SCHEMA_CONFIG_SOURCE) + AC_MSG_RESULT([Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation]) + + if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then + GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas' + fi + + AC_ARG_WITH(gconf-schema-file-dir, + [ --with-gconf-schema-file-dir=dir Directory for installing schema files.],GCONF_SCHEMA_FILE_DIR="$withval",) + + AC_SUBST(GCONF_SCHEMA_FILE_DIR) + AC_MSG_RESULT([Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files]) + + AC_ARG_ENABLE(schemas-install, + [ --disable-schemas-install Disable the schemas installation], + [case ${enableval} in + yes|no) ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-schemas-install) ;; + esac]) + AM_CONDITIONAL([GCONF_SCHEMAS_INSTALL], [test "$enable_schemas_install" != no]) +]) diff -r e548832f0e82 -r 82b59abcaee4 configure.ac --- a/configure.ac Mon Sep 11 02:02:18 2006 +0000 +++ b/configure.ac Mon Sep 11 02:30:59 2006 +0000 @@ -423,6 +423,13 @@ AC_SUBST(LIBXML_LIBS) dnl ####################################################################### +dnl # GConf schemas +dnl ####################################################################### +AC_PATH_PROG(GCONFTOOL, gconftool-2, no) +AM_CONDITIONAL(USE_GCONFTOOL, test "x$GCONFTOOL" != "xno") +AM_GCONF_SOURCE_2 + +dnl ####################################################################### dnl # Check for GStreamer dnl ####################################################################### AC_ARG_ENABLE(gstreamer, @@ -577,7 +584,7 @@ gadu_manual_check="no" fi if test "x$gadu_manual_check" = "xno"; then - PKG_CHECK_MODULES(GADU, libgadu, [ + PKG_CHECK_MODULES(LIBGADU, libgadu, [ gadu_includes="yes" gadu_libs="yes" ], [ @@ -1870,6 +1877,7 @@ gtk/plugins/perl/common/Makefile.PL gtk/plugins/ticker/Makefile gtk/sounds/Makefile + libgaim/gconf/Makefile libgaim/plugins/Makefile libgaim/plugins/mono/Makefile libgaim/plugins/mono/api/Makefile diff -r e548832f0e82 -r 82b59abcaee4 gtk/gtkconv.c --- a/gtk/gtkconv.c Mon Sep 11 02:02:18 2006 +0000 +++ b/gtk/gtkconv.c Mon Sep 11 02:30:59 2006 +0000 @@ -5396,6 +5396,14 @@ } +static void +gaim_gtkconv_send_confirm(GaimConversation *conv, const char *message) +{ + GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); + + gtk_imhtml_append_text(GTK_IMHTML(gtkconv->entry), message, 0); +} + /* * Makes sure all the menu items and all the buttons are hidden/shown and * sensitive/insensitive. This is called after changing tabs and when an @@ -5780,7 +5788,8 @@ gaim_gtkconv_has_focus, /* has_focus */ gaim_gtkconv_custom_smiley_add, /* custom_smiley_add */ gaim_gtkconv_custom_smiley_write, /* custom_smiley_write */ - gaim_gtkconv_custom_smiley_close /* custom_smiley_close */ + gaim_gtkconv_custom_smiley_close, /* custom_smiley_close */ + gaim_gtkconv_send_confirm, /* send_confirm */ }; GaimConversationUiOps * diff -r e548832f0e82 -r 82b59abcaee4 libgaim/Makefile.am --- a/libgaim/Makefile.am Mon Sep 11 02:02:18 2006 +0000 +++ b/libgaim/Makefile.am Mon Sep 11 02:30:59 2006 +0000 @@ -5,6 +5,7 @@ gaim-remote \ gaim-send \ gaim-send-async \ + gaim-url-handler \ Makefile.mingw \ win32/global.mak \ win32/libc_interface.c \ @@ -17,7 +18,11 @@ win32/win32dep.c \ win32/win32dep.h -SUBDIRS = plugins protocols +if USE_GCONFTOOL +GCONF_DIR=gconf +endif + +SUBDIRS = $(GCONF_DIR) plugins protocols gaim_coresources = \ account.c \ @@ -187,7 +192,7 @@ # scripts -bin_SCRIPTS = gaim-notifications-example gaim-remote gaim-send gaim-send-async +bin_SCRIPTS = gaim-notifications-example gaim-remote gaim-send gaim-send-async gaim-url-handler endif diff -r e548832f0e82 -r 82b59abcaee4 libgaim/conversation.c --- a/libgaim/conversation.c Mon Sep 11 02:02:18 2006 +0000 +++ b/libgaim/conversation.c Mon Sep 11 02:30:59 2006 +0000 @@ -28,6 +28,7 @@ #include "notify.h" #include "prefs.h" #include "prpl.h" +#include "request.h" #include "signals.h" #include "util.h" @@ -338,6 +339,8 @@ g_return_if_fail(conv != NULL); + gaim_request_close_with_handle(conv); + ops = gaim_conversation_get_ui_ops(conv); gc = gaim_conversation_get_gc(conv); name = gaim_conversation_get_name(conv); @@ -1126,6 +1129,41 @@ gaim_conv_im_send_with_flags(im, message, 0); } +static void +gaim_conv_send_confirm_cb(gpointer *data) +{ + GaimConversation *conv = data[0]; + char *message = data[1]; + + g_free(data); + common_send(conv, message, 0); +} + +void +gaim_conv_send_confirm(GaimConversation *conv, const char *message) +{ + char *text; + gpointer *data; + + g_return_if_fail(conv != NULL); + g_return_if_fail(message != NULL); + + if (conv->ui_ops != NULL && conv->ui_ops->send_confirm != NULL) + { + conv->ui_ops->send_confirm(conv, message); + return; + } + + text = g_strdup_printf("You are about to send the following message:\n%s", message); + data = g_new0(gpointer, 2); + data[0] = conv; + data[1] = (gpointer)message; + + gaim_request_action(conv, NULL, _("Send Message"), text, 0, data, 2, + _("_Send Message"), G_CALLBACK(gaim_conv_send_confirm_cb), + _("Cancel"), NULL); +} + void gaim_conv_im_send_with_flags(GaimConvIm *im, const char *message, GaimMessageFlags flags) { diff -r e548832f0e82 -r 82b59abcaee4 libgaim/conversation.h --- a/libgaim/conversation.h Mon Sep 11 02:02:18 2006 +0000 +++ b/libgaim/conversation.h Mon Sep 11 02:30:59 2006 +0000 @@ -174,6 +174,8 @@ void (*custom_smiley_write)(GaimConversation *conv, const char *smile, const guchar *data, gsize size); void (*custom_smiley_close)(GaimConversation *conv, const char *smile); + + void (*send_confirm)(GaimConversation *conv, const char *message); }; /** @@ -758,6 +760,20 @@ void gaim_conv_im_send(GaimConvIm *im, const char *message); /** + * Sends a message to a conversation after confirming with + * the user. + * + * This function is intended for use in cases where the user + * hasn't explicitly and knowingly caused a message to be sent. + * The confirmation ensures that the user isn't sending a + * message by mistake. + * + * @param conv The conversation. + * @param message The message to send. + */ +void gaim_conv_send_confirm(GaimConversation *conv, const char *message); + +/** * Sends a message to this IM conversation with specified flags. * * @param im The IM. diff -r e548832f0e82 -r 82b59abcaee4 libgaim/gaim-url-handler --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgaim/gaim-url-handler Mon Sep 11 02:30:59 2006 +0000 @@ -0,0 +1,274 @@ +#!/usr/bin/python + +import dbus +import re +import sys +import time +import urllib + +obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject") +gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface") + +class CheckedObject: + def __init__(self, obj): + self.obj = obj + + def __getattr__(self, attr): + return CheckedAttribute(self, attr) + +class CheckedAttribute: + def __init__(self, cobj, attr): + self.cobj = cobj + self.attr = attr + + def __call__(self, *args): + result = self.cobj.obj.__getattr__(self.attr)(*args) + if result == 0: + raise "Error: " + self.attr + " " + str(args) + " returned " + str(result) + return result + +cgaim = CheckedObject(gaim) + +def extendlist(list, length, fill): + if len(list) < length: + return list + [fill] * (length - len(list)) + else: + return list + +def convert(value): + try: + return int(value) + except: + return value + +def findaccount(protocolname, accountname=""): + try: + # prefer connected accounts + account = cgaim.GaimAccountsFindConnected(accountname, protocolname) + return account + except: + # try to get any account and connect it + account = cgaim.GaimAccountsFindAny(accountname, protocolname) + gaim.GaimAccountSetStatusVargs(account, "online", 1) + gaim.GaimAccountConnect(account) + return account + +def goim(account, screenname, message=None): + # XXX: 1 == GAIM_CONV_TYPE_IM + conversation = cgaim.GaimConversationNew(1, account, screenname) + if message: + gaim.GaimConvSendConfirm(conversation, message) + +def gochat(account, params, message=None): + connection = cgaim.GaimAccountGetConnection(account) + gaim.ServJoinChat(connection, params) + + if message != None: + for i in range(20): + # XXX: 2 == GAIM_CONV_TYPE_CHAT + conversation = gaim.GaimFindConversationWithAccount(2, params.get("channel", params.get("room")), account) + if conversation: + gaim.GaimConvSendConfirm(conversation, message) + break + else: + time.sleep(0.5) + +def addbuddy(account, screenname, group="", alias=""): + cgaim.GaimBlistRequestAddBuddy(account, screenname, group, alias) + + +def aim(uri): + protocol = "prpl-oscar" + match = re.match(r"^(aim|icq):([^?]*)(\?(.*))", uri) + if not match: + print "Invalid aim URI: %s" % uri + return + + command = urllib.unquote(match.group(2)) + paramstring = match.group(4) + params = {} + if paramstring: + for param in paramstring.split("&"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote(value) + accountname = params.get("account", "") + screenname = params.get("screenname", "") + + account = findaccount(protocol, accountname) + + if command == "goim": + goim(account, screenname, params.get("message")) + elif command == "gochat": + gochat(account, params) + elif command == "addbuddy": + addbuddy(account, screenname, params.get("group", "")) + +def gg(uri): + protocol = "prpl-gg" + match = re.match(r"^gg:(.*)", uri) + if not match: + print "Invalid gg URI: %s" % uri + return + + screenname = urllib.unquote(match.group(1)) + account = findaccount(protocol) + goim(account, screenname) + +def icq(uri): + aim(uri) + +def irc(uri): + protocol = "prpl-irc" + match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri) + if not match: + print "Invalid irc URI: %s" % uri + return + + server = urllib.unquote(match.group(2)) or "" + target = match.group(3) or "" + query = match.group(5) or "" + + modifiers = {} + if target: + for modifier in target.split(",")[1:]: + modifiers[modifier] = True + + isnick = modifiers.has_key("isnick") + + paramstring = match.group(5) + params = {} + if paramstring: + for param in paramstring.split("&"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote(value) + + account = findaccount(protocol) + + if (target != ""): + if (isnick): + goim(account, urllib.unquote(target.split(",")[0]), params.get("msg")) + else: + channel = urllib.unquote(target.split(",")[0]) + if channel[0] != "#": + channel = "#" + channel + gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg")) + +def msnim(uri): + protocol = "prpl-msn" + match = re.match(r"^msnim:([^?]*)(\?(.*))", uri) + if not match: + print "Invalid msnim URI: %s" % uri + return + + command = urllib.unquote(match.group(1)) + paramstring = match.group(3) + params = {} + if paramstring: + for param in paramstring.split("&"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote(value) + screenname = params.get("contact", "") + + account = findaccount(protocol) + + if command == "chat": + goim(account, screenname) + elif command == "add": + addbuddy(account, screenname) + +def sip(uri): + protocol = "prpl-simple" + match = re.match(r"^sip:(.*)", uri) + if not match: + print "Invalid sip URI: %s" % uri + return + + screenname = urllib.unquote(match.group(1)) + account = findaccount(protocol) + goim(account, screenname) + +def xmpp(uri): + protocol = "prpl-jabber" + match = re.match(r"^xmpp:(//([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri) + if not match: + print "Invalid xmpp URI: %s" % uri + return + + accountname = urllib.unquote(match.group(2)) or "" + screenname = urllib.unquote(match.group(4)) + command = urllib.unquote(match.group(6)) + paramstring = match.group(8) + params = {} + if paramstring: + for param in paramstring.split(";"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote(value) + + account = findaccount(protocol, accountname) + + if command == "message": + goim(account, screenname, params.get("body")) + elif command == "join": + room, server = screenname.split("@") + gochat(account, {"room": room, "server": server}) + elif command == "roster": + addbuddy(account, screenname, params.get("group", ""), params.get("name", "")) + else: + goim(account, screenname) + +def ymsgr(uri): + protocol = "prpl-yahoo" + match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri) + if not match: + print "Invalid ymsgr URI: %s" % uri + return + + command = urllib.unquote(match.group(1)) + screenname = urllib.unquote(match.group(3)) + paramstring = match.group(5) + params = {} + if paramstring: + for param in paramstring.split("&"): + key, value = extendlist(param.split("=", 1), 2, "") + params[key] = urllib.unquote(value) + + account = findaccount(protocol) + + if command == "sendIM": + goim(account, screenname, params.get("m")) + elif command == "chat": + gochat(account, {"room": screenname}) + elif command == "addfriend": + addbuddy(account, screenname) + + +def main(argv=sys.argv): + if len(argv) != 2: + print "Usage: %s URI" % argv[0] + print "Example: %s \"xmpp:romeo@montague.net?message\"" % argv[0] + return + + uri = argv[1] + type = uri.split(":")[0] + + if type == "aim": + aim(uri) + elif type == "gg": + gg(uri) + elif type == "icq": + icq(uri) + elif type == "irc": + irc(uri) + elif type == "msnim": + msnim(uri) + elif type == "sip": + sip(uri) + elif type == "xmpp": + xmpp(uri) + elif type == "ymsgr": + ymsgr(uri) + else: + print "Unkown protocol: %s" % type + +if __name__ == "__main__": + main() diff -r e548832f0e82 -r 82b59abcaee4 libgaim/gconf/Makefile.am --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgaim/gconf/Makefile.am Mon Sep 11 02:30:59 2006 +0000 @@ -0,0 +1,9 @@ +schemadir = @GCONF_SCHEMA_FILE_DIR@ +schema_DATA = gaim.schemas + +if GCONF_SCHEMAS_INSTALL +install-data-local: + GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$(schema_DATA) +else +install-data-local: +endif diff -r e548832f0e82 -r 82b59abcaee4 libgaim/gconf/gaim.schemas --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libgaim/gconf/gaim.schemas Mon Sep 11 02:30:59 2006 +0000 @@ -0,0 +1,276 @@ + + + + + /schemas/desktop/gnome/url-handlers/aim/enabled + /desktop/gnome/url-handlers/aim/enabled + gaim + bool + true + + Whether the specified command should handle "aim" URLs + True if the command specified in the "command" key should handle "aim" URLs. + + + + /schemas/desktop/gnome/url-handlers/aim/command +im /desktop/gnome/url-handlers/aim/command + gaim + string + gaim-url-handler "%s" + + The handler for "aim" URLs + The command used to handle "aim" URLs, if enabled. + + + + /schemas/desktop/gnome/url-handlers/aim/needs_terminal + /desktop/gnome/url-handlers/aim/needs_terminal + gaim + bool + false + + Run the command in a terminal + True if the command used to handle this type of URL should be run in a terminal. + + + + + /schemas/desktop/gnome/url-handlers/gg/enabled + /desktop/gnome/url-handlers/gg/enabled + gaim + bool + true + + Whether the specified command should handle "gg" URLs + True if the command specified in the "command" key should handle "gg" URLs. + + + + /schemas/desktop/gnome/url-handlers/gg/command + /desktop/gnome/url-handlers/gg/command + gaim + string + gaim-url-handler "%s" + + The handler for "gg" URLs + The command used to handle "gg" URLs, if enabled. + + + + /schemas/desktop/gnome/url-handlers/gg/needs_terminal + /desktop/gnome/url-handlers/gg/needs_terminal + gaim + bool + false + + Run the command in a terminal + True if the command used to handle this type of URL should be run in a terminal. + + + + + /schemas/desktop/gnome/url-handlers/icq/enabled + /desktop/gnome/url-handlers/icq/enabled + gaim + bool + true + + Whether the specified command should handle "icq" URLs + True if the command specified in the "command" key should handle "icq" URLs. + + + + /schemas/desktop/gnome/url-handlers/icq/command + /desktop/gnome/url-handlers/icq/command + gaim + string + gaim-url-handler "%s" + + The handler for "icq" URLs + The command used to handle "icq" URLs, if enabled. + + + + /schemas/desktop/gnome/url-handlers/icq/needs_terminal + /desktop/gnome/url-handlers/icq/needs_terminal + gaim + bool + false + + Run the command in a terminal + True if the command used to handle this type of URL should be run in a terminal. + + + + + /schemas/desktop/gnome/url-handlers/irc/enabled + /desktop/gnome/url-handlers/irc/enabled + gaim + bool + true + + Whether the specified command should handle "irc" URLs + True if the command specified in the "command" key should handle "irc" URLs. + + + + /schemas/desktop/gnome/url-handlers/irc/command + /desktop/gnome/url-handlers/irc/command + gaim + string + gaim-url-handler "%s" + + The handler for "irc" URLs + The command used to handle "irc" URLs, if enabled. + + + + /schemas/desktop/gnome/url-handlers/irc/needs_terminal + /desktop/gnome/url-handlers/irc/needs_terminal + gaim + bool + false + + Run the command in a terminal + True if the command used to handle this type of URL should be run in a terminal. + + + + + /schemas/desktop/gnome/url-handlers/msnim/enabled + /desktop/gnome/url-handlers/msnim/enabled + gaim + bool + true + + Whether the specified command should handle "msnim" URLs + True if the command specified in the "command" key should handle "msnim" URLs. + + + + /schemas/desktop/gnome/url-handlers/msnim/command + /desktop/gnome/url-handlers/msnim/command + gaim + string + gaim-url-handler "%s" + + The handler for "msnim" URLs + The command used to handle "msnim" URLs, if enabled. + + + + /schemas/desktop/gnome/url-handlers/msnim/needs_terminal + /desktop/gnome/url-handlers/msnim/needs_terminal + gaim + bool + false + + Run the command in a terminal + True if the command used to handle this type of URL should be run in a terminal. + + + + + /schemas/desktop/gnome/url-handlers/sip/enabled + /desktop/gnome/url-handlers/sip/enabled + gaim + bool + true + + Whether the specified command should handle "sip" URLs + True if the command specified in the "command" key should handle "sip" URLs. + + + + /schemas/desktop/gnome/url-handlers/sip/command + /desktop/gnome/url-handlers/sip/command + gaim + string + gaim-url-handler "%s" + + The handler for "sip" URLs + The command used to handle "sip" URLs, if enabled. + + + + /schemas/desktop/gnome/url-handlers/sip/needs_terminal + /desktop/gnome/url-handlers/sip/needs_terminal + gaim + bool + false + + Run the command in a terminal + True if the command used to handle this type of URL should be run in a terminal. + + + + + /schemas/desktop/gnome/url-handlers/xmpp/enabled + /desktop/gnome/url-handlers/xmpp/enabled + gaim + bool + true + + Whether the specified command should handle "xmpp" URLs + True if the command specified in the "command" key should handle "xmpp" URLs. + + + + /schemas/desktop/gnome/url-handlers/xmpp/command + /desktop/gnome/url-handlers/xmpp/command + gaim + string + gaim-url-handler "%s" + + The handler for "xmpp" URLs + The command used to handle "xmpp" URLs, if enabled. + + + + /schemas/desktop/gnome/url-handlers/xmpp/needs_terminal + /desktop/gnome/url-handlers/xmpp/needs_terminal + gaim + bool + false + + Run the command in a terminal + True if the command used to handle this type of URL should be run in a terminal. + + + + + /schemas/desktop/gnome/url-handlers/ymsgr/enabled + /desktop/gnome/url-handlers/ymsgr/enabled + gaim + bool + true + + Whether the specified command should handle "ymsgr" URLs + True if the command specified in the "command" key should handle "ymsgr" URLs. + + + + /schemas/desktop/gnome/url-handlers/ymsgr/command + /desktop/gnome/url-handlers/ymsgr/command + gaim + string + gaim-url-handler "%s" + + The handler for "ymsgr" URLs + The command used to handle "ymsgr" URLs, if enabled. + + + + /schemas/desktop/gnome/url-handlers/ymsgr/needs_terminal + /desktop/gnome/url-handlers/ymsgr/needs_terminal + gaim + bool + false + + Run the command in a terminal + True if the command used to handle this type of URL should be run in a terminal. + + + +