toggle_init()
- Added #ifdef around toggle_regex_msg to get rid of compiler
warning.
+- search.c
+ findnexstr()
+ - New arg for begin_x variable, basically a rewrite that
+ makes a little more sense and isn't quite as messy (Rocco Corsi).
+ - Update the line we're checking if not the whole screen, because
+ it's quite possible the search team could exist somewhere way
+ to the right on the same line, for example.
+ replace_abort()
+ - Add reset of placewewant, stops cursor from jumping when moving
+ cursor after a replace.
- winio.c
nanogetstr()
- Added check for 343 in while loop to get rid of getting "locked"
into statusbar" bug in odd $TERMs like iris-ansi.
+ nanoget_repaint()
+ - New function, removes about 30 lines of duplicate code in
+ nanogetstr().
nano 0.9.19 - 10/02/2000
- General
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-10-18 15:38-0400\n"
+"POT-Creation-Date: 2000-10-24 01:12-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Read %d lines"
msgstr ""
-#: files.c:217 search.c:177
+#: files.c:217 search.c:159 search.c:194
#, c-format
msgid "\"%s\" not found"
msgstr ""
msgstr ""
#: global.c:342 global.c:361 global.c:371 global.c:387 global.c:391
-#: global.c:397 winio.c:1004
+#: global.c:397 winio.c:979
msgid "Cancel"
msgstr ""
msgid "I got Alt-%c! (%d)\n"
msgstr ""
-#: search.c:75
+#: search.c:77
#, c-format
msgid "Case Sensitive Regexp Search%s%s"
msgstr ""
-#: search.c:77
+#: search.c:79
#, c-format
msgid "Regexp Search%s%s"
msgstr ""
-#: search.c:80
+#: search.c:82
#, c-format
msgid "Case Sensitive Search%s%s"
msgstr ""
-#: search.c:82
+#: search.c:84
#, c-format
msgid "Search%s%s"
msgstr ""
-#: search.c:85
+#: search.c:87
msgid " (to replace)"
msgstr ""
-#: search.c:93
+#: search.c:95
msgid "Search Cancelled"
msgstr ""
-#: search.c:191
+#: search.c:175
msgid "Search Wrapped"
msgstr ""
-#: search.c:242
+#: search.c:254
#, c-format
msgid "Replaced %d occurences"
msgstr ""
-#: search.c:244
+#: search.c:256
msgid "Replaced 1 occurence"
msgstr ""
-#: search.c:379 search.c:400 search.c:423
+#: search.c:392 search.c:413 search.c:436
msgid "Replace Cancelled"
msgstr ""
-#: search.c:396
+#: search.c:409
#, c-format
msgid "Replace with [%s]"
msgstr ""
#. last_search is empty
-#: search.c:421
+#: search.c:434
msgid "Replace with"
msgstr ""
-#: search.c:462
+#: search.c:475
msgid "Replace this instance?"
msgstr ""
#. Ask for it
-#: search.c:513
+#: search.c:536
msgid "Enter line number"
msgstr ""
-#: search.c:515
+#: search.c:538
msgid "Aborted"
msgstr ""
-#: search.c:535
+#: search.c:558
msgid "Come on, be reasonable"
msgstr ""
-#: search.c:540
+#: search.c:563
#, c-format
msgid "Only %d lines available, skipping to last line"
msgstr ""
msgid "actual_x_from_start for xplus=%d returned %d\n"
msgstr ""
-#: winio.c:415
+#: winio.c:390
#, c-format
msgid "input '%c' (%d)\n"
msgstr ""
-#: winio.c:449
+#: winio.c:424
msgid "New Buffer"
msgstr ""
-#: winio.c:452
+#: winio.c:427
msgid " File: ..."
msgstr ""
-#: winio.c:460
+#: winio.c:435
msgid "Modified"
msgstr ""
-#: winio.c:920
+#: winio.c:895
#, c-format
msgid "Moved to (%d, %d) in edit buffer\n"
msgstr ""
-#: winio.c:931
+#: winio.c:906
#, c-format
msgid "current->data = \"%s\"\n"
msgstr ""
-#: winio.c:974
+#: winio.c:949
#, c-format
msgid "I got \"%s\"\n"
msgstr ""
-#: winio.c:999
+#: winio.c:974
msgid "Yes"
msgstr ""
-#: winio.c:1001
+#: winio.c:976
msgid "All"
msgstr ""
-#: winio.c:1003
+#: winio.c:978
msgid "No"
msgstr ""
-#: winio.c:1140
+#: winio.c:1115
#, c-format
msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
msgstr ""
-#: winio.c:1144
+#: winio.c:1119
msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
msgstr ""
-#: winio.c:1272
+#: winio.c:1247
msgid "Dumping file buffer to stderr...\n"
msgstr ""
-#: winio.c:1274
+#: winio.c:1249
msgid "Dumping cutbuffer to stderr...\n"
msgstr ""
-#: winio.c:1276
+#: winio.c:1251
msgid "Dumping a buffer to stderr...\n"
msgstr ""
static char last_search[132] = ""; /* Last string we searched for */
static char last_replace[132] = ""; /* Last replacement string */
+static int search_last_line;
+
/* Regular expression helper functions */
return 0;
}
-filestruct *findnextstr(int quiet, filestruct * begin, char *needle)
+filestruct *findnextstr(int quiet, filestruct * begin, int beginx, char *needle)
{
filestruct *fileptr;
char *searchstr, *found = NULL, *tmp;
fileptr = current;
- searchstr = ¤t->data[current_x + 1];
- /* Look for searchstr until EOF */
- while (fileptr != NULL &&
- (found = strstrwrapper(searchstr, needle)) == NULL) {
-
- fileptr = fileptr->next;
+ current_x++;
- if (!past_editbot && (fileptr == editbot))
- past_editbot = 1;
+ /* Are we searching the last line? (i.e. the line where search started) */
+ if ( (fileptr == begin) && (current_x < beginx) )
+ search_last_line = 1;
- if (fileptr == begin)
- return NULL;
+ /* Make sure we haven't passed the end of the string */
+ if ( strlen(fileptr->data) < current_x )
+ current_x--;
- if (fileptr != NULL)
- searchstr = fileptr->data;
- }
+ searchstr = &fileptr->data[current_x];
- /* If we're not at EOF, we found an instance */
- if (fileptr != NULL) {
- current = fileptr;
- current_x = 0;
- for (tmp = fileptr->data; tmp != found; tmp++)
- current_x++;
+ /* Look for needle in searchstr */
+ while (( found = strstrwrapper(searchstr, needle)) == NULL) {
- if (past_editbot)
- edit_update(current, CENTER);
- placewewant = xplustabs();
- reset_cursor();
- } else { /* We're at EOF, go back to the top, once */
-
- fileptr = fileage;
-
- while (fileptr != begin->next &&
- (found = strstrwrapper(fileptr->data, needle)) == NULL)
- fileptr = fileptr->next;
-
- if (fileptr == begin->next) {
+ /* finished processing file, get out */
+ if (search_last_line) {
if (!quiet)
statusbar(_("\"%s\" not found"), needle);
-
return NULL;
}
- else { /* We found something */
- current = fileptr;
- current_x = 0;
- for (tmp = fileptr->data; tmp != found; tmp++)
- current_x++;
- edit_update(current, CENTER);
- reset_cursor();
+ fileptr = fileptr->next;
+
+ if (!past_editbot && (fileptr == editbot))
+ past_editbot = 1;
+
+ /* EOF reached, wrap around once */
+ if (fileptr == NULL) {
+ fileptr = fileage;
+
+ past_editbot = 1;
if (!quiet)
statusbar(_("Search Wrapped"));
- }
+ }
+
+ /* Original start line reached */
+ if (fileptr == begin)
+ search_last_line = 1;
+
+ searchstr = fileptr->data;
}
+ /* We found an instance */
+ current = fileptr;
+ current_x = 0;
+ for (tmp = fileptr->data; tmp != found; tmp++)
+ current_x++;
+
+ /* Ensure we haven't wrap around again! */
+ if ((search_last_line) && (current_x >= beginx)) {
+ if (!quiet)
+ statusbar(_("\"%s\" not found"), needle);
+ return NULL;
+ }
+
+ if (past_editbot)
+ edit_update(fileptr, CENTER);
+ else
+ update_line(current, current_x);
+
+ placewewant = xplustabs();
+ reset_cursor();
+
return fileptr;
}
search_abort();
return 1;
}
- findnextstr(0, current, answer);
+ search_last_line = 0;
+ findnextstr(0, current, current_x, answer);
search_abort();
return 1;
}
does something different later, we can change it back. For now
it's just a waste to duplicat code */
search_abort();
+ placewewant = xplustabs();
}
#ifdef HAVE_REGEX_H
i = statusq(replace_list, REPLACE_LIST_LEN, "", _("Replace with"));
if (i == -1) {
statusbar(_("Replace Cancelled"));
- reset_cursor();
replace_abort();
return 0;
} else if (i == 0) /* They entered something new */
/* save where we are */
begin = current;
- beginx = current_x;
+ beginx = current_x + 1;
+ search_last_line = 0;
while (1) {
if (replaceall)
- fileptr = findnextstr(1, begin, prevanswer);
+ fileptr = findnextstr(1, begin, beginx, prevanswer);
else
- fileptr = findnextstr(0, begin, prevanswer);
+ fileptr = findnextstr(0, begin, beginx, prevanswer);
/* No more matches. Done! */
if (!fileptr)
/* Stop bug where we replace a substring of the replacement text */
current_x += strlen(last_replace) - 1;
+ /* Adjust the original cursor position - COULD BE IMPROVED */
+ if (search_last_line) {
+ beginx += strlen(last_replace) - strlen(last_search);
+
+ /* For strings that cross the search start/end boundary */
+ /* Don't go outside of allocated memory */
+ if (beginx < 1)
+ beginx = 1;
+ }
+
edit_refresh();
set_modified();
numreplaced++;
}
current = begin;
- current_x = beginx;
+ current_x = beginx - 1;
renumber_all();
edit_update(current, CENTER);
print_replaced(numreplaced);
}
}
+/* Repaint the statusbar when getting a character in nanogetstr */
+void nanoget_repaint(char *buf, char *inputbuf, int x)
+{
+ blank_statusbar();
+ mvwaddstr(bottomwin, 0, 0, buf);
+ waddstr(bottomwin, inputbuf);
+ wmove(bottomwin, 0, x);
+}
+
/* Get the input from the kb, this should only be called from statusq */
int nanogetstr(char *buf, char *def, shortcut s[], int slen, int start_x)
{
case KEY_HOME:
x = x_left;
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
break;
case KEY_END:
x = x_left + strlen(inputbuf);
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
break;
case KEY_RIGHT:
strlen(inputbuf) - (x - x_left) - 1);
inputbuf[strlen(inputbuf) - 1] = 0;
}
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
break;
case NANO_CONTROL_K:
case NANO_CONTROL_U:
*inputbuf = 0;
x = x_left;
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
break;
case KEY_BACKSPACE:
case KEY_DC:
switch (kbinput = wgetch(edit)) {
case 70:
x = x_left + strlen(inputbuf);
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
break;
case 72:
x = x_left;
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
break;
}
break;
break;
case 49:
x = x_left;
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
goto skip_126;
case 51:
if (strlen(inputbuf) > 0
strlen(inputbuf) - (x - x_left) - 1);
inputbuf[strlen(inputbuf) - 1] = 0;
}
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
goto skip_126;
case 52:
x = x_left + strlen(inputbuf);
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
goto skip_126;
skip_126:
nodelay(edit, TRUE);
break;
}
}
- blank_statusbar();
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
+ nanoget_repaint(buf, inputbuf, x);
break;
-
default:
if (kbinput < 32)
break;
strcpy(inputbuf, inputstr);
x++;
- mvwaddstr(bottomwin, 0, 0, buf);
- waddstr(bottomwin, inputbuf);
- wmove(bottomwin, 0, x);
-
+ nanoget_repaint(buf, inputbuf, x);
#ifdef DEBUG
fprintf(stderr, _("input \'%c\' (%d)\n"), kbinput, kbinput);
#endif