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

📄 file.c

📁 一个简单的文本编辑器
💻 C
📖 第 1 页 / 共 3 页
字号:
voidfile_save_as_cb (GtkWidget *widget, gpointer cbdata){	GeditDocument *doc;		gedit_debug (DEBUG_FILE, "");	gedit_close_all_flag_verify ("file_save_as_cb");		doc = gedit_document_current();			if (doc==NULL)		return;	gedit_file_save_as (doc);}static gintdelete_event_cb (GtkWidget *widget, GdkEventAny *event){	gedit_debug (DEBUG_FILE, "");	g_print ("DElete event callback ........\n");	gtk_widget_hide (widget);	return TRUE;} static voidcancel_cb (GtkWidget *w, gpointer data){	gedit_debug (DEBUG_FILE, "");		gtk_widget_hide (data);}gintfile_save_document (GeditDocument *doc){	gedit_debug (DEBUG_FILE, "");	if (doc==NULL)		return FALSE;	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 FALSE;	}	else	{		gedit_file_save (doc, NULL);		return TRUE;	}}voidfile_save_cb (GtkWidget *widget, gpointer cbdata){	GeditDocument *doc;		gedit_debug (DEBUG_FILE, "");	gedit_close_all_flag_verify ("file_save_cb");	doc = gedit_document_current ();	if (doc==NULL)		return;	file_save_document (doc);}void file_save_all_cb (GtkWidget *widget, gpointer cbdata){	file_save_all();}void uri_open_cb (GtkWidget *widget, gpointer cbdata){	gedit_dialog_open_uri ();}static voidgedit_file_save_as_ok_sel (GtkWidget *w, gpointer cbdata){	GeditDocument *doc;	GeditView *nth_view;	gchar *file_name;	gint i;	gedit_debug (DEBUG_FILE, "");	doc = cbdata;	/*	g_print ("Doc->filename %s untitled #%i\n", doc->filename, doc->untitled_number);	*/		 	if (!doc)		return;		file_name = g_strdup(gtk_file_selection_get_filename (GTK_FILE_SELECTION(save_file_selector)));		gtk_widget_hide (GTK_WIDGET (save_file_selector));	save_file_selector = NULL;	        if (g_file_exists (file_name))	{		guchar * msg;		GtkWidget *msgbox;		gint ret;		msg = g_strdup_printf (_("``%s'' is about to be overwritten. Do you want to continue ?"), file_name);		msgbox = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES,						GNOME_STOCK_BUTTON_NO, GNOME_STOCK_BUTTON_CANCEL, NULL);		gnome_dialog_set_default (GNOME_DIALOG (msgbox), 2);		ret = gnome_dialog_run_and_close (GNOME_DIALOG (msgbox));		g_free (msg);		switch (ret)		{		case 0:			break;		case 1:			gedit_close_all_flag_clear();			gedit_flash (_("Document has not been saved."));			return;		default:			gedit_close_all_flag_clear();			return;		}	}	    	if (gedit_file_save (doc, file_name) != 0)	{		gedit_flash (_("Error saving file!"));		g_free (file_name);		gedit_close_all_flag_clear();		return;	}        /* If file save was succesfull, then we should turn the readonly flag off */	for (i = 0; i < g_list_length (doc->views); i++)	{		nth_view = g_list_nth_data (doc->views, i);		gedit_view_set_readonly (nth_view, FALSE);	}	/* Add the saved as file to the recent files ( history ) menu */	gedit_recent_add (file_name);	gedit_recent_update_all_windows (mdi);	gedit_flash_va ("%s %s", _(MSGBAR_FILE_SAVED), file_name);	g_free (file_name);	gedit_close_all_flag_status ("gedit_file_save_ok_sel");	switch (gedit_close_all_flag){	case GEDIT_CLOSE_ALL_FLAG_NORMAL:		break;	case GEDIT_CLOSE_ALL_FLAG_CLOSE_ALL:		file_close_all_cb (NULL, NULL);		break;	case GEDIT_CLOSE_ALL_FLAG_QUIT:		file_quit_cb (NULL, NULL);		break;	default:		g_return_if_fail (FALSE);	}	if(save_all_flag == SAVE_ALL_RUNNING)	{		file_save_all();	}		/* We need to set the revert menu item sensitivity if we where saving	   as from an Untitled doc */	gedit_window_set_view_menu_sensitivity (gedit_window_active_app ());	if(gedit_window_active_app () != NULL)	{		gedit_window_set_widgets_sensitivity_ro (gedit_window_active_app (), FALSE);		}}voidfile_close_cb (GtkWidget *widget, gpointer cbdata){	gedit_debug (DEBUG_FILE, "");	if (mdi->active_child == NULL)		return;	gnome_mdi_remove_child (mdi, mdi->active_child, FALSE);	gedit_document_set_title (gedit_document_current());	gedit_window_set_widgets_sensitivity (FALSE);}voidfile_close_all_cb (GtkWidget *widget, gpointer cbdata){	gedit_debug (DEBUG_FILE, "");	gedit_close_all_flag_status("File_close_all_cb. Before");		if (gedit_close_all_flag != GEDIT_CLOSE_ALL_FLAG_QUIT)		gedit_close_all_flag = GEDIT_CLOSE_ALL_FLAG_CLOSE_ALL;	if (mdi->active_child == NULL)		return;	gnome_mdi_remove_all (mdi, FALSE);	/* If this close all was successful, clear the flag */	if (gedit_document_current()==NULL)		gedit_close_all_flag_clear();	gedit_window_set_widgets_sensitivity (FALSE);	}voidfile_quit_cb (GtkWidget *widget, gpointer cbdata){	gedit_debug (DEBUG_FILE, "");	gedit_close_all_flag = GEDIT_CLOSE_ALL_FLAG_QUIT;	file_close_all_cb (NULL, NULL);	if (gedit_document_current()!=NULL)		return;	/* We need to disconnect the signal because mdi "destroy" event	   is connected to file_quit_cb ( i.e. this function ). Chema */	gtk_signal_disconnect (GTK_OBJECT(mdi), gedit_mdi_destroy_signal);		gtk_object_destroy (GTK_OBJECT (mdi));	gedit_prefs_save_settings ();	gedit_recent_history_write_config ();	gtk_main_quit ();}voidfile_revert_cb (GtkWidget *widget, gpointer data){	GtkWidget *msgbox;	GeditDocument *doc = gedit_document_current ();	gchar * msg;	gchar * file_name;	gedit_debug(DEBUG_FILE, "");	gedit_close_all_flag_verify ("file_save_cb");	if (!doc)		return;	if (doc->filename==NULL)	{				msg = g_strdup (_("You can't revert an Untitled document\n"));		msgbox = gnome_message_box_new (msg,						GNOME_MESSAGE_BOX_INFO,						GNOME_STOCK_BUTTON_OK,						NULL);		gnome_dialog_set_parent (GNOME_DIALOG (msgbox),					 GTK_WINDOW (mdi->active_window));		gnome_dialog_run_and_close (GNOME_DIALOG(msgbox));		g_free (msg);		return;	}				msg = g_strdup_printf (_("Are you sure you wish to revert all changes?\n(%s)"),			       doc->filename);	msgbox = gnome_message_box_new (msg, GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES,					GNOME_STOCK_BUTTON_NO, NULL);	gnome_dialog_set_default (GNOME_DIALOG (msgbox), 2);	    	    	switch (gnome_dialog_run_and_close (GNOME_DIALOG (msgbox)))	{	case 0:		gedit_document_delete_text (doc, 0, gedit_document_get_buffer_length(doc), FALSE);		file_name = g_strdup (doc->filename);		gedit_file_open (doc, file_name);		g_free (file_name);		break;	default:		break;	}	g_free (msg);}gint gedit_file_create_popup (const gchar *title){	GtkWidget *msgbox;	GeditDocument *doc;	int ret;	char *msg;	gedit_debug(DEBUG_FILE, "");		msg = g_strdup_printf (_("The file ``%s'' does not exist.  Would you like to create it?"),			       title);	msgbox = gnome_message_box_new (msg,					GNOME_MESSAGE_BOX_QUESTION,					GNOME_STOCK_BUTTON_YES,					GNOME_STOCK_BUTTON_NO,					NULL);	ret = gnome_dialog_run_and_close (GNOME_DIALOG (msgbox));	g_free (msg);	switch (ret)	{	case 0: 		doc = gedit_document_new_with_title (title);		doc->changed = TRUE;		return TRUE;	case 1: 		return FALSE;	default:		return FALSE;	}	return FALSE;}void gedit_close_all_flag_clear (void){	gedit_debug (DEBUG_FILE, "");	gedit_close_all_flag = GEDIT_CLOSE_ALL_FLAG_NORMAL;	}static voidgedit_close_all_flag_status (guchar * function){	gedit_debug(DEBUG_FILE, "");	g_return_if_fail (function!=NULL);	return;		g_print("Close all flag state is: ");	switch (gedit_close_all_flag){	case GEDIT_CLOSE_ALL_FLAG_NORMAL:		g_print("NORMAL");		break;	case GEDIT_CLOSE_ALL_FLAG_CLOSE_ALL:		g_print("CLOSE ALL");		break;	case GEDIT_CLOSE_ALL_FLAG_QUIT:		g_print("QUIT");		break;	}	g_print("  %s \n", function);}static voidgedit_close_all_flag_verify (guchar *function){	gedit_debug(DEBUG_FILE, "");	if (gedit_close_all_flag != GEDIT_CLOSE_ALL_FLAG_NORMAL)		g_warning ("The close all flag was set !!!!! Func: %s", function);}/** * gedit_file_convert_to_full_pathname: convert a file_name to a full path * @file_name_to_convert: the file name to convert *  *  Test strings   1. /home/user/./dir/././././file.txt			/home/user/dir/file.txt   2. /home/user/cvs/gedit/../../docs/file.txt		/home/user/docs/file.txt   3. File name in: /home/chema/cvs/gedit/../../cvs/../docs/././././././temp_32avo.txt   File name out: /home/chema/docs/temp_32avo.txt * *  * Return Value: a pointer to a allocated string. The calling function is responsible *               o freeing the string **/gchar *gedit_file_convert_to_full_pathname (const gchar * file_name_to_convert){	gint file_name_in_length;		gchar *file_name_in;	gchar *file_name_out;	gint i, j=0;	g_return_val_if_fail (file_name_to_convert != NULL, NULL);	if (g_path_is_absolute(file_name_to_convert))		file_name_in = g_strdup (file_name_to_convert);	else		file_name_in = g_strdup_printf ("%s/%s",						g_get_current_dir(),						file_name_to_convert);	file_name_in_length = strlen (file_name_in);	file_name_out = g_malloc (file_name_in_length + 1);	g_return_val_if_fail (file_name_in[0] == '/', NULL);	for (i = 0; i < file_name_in_length - 1; i++)	{		/* remove all the "../" from file_name */		if (file_name_in[i] == '.' && file_name_in[i+1] == '.')		{			if (i < file_name_in_length-1)				if (file_name_in[i+2] == '/')				{					/* Remove the last directory in file_name_out */					i+=2;					j--;					while (file_name_out [j-1] != '/')						j--;					j--;				}		}				/* remove all the "./"'s from file_name */		if (file_name_in[i] == '.' && file_name_in[i+1] == '/')		{			i++;			continue;		}		file_name_out [j++] = file_name_in [i];	}		file_name_out [j++] = file_name_in [i];	file_name_out [j] = '\0';	return file_name_out;} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -