static gboolean try_to_expand_path (gpointer callback_data) { AthenaLocationEntry *entry; GtkEditable *editable; char *suffix, *user_location, *absolute_location, *uri_scheme; int user_location_length, pos; entry = ATHENA_LOCATION_ENTRY (callback_data); editable = GTK_EDITABLE (entry); user_location = gtk_editable_get_chars (editable, 0, -1); user_location_length = g_utf8_strlen (user_location, -1); entry->details->idle_id = 0; uri_scheme = g_uri_parse_scheme (user_location); if (!g_path_is_absolute (user_location) && uri_scheme == NULL && user_location[0] != '~') { absolute_location = g_build_filename (entry->details->current_directory, user_location, NULL); suffix = g_filename_completer_get_completion_suffix (entry->details->completer, absolute_location); g_free (absolute_location); } else { suffix = g_filename_completer_get_completion_suffix (entry->details->completer, user_location); } g_free (user_location); g_free (uri_scheme); /* if we've got something, add it to the entry */ if (suffix != NULL) { pos = user_location_length; gtk_editable_insert_text (editable, suffix, -1, &pos); pos = user_location_length; gtk_editable_select_region (editable, pos, -1); g_free (suffix); } return FALSE; }
static VALUE rg_get_completion_suffix(VALUE self, VALUE initial_text) { return CSTR2RVAL_FREE(g_filename_completer_get_completion_suffix(_SELF(self), RVAL2CSTR(initial_text))); }