void ViCommandMode::execute(const Glib::ustring &cmd) { add_history( cmd ); char ch = cmd[0]; Glib::ustring rest = cmd.substr(1); if (ch == '/') { // // Forward search // execute_search(rest, ch); } else if (ch == '?') { // // Backward search // execute_search(rest, ch); } else if (ch == ':') { execute_command(rest); } }
static void schedule_search (GcalShellSearchProvider *search_provider, GDBusMethodInvocation *invocation, gchar **terms) { GcalShellSearchProviderPrivate *priv = search_provider->priv; /* don't attempt searches for a single character */ if (g_strv_length (terms) == 1 && g_utf8_strlen (terms[0], -1) == 1) { g_dbus_method_invocation_return_value (invocation, g_variant_new ("(as)", NULL)); return; } if (priv->pending_search != NULL) { g_object_unref (priv->pending_search->invocation); g_strfreev (priv->pending_search->terms); if (priv->scheduled_search_id == 0) g_application_release (g_application_get_default ()); } else { priv->pending_search = g_new0 (PendingSearch, 1); } if (priv->scheduled_search_id != 0) { g_source_remove (priv->scheduled_search_id); priv->scheduled_search_id = 0; } priv->pending_search->invocation = g_object_ref (invocation); priv->pending_search->terms = g_strdupv (terms); if (!gcal_manager_load_completed (priv->manager)) { priv->scheduled_search_id = g_timeout_add_seconds (1, (GSourceFunc) execute_search, search_provider); return; } execute_search (search_provider); return; }