static void handle_input_filename(const gchar *buf) { gchar *utf8_filename, *locale_filename; /* we never know how the input is encoded, so do the best auto detection we can */ if (! g_utf8_validate(buf, -1, NULL)) utf8_filename = encodings_convert_to_utf8(buf, -1, NULL); else utf8_filename = g_strdup(buf); locale_filename = utils_get_locale_from_utf8(utf8_filename); if (locale_filename) { if (g_str_has_suffix(locale_filename, ".geany")) main_load_project_from_command_line(locale_filename, TRUE); else main_handle_filename(locale_filename); } g_free(utf8_filename); g_free(locale_filename); }
static PyObject * Encodings_convert_to_utf8(PyObject *module, PyObject *args, PyObject *kwargs) { gchar *buffer = NULL, *used_encoding = NULL, *new_buffer = NULL; gssize size = -1; /* bug alert: this is gsize in Geany for some reason */ PyObject *result; static gchar *kwlist[] = { "buffer", "size", NULL }; if (PyArg_ParseTupleAndKeywords(args, kwargs, "s|l", kwlist, &buffer, &size)) { new_buffer = encodings_convert_to_utf8(buffer, size, &used_encoding); if (new_buffer != NULL) { result = Py_BuildValue("ss", new_buffer, used_encoding); g_free(new_buffer); g_free(used_encoding); return result; } } Py_RETURN_NONE; }
/* handler that opens the current filetype's configuration file */ static void open_current_filetype_conf_handler (GtkWidget *widget, gpointer data) { GeanyDocument *doc; (void)widget; (void)data; doc = document_get_current (); if (DOC_VALID (doc)) { gchar *path_read; gchar *path_write; GError *err = NULL; path_write = ggd_file_type_manager_get_conf_path (doc->file_type->id, GGD_PERM_W | GGD_PERM_NOCREAT, &err); if (! path_write) { msgwin_status_add (_("Failed to find configuration file " "for file type \"%s\": %s"), doc->file_type->name, err->message); g_error_free (err); } else { gchar *text = NULL; gchar *path_write_u8; path_read = ggd_file_type_manager_get_conf_path (doc->file_type->id, GGD_PERM_R, &err); if (! path_read) { text = g_strdup (_( "# Configuration for this file type doesn't exist yet.\n" "# To create it, just write it in this file and save it. For the description\n" "# of the syntax of this file, please refer to the manual.\n" )); } else { gchar *content = NULL; gsize length; if (! g_file_get_contents (path_read, &content, &length, &err)) { gchar *display_path_read; display_path_read = g_filename_display_name (path_read); g_warning (_("Failed to load file \"%s\": %s"), display_path_read, err->message); g_free (display_path_read); g_error_free (err); } else { text = encodings_convert_to_utf8 (content, length, NULL); g_free (content); } g_free (path_read); } path_write_u8 = utils_get_utf8_from_locale (path_write); /* It's no Ruby, but it is the closest one I've found. It has: * - # comments * - multi-line double-quoted strings */ document_new_file (path_write_u8, filetypes[GEANY_FILETYPES_RUBY], text); g_free (path_write_u8); g_free (text); g_free (path_write); } } }