ast_result_t use_command(ast_t* ast, pass_opt_t* options) { assert(ast != NULL); assert(options != NULL); AST_GET_CHILDREN(ast, alias, spec, guard); assert(spec != NULL); assert(guard != NULL); switch(ast_id(spec)) { case TK_STRING: if(!uri_command(ast, spec, alias, guard, options)) return AST_ERROR; break; case TK_FFIDECL: if(!ffi_command(alias)) return AST_ERROR; break; default: assert(0); return AST_ERROR; } return AST_OK; }
static void * pidgin_notify_uri(const char *uri) { #ifndef _WIN32 char *escaped = g_shell_quote(uri); char *command = NULL; char *remote_command = NULL; const char *web_browser; int place; web_browser = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/browsers/browser"); place = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/browsers/place"); /* if they are running gnome, use the gnome web browser */ if (purple_running_gnome() == TRUE) { char *tmp = g_find_program_in_path("xdg-open"); if (tmp == NULL) command = g_strdup_printf("gnome-open %s", escaped); else command = g_strdup_printf("xdg-open %s", escaped); g_free(tmp); } else if (purple_running_osx() == TRUE) { command = g_strdup_printf("open %s", escaped); } else if (!strcmp(web_browser, "epiphany") || !strcmp(web_browser, "galeon")) { if (place == PIDGIN_BROWSER_NEW_WINDOW) command = g_strdup_printf("%s -w %s", web_browser, escaped); else if (place == PIDGIN_BROWSER_NEW_TAB) command = g_strdup_printf("%s -n %s", web_browser, escaped); else command = g_strdup_printf("%s %s", web_browser, escaped); } else if (!strcmp(web_browser, "xdg-open")) { command = g_strdup_printf("xdg-open %s", escaped); } else if (!strcmp(web_browser, "gnome-open")) { command = g_strdup_printf("gnome-open %s", escaped); } else if (!strcmp(web_browser, "kfmclient")) { command = g_strdup_printf("kfmclient openURL %s", escaped); /* * Does Konqueror have options to open in new tab * and/or current window? */ } else if (!strcmp(web_browser, "mozilla") || !strcmp(web_browser, "mozilla-firebird") || !strcmp(web_browser, "firefox") || !strcmp(web_browser, "seamonkey")) { char *args = ""; command = g_strdup_printf("%s %s", web_browser, escaped); /* * Firefox 0.9 and higher require a "-a firefox" option when * using -remote commands. This breaks older versions of * mozilla. So we include this other handly little string * when calling firefox. If the API for remote calls changes * any more in firefox then firefox should probably be split * apart from mozilla-firebird and mozilla... but this is good * for now. */ if (!strcmp(web_browser, "firefox")) args = "-a firefox"; if (place == PIDGIN_BROWSER_NEW_WINDOW) remote_command = g_strdup_printf("%s %s -remote " "openURL(%s,new-window)", web_browser, args, escaped); else if (place == PIDGIN_BROWSER_NEW_TAB) remote_command = g_strdup_printf("%s %s -remote " "openURL(%s,new-tab)", web_browser, args, escaped); else if (place == PIDGIN_BROWSER_CURRENT) remote_command = g_strdup_printf("%s %s -remote " "openURL(%s)", web_browser, args, escaped); } else if (!strcmp(web_browser, "netscape")) { command = g_strdup_printf("netscape %s", escaped); if (place == PIDGIN_BROWSER_NEW_WINDOW) { remote_command = g_strdup_printf("netscape -remote " "openURL(%s,new-window)", escaped); } else if (place == PIDGIN_BROWSER_CURRENT) { remote_command = g_strdup_printf("netscape -remote " "openURL(%s)", escaped); } } else if (!strcmp(web_browser, "opera")) { if (place == PIDGIN_BROWSER_NEW_WINDOW) command = g_strdup_printf("opera -newwindow %s", escaped); else if (place == PIDGIN_BROWSER_NEW_TAB) command = g_strdup_printf("opera -newpage %s", escaped); else if (place == PIDGIN_BROWSER_CURRENT) { remote_command = g_strdup_printf("opera -remote " "openURL(%s)", escaped); command = g_strdup_printf("opera %s", escaped); } else command = g_strdup_printf("opera %s", escaped); } else if (!strcmp(web_browser, "custom")) { const char *web_command; web_command = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/browsers/command"); if (web_command == NULL || *web_command == '\0') { purple_notify_error(NULL, NULL, _("Unable to open URL"), _("The 'Manual' browser command has been " "chosen, but no command has been set.")); return NULL; } if (strstr(web_command, "%s")) command = purple_strreplace(web_command, "%s", escaped); else { /* * There is no "%s" in the browser command. Assume the user * wanted the URL tacked on to the end of the command. */ command = g_strdup_printf("%s %s", web_command, escaped); } } g_free(escaped); if (remote_command != NULL) { /* try the remote command first */ if (uri_command(remote_command, TRUE) != 0) uri_command(command, FALSE); g_free(remote_command); } else uri_command(command, FALSE); g_free(command); #else /* !_WIN32 */ winpidgin_notify_uri(uri); #endif /* !_WIN32 */ return NULL; }