SF.net SVN: geany: [750] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sun Aug 20 15:47:43 UTC 2006


Revision: 750
Author:   eht16
Date:     2006-08-20 08:47:18 -0700 (Sun, 20 Aug 2006)
ViewCVS:  http://svn.sourceforge.net/geany/?rev=750&view=rev

Log Message:
-----------
Moved prototype for geany_debug() to main.h.
Moved declaration of document struct to document.h.
Keep selection when commenting and uncommenting code.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/build.c
    trunk/src/document.c
    trunk/src/document.h
    trunk/src/geany.h
    trunk/src/highlighting.c
    trunk/src/main.h
    trunk/src/sci_cb.c
    trunk/src/search.c
    trunk/src/templates.c
    trunk/src/utils.c
    trunk/src/vte.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/ChangeLog	2006-08-20 15:47:18 UTC (rev 750)
@@ -1,3 +1,13 @@
+2006-08-20  Enrico Tröger  <enrico.troeger at uvena.de>
+
+ * src/build.c, src/document.c, src/document.h, src/geany.h,
+   src/highlighting.c, src/main.h, src/sci_cb.c, src/search.c,
+   src/templates.c, src/utils.c, src/vte.c:
+   Moved prototype for geany_debug() to main.h.
+   Moved declaration of document struct to document.h.
+ * src/sci_cb.c: Keep selection when commenting and uncommenting code.
+
+
 2006-08-20  Nick Treleaven  <nick.treleaven at btinternet.com>
 
  * src/callbacks.c, src/main.c:

Modified: trunk/src/build.c
===================================================================
--- trunk/src/build.c	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/build.c	2006-08-20 15:47:18 UTC (rev 750)
@@ -40,6 +40,7 @@
 #include "dialogs.h"
 #include "msgwindow.h"
 #include "document.h"
+#include "main.h"
 
 
 static gboolean build_iofunc(GIOChannel *ioc, GIOCondition cond, gpointer data);

Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/document.c	2006-08-20 15:47:18 UTC (rev 750)
@@ -55,6 +55,7 @@
 #include "utils.h"
 #include "encodings.h"
 #include "notebook.h"
+#include "main.h"
 
 
 /* Returns -1 if no text found or the new range endpoint after replacing. */

Modified: trunk/src/document.h
===================================================================
--- trunk/src/document.h	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/document.h	2006-08-20 15:47:18 UTC (rev 750)
@@ -24,7 +24,40 @@
 #ifndef GEANY_DOCUMENT_H
 #define GEANY_DOCUMENT_H 1
 
+#include "geany.h"
 
+/* structure for representing an open tab with all its related stuff. */
+typedef struct document
+{
+	gboolean		 is_valid;
+	gboolean		 has_tags;
+	// the filename is encoded in UTF-8, but every GLibC function expect the locale representation
+	gchar 			*file_name;
+	gchar 			*encoding;
+	gboolean		 has_bom;
+	filetype		*file_type;
+	TMWorkObject	*tm_file;
+	ScintillaObject	*sci;
+	GtkWidget		*tab_label;
+	GtkWidget		*tabmenu_label;
+	GtkWidget		*tag_tree;
+	GtkTreeStore	*tag_store;
+	GtkTreeIter		 iter;
+	gboolean		 readonly;
+	gboolean		 changed;
+	gboolean		 do_overwrite;
+	gboolean		 line_breaking;
+	gboolean		 use_auto_indention;
+	time_t			 last_check;	// to remember the last disk check
+	time_t			 mtime;
+} document;
+
+
+/* array of document elements to hold all information of the notebook tabs */
+document doc_list[GEANY_MAX_OPEN_FILES];
+
+
+
 /* returns the index of the notebook page which has the given filename */
 gint document_find_by_filename(const gchar*, gboolean is_tm_filename);
 

Modified: trunk/src/geany.h
===================================================================
--- trunk/src/geany.h	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/geany.h	2006-08-20 15:47:18 UTC (rev 750)
@@ -77,38 +77,6 @@
 
 
 
-/* structure for representing an open tab with all its related stuff. */
-typedef struct document
-{
-	gboolean		 is_valid;
-	gboolean		 has_tags;
-	// the filename is encoded in UTF-8, but every GLibC function expect the locale representation
-	gchar 			*file_name;
-	gchar 			*encoding;
-	gboolean		 has_bom;
-	filetype		*file_type;
-	TMWorkObject	*tm_file;
-	ScintillaObject	*sci;
-	GtkWidget		*tab_label;
-	GtkWidget		*tabmenu_label;
-	GtkWidget		*tag_tree;
-	GtkTreeStore	*tag_store;
-	GtkTreeIter		 iter;
-	gboolean		 readonly;
-	gboolean		 changed;
-	gboolean		 do_overwrite;
-	gboolean		 line_breaking;
-	gboolean		 use_auto_indention;
-	time_t			 last_check;	// to remember the last disk check
-	time_t			 mtime;
-} document;
-
-
-
-/* array of document elements to hold all information of the notebook tabs */
-document doc_list[GEANY_MAX_OPEN_FILES];
-
-
 /* store some pointers and variables for frequently used widgets  */
 typedef struct MyApp
 {
@@ -253,8 +221,5 @@
 	GIGABYTE = (MEGABYTE*1024)
 };
 
