From 2eb745939eadf1f7589f3a6440d8a6c4ca9111fe Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Thu, 21 Oct 2004 16:25:44 +0000
Subject: [PATCH] when saving or changing file positions, be sure not to ignore
 placewewant; also move a misplaced changelog entry

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2006 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog    | 23 +++++++++++++----------
 src/nano.c   |  4 +++-
 src/search.c |  6 ++++--
 3 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7771c656..d260fb86 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -80,6 +80,9 @@ CVS code -
 	  findnextstr().  Changes to do_int_spell_fix(), findnextstr(),
 	  do_search(), do_research(), do_replace(), and
 	  do_find_bracket(). (DLR)
+	- When saving or changing file positions, be sure not to ignore
+	  placewewant.  Changes to do_int_spell_fix(), findnextstr(),
+	  do_replace_loop(), and do_replace(). (DLR)
 - files.c:
   do_insertfile()
 	- Readd the NANO_SMALL #ifdef around the start_again: label to
@@ -181,6 +184,16 @@ CVS code -
 	  the search prompt to the "Go To Line" prompt, since the
 	  toggling works both ways now and non-numeric text shouldn't be
 	  lost when going only one of those ways. (DLR)
+  findnextstr()
+	- Take the no_sameline parameter after can_display_wrap and
+	  wholewords, not after all other parameters. (DLR)
+	- Maintain current_y's value when moving up or down lines so
+	  that smooth scrolling works correctly. (DLR)
+	- Fix handling of the wholewords flag so that it works with
+	  regular expressions and in conjunction with the no_sameline
+	  flag, and add new parameters wrapped (used to return the value
+	  of search_last_line) and needle_len (used to return the length
+	  of the match). (DLR)
   do_replace_loop()
 	- Miscellaneous cleanups: set current to real_current and
 	  current_x to current_x_save, only turn the mark off and call
@@ -192,16 +205,6 @@ CVS code -
 	  replacing only marked text when the mark is on. (DLR,
 	  suggested by Joseph Birthisel)
 	- Return ssize_t instead of int. (DLR)
-  findnextstr()
-	- Take the no_sameline parameter after can_display_wrap and
-	  wholewords, not after all other parameters. (DLR)
-	- Maintain current_y's value when moving up or down lines so
-	  that smooth scrolling works correctly. (DLR)
-	- Fix handling of the wholewords flag so that it works with
-	  regular expressions and in conjunction with the no_sameline
-	  flag, and add new parameters wrapped (used to return the value
-	  of search_last_line) and needle_len (used to return the length
-	  of the match). (DLR)
 - utils.c:
   regexp_bol_or_eol()
 	- Don't assume any longer that string will be found if
diff --git a/src/nano.c b/src/nano.c
index 62414cac..c6c8372c 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1420,7 +1420,7 @@ bool do_int_spell_fix(const char *word)
 {
     char *save_search;
     char *save_replace;
-    size_t current_x_save = current_x;
+    size_t current_x_save = current_x, pww_save = placewewant;
     filestruct *edittop_save = edittop;
     filestruct *current_save = current;
 	/* Save where we are. */
@@ -1466,6 +1466,7 @@ bool do_int_spell_fix(const char *word)
     edittop = fileage;
     current = fileage;
     current_x = -1;
+    placewewant = 0;
 
     /* Find the first whole-word occurrence of word. */
     while (findnextstr(TRUE, TRUE, FALSE, fileage, 0, word, NULL,
@@ -1503,6 +1504,7 @@ bool do_int_spell_fix(const char *word)
     edittop = edittop_save;
     current = current_save;
     current_x = current_x_save;
+    placewewant = pww_save;
 
     /* Restore case sensitivity setting. */
     if (!case_sens_set)
diff --git a/src/search.c b/src/search.c
index 047a4efa..70edcfd1 100644
--- a/src/search.c
+++ b/src/search.c
@@ -412,6 +412,7 @@ bool findnextstr(bool can_display_wrap, bool wholeword, bool
     current = fileptr;
     current_x = current_x_find;
     current_y = current_y_find;
+    placewewant = xplustabs();
 
     /* needle_len holds the length of needle. */
     if (needle_len != NULL)
@@ -749,7 +750,6 @@ ssize_t do_replace_loop(const char *needle, filestruct *real_current,
 #endif
 
 	if (!replaceall) {
-	    placewewant = xplustabs();
 	    edit_redraw(current_save, old_pww);
 	    old_pww = placewewant;
 	}
@@ -870,7 +870,7 @@ void do_replace(void)
 {
     int i;
     filestruct *edittop_save, *begin;
-    size_t beginx;
+    size_t beginx, pww_save;
     ssize_t numreplaced;
 
     if (ISSET(VIEW_MODE)) {
@@ -937,6 +937,7 @@ void do_replace(void)
     edittop_save = edittop;
     begin = current;
     beginx = current_x;
+    pww_save = placewewant;
 
     numreplaced = do_replace_loop(last_search, begin, &beginx, FALSE);
 
@@ -944,6 +945,7 @@ void do_replace(void)
     edittop = edittop_save;
     current = begin;
     current_x = beginx;
+    placewewant = pww_save;
 
     renumber_all();
     edit_refresh();
-- 
GitLab