SF.net SVN: geany: [917] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sun Oct 22 16:52:49 UTC 2006


Revision: 917
          http://svn.sourceforge.net/geany/?rev=917&view=rev
Author:   eht16
Date:     2006-10-22 09:52:42 -0700 (Sun, 22 Oct 2006)

Log Message:
-----------
Let the Find, Replace and FIF dialogs use the word at current cursor position if there is no selection.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/sci_cb.c
    trunk/src/sci_cb.h
    trunk/src/search.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-10-22 16:38:04 UTC (rev 916)
+++ trunk/ChangeLog	2006-10-22 16:52:42 UTC (rev 917)
@@ -5,6 +5,9 @@
  * geany.glade, src/interface.c, src/geany.h, src/keyfile.c,
    src/main.c: Removed previously added configuration option and
                removed the right alignment of the toolbar quit button.
+ * src/sci_cb.c, src/sci_cb.h, src/search.c:
+   Let the Find, Replace and FIF dialogs use the word at current cursor
+   position if there is no selection.
 
 
 2006-10-22  Nick Treleaven  <nick.treleaven at btinternet.com>

Modified: trunk/src/sci_cb.c
===================================================================
--- trunk/src/sci_cb.c	2006-10-22 16:38:04 UTC (rev 916)
+++ trunk/src/sci_cb.c	2006-10-22 16:52:42 UTC (rev 917)
@@ -450,14 +450,22 @@
 }
 
 
+/* Reads the word at given cursor position and writes it into the given buffer. The buffer will be
+ * NULL terminated in any case, even when the word is truncated because wordlen is too small.
+ * position can be -1, then the current position is used. */
 void sci_cb_find_current_word(ScintillaObject *sci, gint pos, gchar *word, size_t wordlen)
 {
-	gint line = sci_get_line_from_position(sci, pos);
-	gint line_start = sci_get_position_from_line(sci, line);
-	gint startword = pos - line_start;
-	gint endword = pos - line_start;
+	gint line, line_start, startword, endword;
 	gchar *chunk;
 
+	if (pos == -1)
+		pos = sci_get_current_position(sci);
+		
+	line = sci_get_line_from_position(sci, pos);
+	line_start = sci_get_position_from_line(sci, line);
+	startword = pos - line_start;
+	endword = pos - line_start;
+
 	word[0] = '\0';
 	chunk = sci_get_line(sci, line);
 

Modified: trunk/src/sci_cb.h
===================================================================
--- trunk/src/sci_cb.h	2006-10-22 16:38:04 UTC (rev 916)
+++ trunk/src/sci_cb.h	2006-10-22 16:52:42 UTC (rev 917)
@@ -65,6 +65,9 @@
 
 gboolean sci_cb_handle_xml(ScintillaObject *sci, gchar ch);
 
+/* Reads the word at given cursor position and writes it into the given buffer. The buffer will be
+ * NULL terminated in any case, even when the word is truncated because wordlen is too small.
+ * position can be -1, then the current position is used. */
 void sci_cb_find_current_word(ScintillaObject *sci, gint pos, gchar *word, size_t wordlen);
 
 gboolean sci_cb_show_calltip(gint idx, gint pos);

Modified: trunk/src/search.c
===================================================================
--- trunk/src/search.c	2006-10-22 16:38:04 UTC (rev 916)
+++ trunk/src/search.c	2006-10-22 16:52:42 UTC (rev 917)
@@ -31,6 +31,7 @@
 #include "document.h"
 #include "sciwrappers.h"
 #include "ui_utils.h"
+#include "sci_cb.h"
 
 #include <unistd.h>
 #include <string.h>
@@ -206,6 +207,26 @@
 #endif
 
 
+static gchar *get_default_text(gint idx)
+{
+	gchar *s = NULL;
+	
+	if (sci_get_lines_selected(doc_list[idx].sci) == 1)
+	{
+		s = g_malloc(sci_get_selected_text_length(doc_list[idx].sci));
+		sci_get_selected_text(doc_list[idx].sci, s);
+	}
+	else if (sci_get_lines_selected(doc_list[idx].sci) == 0)
+	{	// use the word at current cursor position
+		static gchar word[GEANY_MAX_WORD_LENGTH];
+		sci_cb_find_current_word(doc_list[idx].sci, -1, word, sizeof(word));
+		if (word[0] != '\0') s = g_strdup(word);
+	}
+	
+	return s;
+}
+
+
 void search_show_find_dialog()
 {
 	gint idx = document_get_cur_idx();
@@ -213,11 +234,7 @@
 
 	if (idx == -1 || ! doc_list[idx].is_valid) return;
 
-	if (sci_get_lines_selected(doc_list[idx].sci) == 1)
-	{
-		sel = g_malloc(sci_get_selected_text_length(doc_list[idx].sci));
-		sci_get_selected_text(doc_list[idx].sci, sel);
-	}
+	sel = get_default_text(idx);
 
 	if (widgets.find_dialog == NULL)
 	{
@@ -281,11 +298,7 @@
 
 	if (idx == -1 || ! doc_list[idx].is_valid) return;
 
-	if (sci_get_lines_selected(doc_list[idx].sci) == 1)
-	{
-		sel = g_malloc(sci_get_selected_text_length(doc_list[idx].sci));
-		sci_get_selected_text(doc_list[idx].sci, sel);
-	}
+	sel = get_default_text(idx);
 
 	if (widgets.replace_dialog == NULL)
 	{
@@ -547,11 +560,7 @@
 		gtk_widget_show_all(widgets.find_in_files_dialog);
 	}
 
-	if (sci_get_lines_selected(doc_list[idx].sci) == 1)
-	{
-		sel = g_malloc(sci_get_selected_text_length(doc_list[idx].sci));
-		sci_get_selected_text(doc_list[idx].sci, sel);
-	}
+	sel = get_default_text(idx);
 
 	entry2 = GTK_BIN(combo)->child;
 	if (sel) gtk_entry_set_text(GTK_ENTRY(entry2), sel);


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