-// implementation in main.c
-void geany_debug(gchar const *format, ...);
 
-
 #endif

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/highlighting.c	2006-08-20 15:47:18 UTC (rev 750)
@@ -27,6 +27,7 @@
 #include "highlighting.h"
 #include "sci_cb.h"
 #include "utils.h"
+#include "main.h"
 
 
 static style_set *types[GEANY_MAX_FILE_TYPES] = { NULL };

Modified: trunk/src/main.h
===================================================================
--- trunk/src/main.h	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/main.h	2006-08-20 15:47:18 UTC (rev 750)
@@ -27,4 +27,6 @@
 
 void fifo_finalize();
 
+void geany_debug(gchar const *format, ...);
+
 #endif

Modified: trunk/src/sci_cb.c
===================================================================
--- trunk/src/sci_cb.c	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/sci_cb.c	2006-08-20 15:47:18 UTC (rev 750)
@@ -31,6 +31,7 @@
 #include "document.h"
 #include "sciwrappers.h"
 #include "utils.h"
+#include "main.h"
 
 static struct
 {
@@ -910,15 +911,18 @@
 
 void sci_cb_do_uncomment(gint idx)
 {
-	gint first_line;
-	gint last_line;
+	gint first_line, last_line;
 	gint x, i, line_start, line_len;
+	gint sel_start, sel_end, co_len;
 	gchar sel[64], *co, *cc;
-	gboolean break_loop = FALSE;
+	gboolean break_loop = FALSE, single_line = FALSE;
 	filetype *ft;
 
 	if (idx == -1 || ! doc_list[idx].is_valid || doc_list[idx].file_type == NULL) return;
 
+	sel_start = sci_get_selection_start(doc_list[idx].sci);
+	sel_end = sci_get_selection_end(doc_list[idx].sci);
+
 	ft = doc_list[idx].file_type;
 
 	first_line = sci_get_line_from_position(doc_list[idx].sci,
@@ -941,6 +945,8 @@
 	cc = ft->comment_close;
 	if (co == NULL) return;
 
+	co_len = strlen(co);
+
 	SSM(doc_list[idx].sci, SCI_BEGINUNDOACTION, 0, 0);
 
 	for (i = first_line; (i <= last_line) && (! break_loop); i++)
@@ -962,9 +968,10 @@
 			if (cc == NULL || strlen(cc) == 0)
 			{
 				guint i;
-				guint len = strlen(co);
 
-				switch (len)
+				single_line = TRUE;
+
+				switch (co_len)
 				{
 					case 1: if (sel[x] != co[0]) continue; break;
 					case 2: if (sel[x] != co[0] || sel[x+1] != co[1]) continue; break;
@@ -973,8 +980,8 @@
 					default: continue;
 				}
 
-				SSM(doc_list[idx].sci, SCI_GOTOPOS, line_start + x + len, 0);
-				for (i = 0; i < len; i++) SSM(doc_list[idx].sci, SCI_DELETEBACK, 0, 0);
+				SSM(doc_list[idx].sci, SCI_GOTOPOS, line_start + x + co_len, 0);
+				for (i = 0; i < co_len; i++) SSM(doc_list[idx].sci, SCI_DELETEBACK, 0, 0);
 			}
 			// use multi line comment
 			else
@@ -1031,7 +1038,6 @@
 					len = sci_get_line_length(doc_list[idx].sci, line);
 					linebuf = g_malloc(len + 1);
 					sci_get_line(doc_list[idx].sci, line, linebuf);
-					geany_debug("%d", line);
 					linebuf[len] = '\0';
 					x = 0;
 					while (linebuf[x] != '\0' && isspace(linebuf[x])) x++;
@@ -1046,20 +1052,36 @@
 		}
 	}
 	SSM(doc_list[idx].sci, SCI_ENDUNDOACTION, 0, 0);
+
+	// restore selection
+	if (single_line)
+	{
+		sci_set_selection_start(doc_list[idx].sci, sel_start - co_len);
+		sci_set_selection_end(doc_list[idx].sci, sel_end - ((i - first_line) * co_len));
+	}
+	else
+	{
+		gint eol_len = (sci_get_eol_mode(doc_list[idx].sci) == SC_EOL_CRLF) ? 2 : 1;
+		sci_set_selection_start(doc_list[idx].sci, sel_start - co_len - eol_len);
+		sci_set_selection_end(doc_list[idx].sci, sel_end - co_len - eol_len);
+	}
 }
 
 
 void sci_cb_do_comment(gint idx)
 {
-	gint first_line;
-	gint last_line;
+	gint first_line, last_line;
 	gint x, i, line_start, line_len;
+	gint sel_start, sel_end, co_len;
 	gchar sel[64], *co, *cc;
-	gboolean break_loop = FALSE;
+	gboolean break_loop = FALSE, single_line = FALSE;
 	filetype *ft;
 
 	if (idx == -1 || ! doc_list[idx].is_valid || doc_list[idx].file_type == NULL) return;
 
+	sel_start = sci_get_selection_start(doc_list[idx].sci);
+	sel_end = sci_get_selection_end(doc_list[idx].sci);
+
 	ft = doc_list[idx].file_type;
 
 	first_line = sci_get_line_from_position(doc_list[idx].sci,
@@ -1082,6 +1104,8 @@
 	cc = ft->comment_close;
 	if (co == NULL) return;
 
+	co_len = strlen(co);
+
 	SSM(doc_list[idx].sci, SCI_BEGINUNDOACTION, 0, 0);
 
 	for (i = first_line; (i <= last_line) && (! break_loop); i++)
@@ -1105,7 +1129,7 @@
 				/* disabled because of #1521714, it makes sense to double(or triple, ...) comment
 				*  if someone think it is not that good we could introduce a config option for it
 				gboolean do_continue = FALSE;
-				switch (strlen(co))
+				switch (co_len)
 				{
 					case 1: if (sel[x] == co[0]) do_continue = TRUE; break;
 					case 2: if (sel[x] == co[0] && sel[x+1] == co[1]) do_continue = TRUE; break;
@@ -1115,6 +1139,7 @@
 				}
 				if (do_continue) continue;
 				*/
+				single_line = TRUE;
 				if (ft->comment_use_indent)
 					sci_insert_text(doc_list[idx].sci, line_start + x, co);
 				else
@@ -1165,6 +1190,20 @@
 		}
 	}
 	SSM(doc_list[idx].sci, SCI_ENDUNDOACTION, 0, 0);
