Make escape sequence parsing in search a GUI checkbox option

This commit is contained in:
bl0ckeduser 2013-09-22 11:29:49 -04:00
parent 9b7c40cb73
commit 24dc1853b7
6 changed files with 111 additions and 10 deletions

View File

@ -70,6 +70,7 @@ struct _PlumaSearchDialogPrivate
GtkWidget *entire_word_checkbutton; GtkWidget *entire_word_checkbutton;
GtkWidget *backwards_checkbutton; GtkWidget *backwards_checkbutton;
GtkWidget *wrap_around_checkbutton; GtkWidget *wrap_around_checkbutton;
GtkWidget *parse_escapes_checkbutton;
GtkWidget *find_button; GtkWidget *find_button;
GtkWidget *replace_button; GtkWidget *replace_button;
GtkWidget *replace_all_button; GtkWidget *replace_all_button;
@ -357,6 +358,7 @@ pluma_search_dialog_init (PlumaSearchDialog *dlg)
"entire_word_checkbutton", &dlg->priv->entire_word_checkbutton, "entire_word_checkbutton", &dlg->priv->entire_word_checkbutton,
"search_backwards_checkbutton", &dlg->priv->backwards_checkbutton, "search_backwards_checkbutton", &dlg->priv->backwards_checkbutton,
"wrap_around_checkbutton", &dlg->priv->wrap_around_checkbutton, "wrap_around_checkbutton", &dlg->priv->wrap_around_checkbutton,
"parse_escapes_checkbutton", &dlg->priv->parse_escapes_checkbutton,
NULL); NULL);
g_free (file); g_free (file);
@ -632,3 +634,21 @@ pluma_search_dialog_get_wrap_around (PlumaSearchDialog *dialog)
return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->wrap_around_checkbutton)); return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->wrap_around_checkbutton));
} }
void
pluma_search_dialog_set_parse_escapes (PlumaSearchDialog *dialog,
gboolean parse_escapes)
{
g_return_if_fail (PLUMA_IS_SEARCH_DIALOG (dialog));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->parse_escapes_checkbutton),
parse_escapes);
}
gboolean
pluma_search_dialog_get_parse_escapes (PlumaSearchDialog *dialog)
{
g_return_val_if_fail (PLUMA_IS_SEARCH_DIALOG (dialog), FALSE);
return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->priv->parse_escapes_checkbutton));
}

View File

@ -123,6 +123,11 @@ void pluma_search_dialog_set_wrap_around (PlumaSearchDialog *dialog,
gboolean wrap_around); gboolean wrap_around);
gboolean pluma_search_dialog_get_wrap_around (PlumaSearchDialog *dialog); gboolean pluma_search_dialog_get_wrap_around (PlumaSearchDialog *dialog);
void pluma_search_dialog_set_parse_escapes (PlumaSearchDialog *dialog,
gboolean parse_escapes);
gboolean pluma_search_dialog_get_parse_escapes (PlumaSearchDialog *dialog);
G_END_DECLS G_END_DECLS
#endif /* __PLUMA_SEARCH_DIALOG_H__ */ #endif /* __PLUMA_SEARCH_DIALOG_H__ */

View File

@ -229,6 +229,24 @@
<property name="fill">False</property> <property name="fill">False</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkCheckButton" id="parse_escapes_checkbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Parse escape sequences (e.g. \n)</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">True</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="padding">0</property> <property name="padding">0</property>

View File

