From 7da4e9f28ba69ab9cd01f4ddab4e2deba122468a Mon Sep 17 00:00:00 2001
From: Chris Allegretta <chrisa@asty.org>
Date: Mon, 6 Nov 2000 02:57:22 +0000
Subject: [PATCH] Add tab completion option to statusq and nanogetstr, beep
 when multiple/no matches found

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@271 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog   |  4 +++-
 files.c     |  7 ++++---
 po/nano.pot | 34 +++++++++++++++++-----------------
 proto.h     |  2 +-
 search.c    | 12 ++++++------
 winio.c     | 25 ++++++++++++-------------
 6 files changed, 43 insertions(+), 41 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 1390d27d..5efd5c3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -21,7 +21,9 @@ CVS Code -
 	  last_replace back to nano.c (*shrug*).
 	- New tab completion code.  Used check_wildcard_match, input_tab, 
 	  cwd_tab_completion, username_tab_completion from busybox, 
-	  hacked them a lot, changes to nanogetstr().
+	  hacked them a lot, changes to nanogetstr().  nanogetstr() and
+	  statusq() now take an arg for whether or not to allow tab
+	  completion.
 - files.c:
   do_writeout()
 	- Change strcpy to answer to mallocstrcpy.
diff --git a/files.c b/files.c
index 85739e96..f12ce4fe 100644
--- a/files.c
+++ b/files.c
@@ -247,7 +247,7 @@ int do_insertfile(void)
     int i;
 
     wrap_reset();