+
+	// restore selection
+	if (single_line)
+	{
+		sci_set_selection_start(doc_list[idx].sci, sel_start + co_len);
+		sci_set_selection_end(doc_list[idx].sci, sel_end + ((i - first_line) * co_len));
+	}
+	else
+	{
+		gint eol_len = (sci_get_eol_mode(doc_list[idx].sci) == SC_EOL_CRLF) ? 2 : 1;
+		sci_set_selection_start(doc_list[idx].sci, sel_start + co_len + eol_len);
+		sci_set_selection_end(doc_list[idx].sci, sel_end + co_len + eol_len);
+	}
+
 }
 
 

Modified: trunk/src/search.c
===================================================================
--- trunk/src/search.c	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/search.c	2006-08-20 15:47:18 UTC (rev 750)
@@ -28,6 +28,7 @@
 #include "msgwindow.h"
 #include "document.h"
 #include "sciwrappers.h"
+#include "main.h"
 
 #include <unistd.h>
 #include <string.h>

Modified: trunk/src/templates.c
===================================================================
--- trunk/src/templates.c	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/templates.c	2006-08-20 15:47:18 UTC (rev 750)
@@ -27,6 +27,7 @@
 #include "templates.h"
 #include "support.h"
 #include "utils.h"
+#include "document.h"
 
 // some simple macros to reduce code size and make the code readable
 #define templates_get_filename(x) g_strconcat(app->configdir, G_DIR_SEPARATOR_S, x, NULL)

Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/utils.c	2006-08-20 15:47:18 UTC (rev 750)
@@ -49,6 +49,7 @@
 #include "sciwrappers.h"
 #include "dialogs.h"
 #include "win32.h"
+#include "main.h"
 
 #include "utils.h"
 

Modified: trunk/src/vte.c
===================================================================
--- trunk/src/vte.c	2006-08-20 12:33:09 UTC (rev 749)
+++ trunk/src/vte.c	2006-08-20 15:47:18 UTC (rev 750)
@@ -35,6 +35,7 @@
 #include "support.h"
 #include "utils.h"
 #include "callbacks.h"
+#include "main.h"
 
 
 VteInfo vte_info;
@@ -413,7 +414,7 @@
 
 
 /* Taken from Terminal by os-cillation: terminal_screen_get_working_directory, thanks.
- * Determinies the working directory using various OS-specific mechanisms. */
+ * Determines the working directory using various OS-specific mechanisms. */
 const gchar* vte_get_working_directory()
 {
   gchar  buffer[4096 + 1];


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Commits mailing list