@ -229,6 +229,7 @@ do_find (PlumaSearchDialog *dialog,
gboolean entire_word; gboolean entire_word;
gboolean wrap_around; gboolean wrap_around;
gboolean search_backwards; gboolean search_backwards;
gboolean parse_escapes;
guint flags = 0; guint flags = 0;
guint old_flags = 0; guint old_flags = 0;
gboolean found; gboolean found;
@ -241,12 +242,17 @@ do_find (PlumaSearchDialog *dialog,
doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view))); doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_search_text (dialog));
match_case = pluma_search_dialog_get_match_case (dialog); match_case = pluma_search_dialog_get_match_case (dialog);
entire_word = pluma_search_dialog_get_entire_word (dialog); entire_word = pluma_search_dialog_get_entire_word (dialog);
search_backwards = pluma_search_dialog_get_backwards (dialog); search_backwards = pluma_search_dialog_get_backwards (dialog);
wrap_around = pluma_search_dialog_get_wrap_around (dialog); wrap_around = pluma_search_dialog_get_wrap_around (dialog);
parse_escapes = pluma_search_dialog_get_parse_escapes (dialog);
if (!parse_escapes) {
entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_search_text (dialog));
} else {
entry_text = pluma_search_dialog_get_search_text (dialog);
}
PLUMA_SEARCH_SET_CASE_SENSITIVE (flags, match_case); PLUMA_SEARCH_SET_CASE_SENSITIVE (flags, match_case);
PLUMA_SEARCH_SET_ENTIRE_WORD (flags, entire_word); PLUMA_SEARCH_SET_ENTIRE_WORD (flags, entire_word);
@ -268,8 +274,13 @@ do_find (PlumaSearchDialog *dialog,
if (found) if (found)
text_found (window, 0); text_found (window, 0);
else else {
if (!parse_escapes) {
text_not_found (window, pluma_utils_unescape_search_text (entry_text)); text_not_found (window, pluma_utils_unescape_search_text (entry_text));
} else {
text_not_found (window, entry_text);
}
}
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
PLUMA_SEARCH_DIALOG_REPLACE_RESPONSE, PLUMA_SEARCH_DIALOG_REPLACE_RESPONSE,
@ -330,17 +341,27 @@ do_replace (PlumaSearchDialog *dialog,
gchar *unescaped_replace_text; gchar *unescaped_replace_text;
gchar *selected_text = NULL; gchar *selected_text = NULL;
gboolean match_case; gboolean match_case;
gboolean parse_escapes;
doc = pluma_window_get_active_document (window); doc = pluma_window_get_active_document (window);
if (doc == NULL) if (doc == NULL)
return; return;
parse_escapes = pluma_search_dialog_get_parse_escapes (dialog);
if (!parse_escapes) {
search_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_search_text (dialog)); search_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_search_text (dialog));
} else {
search_entry_text = pluma_search_dialog_get_search_text (dialog);
}
g_return_if_fail ((search_entry_text) != NULL); g_return_if_fail ((search_entry_text) != NULL);
g_return_if_fail ((*search_entry_text) != '\0'); g_return_if_fail ((*search_entry_text) != '\0');
/* replace text may be "", we just delete */ /* replace text may be "", we just delete */
if (!parse_escapes) {
replace_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_replace_text (dialog)); replace_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_replace_text (dialog));
} else {
replace_entry_text = pluma_search_dialog_get_replace_text (dialog);
}
g_return_if_fail ((replace_entry_text) != NULL); g_return_if_fail ((replace_entry_text) != NULL);
unescaped_search_text = pluma_utils_unescape_search_text (search_entry_text); unescaped_search_text = pluma_utils_unescape_search_text (search_entry_text);
@ -385,6 +406,7 @@ do_replace_all (PlumaSearchDialog *dialog,
const gchar *replace_entry_text; const gchar *replace_entry_text;
gboolean match_case; gboolean match_case;
gboolean entire_word; gboolean entire_word;
gboolean parse_escapes;
guint flags = 0; guint flags = 0;
gint count; gint count;
@ -394,12 +416,21 @@ do_replace_all (PlumaSearchDialog *dialog,
doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view))); doc = PLUMA_DOCUMENT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (active_view)));
search_entry_text = pluma_utils_escape_search_text( pluma_search_dialog_get_search_text (dialog)); parse_escapes = pluma_search_dialog_get_parse_escapes (dialog);
if (!parse_escapes) {
search_entry_text = pluma_utils_escape_search_text(pluma_search_dialog_get_search_text (dialog));
} else {
search_entry_text = pluma_search_dialog_get_search_text (dialog);
}
g_return_if_fail ((search_entry_text) != NULL); g_return_if_fail ((search_entry_text) != NULL);
g_return_if_fail ((*search_entry_text) != '\0'); g_return_if_fail ((*search_entry_text) != '\0');
/* replace text may be "", we just delete all occurrencies */ /* replace text may be "", we just delete all occurrencies */
if (!parse_escapes) {
replace_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_replace_text (dialog)); replace_entry_text = pluma_utils_escape_search_text (pluma_search_dialog_get_replace_text (dialog));
} else {
replace_entry_text = pluma_search_dialog_get_replace_text (dialog);
}
g_return_if_fail ((replace_entry_text) != NULL); g_return_if_fail ((replace_entry_text) != NULL);
match_case = pluma_search_dialog_get_match_case (dialog); match_case = pluma_search_dialog_get_match_case (dialog);
@ -419,7 +450,11 @@ do_replace_all (PlumaSearchDialog *dialog,
} }
else else
{ {
if (!parse_escapes) {
text_not_found (window, pluma_utils_unescape_search_text (search_entry_text)); text_not_found (window, pluma_utils_unescape_search_text (search_entry_text));
} else {
text_not_found (window, search_entry_text);
}
} }
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),

