⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.c

📁 一个简单的文本编辑器
💻 C
📖 第 1 页 / 共 3 页
字号:
		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 + -