-    i = statusq(writefile_list, WRITEFILE_LIST_LEN, "",
+    i = statusq(1, writefile_list, WRITEFILE_LIST_LEN, "",
 		_("File to insert [from ./] "));
     if (i != -1) {
 
@@ -463,7 +463,7 @@ int do_writeout(int exiting)
     }
 
     while (1) {
-	i = statusq(writefile_list, WRITEFILE_LIST_LEN, answer,
+	i = statusq(1, writefile_list, WRITEFILE_LIST_LEN, answer,
 		    _("File Name to write"));
 
 	if (i != -1) {
@@ -732,7 +732,8 @@ int input_tab(char *buf, int place, int lastWasTab)
 	    free(foo);
 	    wrefresh(edit);
 	    num_matches = 0;
-	}
+	} else
+	    beep();
 
     }
 
diff --git a/po/nano.pot b/po/nano.pot
index eea67e0f..b817fa21 100644
--- a/po/nano.pot
+++ b/po/nano.pot
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-11-05 17:48-0500\n"
+"POT-Creation-Date: 2000-11-05 21:55-0500\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"
@@ -380,7 +380,7 @@ msgid "Case Sens"
 msgstr ""
 
 #: global.c:344 global.c:364 global.c:375 global.c:385 global.c:401
-#: global.c:405 global.c:411 winio.c:1009
+#: global.c:405 global.c:411 winio.c:1008
 msgid "Cancel"
 msgstr ""
 
@@ -817,67 +817,67 @@ msgstr ""
 msgid "actual_x_from_start for xplus=%d returned %d\n"
 msgstr ""
 
-#: winio.c:424
+#: winio.c:421
 #, c-format
 msgid "input '%c' (%d)\n"
 msgstr ""
 
-#: winio.c:462
+#: winio.c:459
 msgid "New Buffer"
 msgstr ""
 
-#: winio.c:465
+#: winio.c:462
 msgid "  File: ..."
 msgstr ""
 
-#: winio.c:473
+#: winio.c:470
 msgid "Modified"
 msgstr ""
 
-#: winio.c:925
+#: winio.c:922
 #, c-format
 msgid "Moved to (%d, %d) in edit buffer\n"
 msgstr ""
 
-#: winio.c:936
+#: winio.c:933
 #, c-format
 msgid "current->data = \"%s\"\n"
 msgstr ""
 
-#: winio.c:979
+#: winio.c:978
 #, c-format
 msgid "I got \"%s\"\n"
 msgstr ""
 
-#: winio.c:1004
+#: winio.c:1003
 msgid "Yes"
 msgstr ""
 
-#: winio.c:1006
+#: winio.c:1005
 msgid "All"
 msgstr ""
 
-#: winio.c:1008
+#: winio.c:1007
 msgid "No"
 msgstr ""
 
-#: winio.c:1145
+#: winio.c:1144
 #, c-format
 msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
 msgstr ""
 
-#: winio.c:1149
+#: winio.c:1148
 msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
 msgstr ""
 
-#: winio.c:1277
+#: winio.c:1276
 msgid "Dumping file buffer to stderr...\n"
 msgstr ""
 
-#: winio.c:1279
+#: winio.c:1278
 msgid "Dumping cutbuffer to stderr...\n"
 msgstr ""
 
-#: winio.c:1281
+#: winio.c:1280
 msgid "Dumping a buffer to stderr...\n"
 msgstr ""
diff --git a/proto.h b/proto.h
index cf7a5d8a..ced01509 100644
--- a/proto.h
+++ b/proto.h
@@ -71,7 +71,7 @@ int xplustabs(void);
 int do_yesno(int all, int leavecursor, char *msg, ...);
 int actual_x(filestruct * fileptr, int xplus);
 int strlenpt(char *buf);
-int statusq(shortcut s[], int slen, char *def, char *msg, ...);
+int statusq(int allowtabs, shortcut s[], int slen, char *def, char *msg, ...);
 int write_file(char *name, int tmpfile);
 int do_cut_text(void);
 int do_uncut_text(void);
diff --git a/search.c b/search.c
index 9f1ddb02..569e0637 100644
--- a/search.c
+++ b/search.c
@@ -108,11 +108,11 @@ int search_init(int replacing)
 	reprompt = _(" (to replace)");
 
     if (ISSET(PICO_MSGS))
-	i = statusq(replacing ? replace_list : whereis_list,
+	i = statusq(0, replacing ? replace_list : whereis_list,
 		replacing ? REPLACE_LIST_LEN : WHEREIS_LIST_LEN, "",
 		prompt, reprompt, buf);
     else
-	i = statusq(replacing ? replace_list : whereis_list,
+	i = statusq(0, replacing ? replace_list : whereis_list,
 		replacing ? REPLACE_LIST_LEN : WHEREIS_LIST_LEN, last_search,
 		prompt, reprompt, "");
 
@@ -565,15 +565,15 @@ int do_replace(void)
 	    } else
 		sprintf(buf, "%s", last_replace);
 
-	    i = statusq(replace_list_2, REPLACE_LIST_2_LEN, "",
+	    i = statusq(0, replace_list_2, REPLACE_LIST_2_LEN, "",
 			_("Replace with [%s]"), buf);
 	}
 	else
-	    i = statusq(replace_list_2, REPLACE_LIST_2_LEN, "",
+	    i = statusq(0, replace_list_2, REPLACE_LIST_2_LEN, "",
 			_("Replace with"));
     }
     else
-	i = statusq(replace_list_2, REPLACE_LIST_2_LEN, last_replace, 
+	i = statusq(0, replace_list_2, REPLACE_LIST_2_LEN, last_replace, 
 			_("Replace with"));
 
     /* save where we are */
@@ -609,7 +609,7 @@ int do_gotoline(long defline)
 	line = defline;
     else {			/* Ask for it */
 
-	j = statusq(goto_list, GOTO_LIST_LEN, "", _("Enter line number"));
+	j = statusq(0, goto_list, GOTO_LIST_LEN, "", _("Enter line number"));
 	if (j == -1) {
 	    statusbar(_("Aborted"));
 	    goto_abort();
diff --git a/winio.c b/winio.c
index 5a200502..db8902c4 100644
--- a/winio.c
+++ b/winio.c
@@ -244,7 +244,8 @@ void nanoget_repaint(char *buf, char *inputbuf, int 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)
+int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen, 
+	       int start_x)
 {
     int kbinput = 0, j = 0, x = 0, xend;
     int x_left = 0, inputlen, tabbed = 0;
@@ -329,16 +330,12 @@ int nanogetstr(char *buf, char *def, shortcut s[], int slen, int start_x)
 	    nanoget_repaint(buf, inputbuf, x);
 	    break;
 	case NANO_CONTROL_I:
-	    tabbed++;
-#ifdef DEBUG
-	    fprintf(stderr, "Before call, x = %d\n", x);
-#endif
-	    x += input_tab(inputbuf, (x - x_left), tabbed - 1);
-#ifdef DEBUG
-	    fprintf(stderr, "After call, x = %d\n", x);
-#endif
-	    nanoget_repaint(buf, inputbuf, x);
-	    tabbed = 1;
+	    if (allowtabs) {
+		tabbed++;
+		x += input_tab(inputbuf, (x - x_left), tabbed - 1);
+		nanoget_repaint(buf, inputbuf, x);
+		tabbed = 1;
+	    }
 	    break;
 	case KEY_LEFT:
 	    if (x > strlen(buf))
@@ -943,8 +940,10 @@ void update_cursor(void)
  * global.  Returns -1 on aborted enter, -2 on a blank string, and 0
  * otherwise, the valid shortcut key caught, Def is any editable text we
  * want to put up by default.
+ *
+ * New arg tabs tells whether or not to allow tab completion.
  */
-int statusq(shortcut s[], int slen, char *def, char *msg, ...)
+int statusq(int tabs, shortcut s[], int slen, char *def, char *msg, ...)
 {
     va_list ap;
     char foo[133];
@@ -958,7 +957,7 @@ int statusq(shortcut s[], int slen, char *def, char *msg, ...)
     strncat(foo, ": ", 132);
 
     wattron(bottomwin, A_REVERSE);
-    ret = nanogetstr(foo, def, s, slen, (strlen(foo) + 3));
+    ret = nanogetstr(tabs, foo, def, s, slen, (strlen(foo) + 3));
     wattroff(bottomwin, A_REVERSE);
 
     switch (ret) {
-- 
GitLab