View File

@ -78,7 +78,8 @@ typedef enum
{ {
PLUMA_SEARCH_DONT_SET_FLAGS = 1 << 0, PLUMA_SEARCH_DONT_SET_FLAGS = 1 << 0,
PLUMA_SEARCH_ENTIRE_WORD = 1 << 1, PLUMA_SEARCH_ENTIRE_WORD = 1 << 1,
PLUMA_SEARCH_CASE_SENSITIVE = 1 << 2 PLUMA_SEARCH_CASE_SENSITIVE = 1 << 2,
PLUMA_SEARCH_PARSE_ESCAPES = 1 << 3
} PlumaSearchFlags; } PlumaSearchFlags;
@ -322,6 +323,10 @@ void _pluma_document_search_region (PlumaDocument *doc,
#define PLUMA_SEARCH_SET_CASE_SENSITIVE(sflags,state) ((state == TRUE) ? \ #define PLUMA_SEARCH_SET_CASE_SENSITIVE(sflags,state) ((state == TRUE) ? \
(sflags |= PLUMA_SEARCH_CASE_SENSITIVE) : (sflags &= ~PLUMA_SEARCH_CASE_SENSITIVE)) (sflags |= PLUMA_SEARCH_CASE_SENSITIVE) : (sflags &= ~PLUMA_SEARCH_CASE_SENSITIVE))
#define PLUMA_SEARCH_IS_PARSE_ESCAPES(sflags) ((sflags & PLUMA_SEARCH_PARSE_ESCAPES) != 0)
#define PLUMA_SEARCH_SET_PARSE_ESCAPES(sflags,state) ((state == TRUE) ? \
(sflags |= PLUMA_SEARCH_PARSE_ESCAPES) : (sflags &= ~PLUMA_SEARCH_PARSE_ESCAPES))
typedef GMountOperation *(*PlumaMountOperationFactory)(PlumaDocument *doc, typedef GMountOperation *(*PlumaMountOperationFactory)(PlumaDocument *doc,
gpointer userdata); gpointer userdata);

View File

@ -1165,6 +1165,14 @@ match_case_menu_item_toggled (GtkCheckMenuItem *checkmenuitem,
gtk_check_menu_item_get_active (checkmenuitem)); gtk_check_menu_item_get_active (checkmenuitem));
} }
static void
parse_escapes_menu_item_toggled (GtkCheckMenuItem *checkmenuitem,
PlumaView *view)
{
PLUMA_SEARCH_SET_PARSE_ESCAPES (view->priv->search_flags,
gtk_check_menu_item_get_active (checkmenuitem));
}
static gboolean static gboolean
real_search_enable_popdown (gpointer data) real_search_enable_popdown (gpointer data)
{ {
@ -1243,6 +1251,16 @@ search_entry_populate_popup (GtkEntry *entry,
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
PLUMA_SEARCH_IS_CASE_SENSITIVE (view->priv->search_flags)); PLUMA_SEARCH_IS_CASE_SENSITIVE (view->priv->search_flags));
gtk_widget_show (menu_item); gtk_widget_show (menu_item);
/* create "Parse escapes" menu item. */
menu_item = gtk_check_menu_item_new_with_mnemonic (_("_Parse escape sequences (e.g. \n)"));
g_signal_connect (G_OBJECT (menu_item), "toggled",
G_CALLBACK (parse_escapes_menu_item_toggled),
view);
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
PLUMA_SEARCH_IS_PARSE_ESCAPES (view->priv->search_flags));
gtk_widget_show (menu_item);
} }
static void static void