Gracefully handle a rare search/replace special case

This commit is contained in:
bl0ckeduser 2013-09-22 12:06:08 -04:00
parent 24dc1853b7
commit 1bf710e2a1
1 changed files with 42 additions and 4 deletions

View File

@ -546,7 +546,9 @@ _pluma_cmd_search_find (GtkAction *action,
GtkWidget *search_dialog; GtkWidget *search_dialog;
PlumaDocument *doc; PlumaDocument *doc;
gboolean selection_exists; gboolean selection_exists;
gboolean parse_escapes;
gchar *find_text = NULL; gchar *find_text = NULL;
const gchar *search_text = NULL;
gint sel_len; gint sel_len;
pluma_debug (DEBUG_COMMANDS); pluma_debug (DEBUG_COMMANDS);
@ -578,8 +580,25 @@ _pluma_cmd_search_find (GtkAction *action,
if (selection_exists && find_text != NULL && sel_len < 80) if (selection_exists && find_text != NULL && sel_len < 80)
{ {
/*
* Special case: if the currently selected text
* is the same as the unescaped search text and
* escape sequence parsing is activated, use the
* same old search text. (Without this, if you e.g.
* search for '\n' in escaped mode and then open
* the search dialog again, you'll get an unprintable
* single-character literal '\n' in the "search for"
* box).
*/
parse_escapes = pluma_search_dialog_get_parse_escapes (PLUMA_SEARCH_DIALOG (search_dialog));
search_text = pluma_search_dialog_get_search_text (PLUMA_SEARCH_DIALOG (search_dialog));
if (!(search_text != NULL
&& !strcmp(pluma_utils_unescape_search_text(search_text), find_text)
&& parse_escapes)) {
/* General case */
pluma_search_dialog_set_search_text (PLUMA_SEARCH_DIALOG (search_dialog), pluma_search_dialog_set_search_text (PLUMA_SEARCH_DIALOG (search_dialog),
find_text); find_text);
}
g_free (find_text); g_free (find_text);
} }
else else
@ -601,7 +620,9 @@ _pluma_cmd_search_replace (GtkAction *action,
GtkWidget *replace_dialog; GtkWidget *replace_dialog;
PlumaDocument *doc; PlumaDocument *doc;
gboolean selection_exists; gboolean selection_exists;
gboolean parse_escapes;
gchar *find_text = NULL; gchar *find_text = NULL;
const gchar *search_text = NULL;
gint sel_len; gint sel_len;
pluma_debug (DEBUG_COMMANDS); pluma_debug (DEBUG_COMMANDS);
@ -633,8 +654,25 @@ _pluma_cmd_search_replace (GtkAction *action,
if (selection_exists && find_text != NULL && sel_len < 80) if (selection_exists && find_text != NULL && sel_len < 80)
{ {
/*
* Special case: if the currently selected text
* is the same as the unescaped search text and
* escape sequence parsing is activated, use the
* same old search text. (Without this, if you e.g.
* search for '\n' in escaped mode and then open
* the search dialog again, you'll get an unprintable
* single-character literal '\n' in the "search for"
* box).
*/
parse_escapes = pluma_search_dialog_get_parse_escapes (PLUMA_SEARCH_DIALOG (replace_dialog));
search_text = pluma_search_dialog_get_search_text (PLUMA_SEARCH_DIALOG (replace_dialog));
if (!(search_text != NULL
&& !strcmp(pluma_utils_unescape_search_text(search_text), find_text)
&& parse_escapes)) {
/* General case */
pluma_search_dialog_set_search_text (PLUMA_SEARCH_DIALOG (replace_dialog), pluma_search_dialog_set_search_text (PLUMA_SEARCH_DIALOG (replace_dialog),
find_text); find_text);
}
g_free (find_text); g_free (find_text);
} }
else else