📄 file.c
字号:
gchar* name = gedit_document_get_tab_name (doc, FALSE); gtk_file_selection_set_filename (GTK_FILE_SELECTION (save_file_selector), name); g_free (name); } else { /* FIXME: does not work well with URI */ gchar* name = gnome_vfs_unescape_string_for_display (doc->filename); g_return_if_fail (name != NULL); gtk_file_selection_set_filename (GTK_FILE_SELECTION (save_file_selector), name); g_free (name);/* gtk_file_selection_set_filename (GTK_FILE_SELECTION (save_file_selector), doc->filename);*/ } gtk_window_set_transient_for (GTK_WINDOW (save_file_selector), gedit_window_active ()); gtk_window_set_modal (GTK_WINDOW (save_file_selector), TRUE); gtk_window_set_title (GTK_WINDOW (save_file_selector), _("Save As...")); if (!GTK_WIDGET_VISIBLE (save_file_selector)) { gtk_window_position (GTK_WINDOW (save_file_selector), GTK_WIN_POS_MOUSE); gtk_widget_show(save_file_selector); } return;}/** * gedit_file_save: * @doc: Document window that contains the text we want to save * @fname: Filename to save as * * Dump the text from a document window out to a file, uses a * single fputs() call. * * Return value: 0 on success, 1 on error. */gintgedit_file_save (GeditDocument *doc, const gchar *fname){ FILE *file_pointer; gchar *buffer; GeditView *view; gchar* unescaped_name = NULL; const gchar* old_name; gedit_debug (DEBUG_FILE, ""); g_return_val_if_fail (doc!=NULL, 1); view = GEDIT_VIEW ( g_list_nth_data(doc->views, 0) ); g_return_val_if_fail (view!=NULL, 1); old_name = fname; if (fname == NULL) { if (doc->filename == NULL) { GtkWidget *w = GTK_WIDGET (g_list_nth_data(doc->views, 0)); if(w != NULL) gnome_mdi_set_active_view (mdi, w); gedit_file_save_as (doc); return 1; } else { unescaped_name = gnome_vfs_unescape_string_for_display (doc->filename); fname = unescaped_name; old_name = doc->filename; } } g_return_val_if_fail (doc != NULL, 1); g_return_val_if_fail (fname != NULL, 1); buffer = gedit_document_get_buffer (view->doc); g_return_val_if_fail (buffer != NULL, 1);#if 0 /* Allow the user to save 0 bytes files */ if (strlen(buffer) == 0) { gchar *errstr = g_strdup_printf (_("The document contains no data."), fname); gnome_app_error (mdi->active_window, errstr); g_free (errstr); g_free (buffer); gedit_close_all_flag_clear(); return 1; }#endif if ((file_pointer = fopen (fname, "w")) == NULL) { gchar *errstr = g_strdup_printf (_("gedit was unable to save the file: " "\n\n %s \n\n" "Make sure that the path you provided exists," "and that you have the appropriate write permissions."), fname); gnome_app_error (mdi->active_window, errstr); g_free (errstr); g_free (buffer); g_free (unescaped_name); gedit_close_all_flag_clear(); return 1; } if (fputs (buffer, file_pointer) == EOF) { gchar *errstr = g_strdup_printf (_("gedit was unable to save the file:" "\n\n %s \n\n" "Because of an unknown reason (1). Please report this " "Problem to submit@bugs.gnome.org"), fname); gnome_app_error (mdi->active_window, errstr); fclose (file_pointer); g_free (errstr); g_free (buffer); g_free (unescaped_name); gedit_close_all_flag_clear(); return 1; } if (buffer != NULL) g_free (buffer); if (fclose (file_pointer) != 0) { gchar *errstr = g_strdup_printf (_("gedit was unable to save the file:" "\n\n %s \n\n" "Because of an unknown reason (2). Please report this " "Problem to submit@bugs.gnome.org"), fname); gnome_app_error (mdi->active_window, errstr); g_free (errstr); g_free (unescaped_name); gedit_close_all_flag_clear(); return 1; } if (doc->filename != old_name) { if (doc->filename != NULL) g_free (doc->filename); doc->filename = g_strdup (old_name); } doc->changed = FALSE; doc->untitled_number = 0; gedit_document_set_readonly (doc, access (fname, W_OK) ? TRUE : FALSE); gedit_document_set_title (doc); gedit_document_text_changed_signal_connect (doc); gedit_flash (_(MSGBAR_FILE_SAVED)); if (unescaped_name != NULL) g_free (unescaped_name); return 0;}static void save_all_continue (GtkWidget *widget, gpointer cbdata){ if (save_all_flag == SAVE_ALL_RUNNING) file_save_all ();}void file_save_all (void){ static gint last_file_saved = -1; gint i; GeditDocument *doc; save_all_flag = SAVE_ALL_RUNNING; gedit_debug (DEBUG_FILE, ""); for (i = last_file_saved + 1; i < g_list_length (mdi->children); i++) { doc = (GeditDocument *)g_list_nth_data (mdi->children, i); if ((!doc->readonly && doc->changed)) { gchar* fname = doc->filename; gedit_file_save (doc, NULL); if(fname == NULL) { last_file_saved = i; return; } } } last_file_saved = -1; save_all_flag = SAVE_ALL_ENDED;}/** * gedit_file_stdin: * @doc: Document window to fill with text * * Open stdin and read it into the text widget. * * Return value: 0 on success, 1 on error. */gintgedit_file_stdin (GeditDocument *doc){ gchar *tmp_buf; struct stat stats; guint buffer_length; guint pos = 0; GeditView *view; gedit_debug (DEBUG_FILE, ""); fstat(STDIN_FILENO, &stats); if (stats.st_size == 0) { gedit_debug (DEBUG_FILE, "size = 0. end"); return 1; } if ((tmp_buf = g_new0 (gchar, GEDIT_STDIN_BUFSIZE+1)) == NULL) { gnome_app_error (mdi->active_window, _("Could not allocate the required memory.")); gedit_debug (DEBUG_FILE, "mem alloca error. returning"); return 1; } if (doc==NULL) doc = gedit_document_new (); view = g_list_nth_data (doc->views, 0); g_return_val_if_fail (view!=NULL, 1); while (feof(stdin)==0) { buffer_length = fread (tmp_buf,1,GEDIT_STDIN_BUFSIZE, stdin); tmp_buf[buffer_length+1]='\0'; gedit_document_insert_text (doc,tmp_buf,pos,FALSE); pos= pos + buffer_length ; if (ferror(stdin)!=0) { gnome_app_error (mdi->active_window, _("Error in the pipe.")); break ; } } fclose (stdin); doc->changed = TRUE; gedit_document_set_title (doc); /* Move the window to the top after inserting */ gedit_view_set_window_position (view, 0); g_free (tmp_buf); gedit_flash_va ("%s %s", _(MSGBAR_FILE_OPENED), "STDIN"); return 0;}voidfile_new_cb (GtkWidget *widget, gpointer cbdata){ GeditDocument *doc; gedit_debug (DEBUG_FILE, ""); gedit_flash (_(MSGBAR_FILE_NEW)); gedit_close_all_flag_verify ("file_new_cb"); doc = gedit_document_new ();}static GSList *gedit_file_selector_get_filenames (GtkFileSelection *file_selector, gchar **directory_){ GtkCListRow *row; GtkCList *rows; GSList *files = NULL; GList *list; gchar *file; gint row_num = 0; g_return_val_if_fail (GTK_IS_FILE_SELECTION (file_selector), NULL); rows = GTK_CLIST (file_selector->file_list); list = rows->row_list; for (; list != NULL; list = list->next) { row = list->data; gtk_clist_get_text (rows, row_num, 0, &file); if (row->state == GTK_STATE_SELECTED) files = g_slist_prepend (files, g_strdup(file)); row_num++; } return files;}static gbooleangedit_file_open_is_dir (GtkFileSelection *file_selector){ static gchar *selected_file; gchar *directory; gint length; selected_file = gtk_file_selection_get_filename (file_selector); if (!g_file_test (selected_file, G_FILE_TEST_ISDIR)) return FALSE; length = strlen (selected_file); if (selected_file [length-1] == '/') directory = g_strdup (selected_file); else directory = g_strdup_printf ("%s%c", selected_file, '/'); gtk_file_selection_set_filename (file_selector, directory); gtk_entry_set_text (GTK_ENTRY(file_selector->selection_entry), ""); g_free (directory); return TRUE;}static voidgedit_file_open_ok_sel (GtkWidget *widget, GtkWidget *file_selector_){ GtkFileSelection *file_selector; gchar * file_name; gchar * full_path; gchar * directory; GSList *files; GSList *list; gedit_debug (DEBUG_FILE, ""); g_return_if_fail (GTK_IS_FILE_SELECTION (file_selector_)); file_selector = GTK_FILE_SELECTION (file_selector_); if (gedit_file_open_is_dir (file_selector)) return; file_name = gtk_file_selection_get_filename (file_selector); directory = g_dirname (file_name); files = gedit_file_selector_get_filenames (file_selector, &directory); if (files == NULL) { if (gedit_document_new_with_file (file_name)) gedit_flash_va (_("Loaded file %s"), file_name); } else { list = files; for (; list != NULL; list = list->next) { file_name = list->data; full_path = g_concat_dir_and_file (directory, file_name); if (gedit_document_new_with_file (full_path)) gedit_flash_va (_("Loaded file %s"), full_path); g_free (full_path); g_free (file_name); } } if (g_slist_length (files) > 1) gedit_flash_va (_("Loaded %i files"), g_slist_length (files)); g_free (directory); gtk_widget_hide (GTK_WIDGET(file_selector)); if (gedit_document_current()) { g_return_if_fail(gedit_window_active_app()); gedit_window_set_widgets_sensitivity_ro (gedit_window_active_app(), gedit_document_current()->readonly); } return;}voidfile_open_cb (GtkWidget *widget, gpointer cbdata){ static GtkWidget *open_file_selector; gedit_debug (DEBUG_FILE, ""); gedit_close_all_flag_verify ("file_open_cb"); if (open_file_selector && GTK_WIDGET_VISIBLE (open_file_selector)) return; if (open_file_selector == NULL) { open_file_selector = gtk_file_selection_new(NULL); gtk_signal_connect(GTK_OBJECT(open_file_selector), "delete_event", GTK_SIGNAL_FUNC (delete_event_cb), open_file_selector); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(open_file_selector)->ok_button), "clicked", GTK_SIGNAL_FUNC (gedit_file_open_ok_sel), open_file_selector); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(open_file_selector)->cancel_button), "clicked", GTK_SIGNAL_FUNC (cancel_cb), open_file_selector); gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(open_file_selector)), "key_press_event", GTK_SIGNAL_FUNC (gedit_file_selector_key_event), NULL); gtk_clist_set_selection_mode( GTK_CLIST(GTK_FILE_SELECTION(open_file_selector)->file_list), GTK_SELECTION_EXTENDED); } else { GtkFileSelection *file_selector; g_return_if_fail (GTK_IS_FILE_SELECTION (open_file_selector)); /* Clear the selection & file from the last open */ file_selector = GTK_FILE_SELECTION(open_file_selector); gtk_clist_unselect_all (GTK_CLIST(file_selector->file_list)); gtk_entry_set_text (GTK_ENTRY(file_selector->selection_entry), ""); } gtk_window_set_transient_for (GTK_WINDOW (open_file_selector), gedit_window_active ()); gtk_window_set_modal (GTK_WINDOW (open_file_selector), TRUE); gtk_window_set_title (GTK_WINDOW (open_file_selector), _("Open File ...")); if (!GTK_WIDGET_VISIBLE (open_file_selector)) { gtk_window_position (GTK_WINDOW (open_file_selector), GTK_WIN_POS_MOUSE); gtk_widget_show(open_file_selector); } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -