nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit ec58a99326a6f10097446c3e68cd20ad5406c620
parent 04d848e6d9b5b34667f2e17891caf183822f7870
Author: Chris Allegretta <chrisa@asty.org>
Date:   Sun,  5 Nov 2000 21:54:23 +0000

input_tab: Now autocomplete up until the matches diverge by nanme works, yay


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@268 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

Diffstat:
Mfiles.c | 61++++++++++++++++++++++++++++++++++++++++++++++++++++++-------
Mpo/nano.pot | 2+-
2 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/files.c b/files.c @@ -604,9 +604,10 @@ char **cwd_tab_completion(char *buf, int *num_matches) int input_tab(char *buf, int place, int lastWasTab) { /* Do TAB completion */ - static int num_matches = 0; + static int num_matches = 0, match_matches = 0; static char **matches = (char **) NULL; - int pos = place, newplace = 0; + int pos = place, newplace = 0, i = 0, col = 0, editline = 0; + int longestname = 0; if (lastWasTab == FALSE) { char *tmp, *matchBuf; @@ -656,24 +657,70 @@ int input_tab(char *buf, int place, int lastWasTab) strlen(matches[0]) - pos); newplace += strlen(matches[0]) - pos; } + else { + /* Check to see if all matches share a beginning, and if so + tack it onto buf and then beep */ + + while (1) { + match_matches = 0; + + for (i = 0; i < num_matches; i++) { + if (matches[i][pos] == 0) + break; + else if (matches[i][pos] == matches[0][pos]) + match_matches++; + } + if (match_matches == num_matches && + (i == num_matches || matches[i][pos] != 0)) { + + /* All the matches have the same character at pos+1, + so paste it into buf... */ + strncpy(buf + pos, matches[0] + pos, 1); + newplace++; + pos++; + } + else { + beep(); + break; + } + } + } } else { /* Ok -- the last char was a TAB. Since they * just hit TAB again, print a list of all the * available choices... */ if (matches && num_matches > 0) { - int i, col; /* Blank the edit window, and print the matches out there */ blank_edit(); wmove(edit, 0, 0); + editline = 0; + /* Figure out the length of the longest filename */ + for (i = 0; i < num_matches; i++) + if (strlen(matches[i]) > longestname) + longestname = strlen(matches[i]); + + if (longestname > COLS - 1) + longestname = COLS - 1; + /* Print the list of matches */ for (i = 0, col = 0; i < num_matches; i++) { - char foo[17]; - sprintf(foo, "%-14s ", matches[i]); + + /* make each filename shown be the same length as the longest + filename, with two spaces at the end */ + char *foo; + foo = nmalloc(longestname + 5); + snprintf(foo, longestname + 1, matches[i]); + while (strlen(foo) < longestname) + strcat(foo, " "); + + strcat(foo, " "); + col += waddnstr(edit, foo, strlen(foo)); - if (col > 60 && matches[i + 1] != NULL) { - waddstr(edit, "\n"); + if (col > (COLS * .8) && matches[i + 1] != NULL) { + editline++; + wmove(edit, editline, 0); col = 0; } } diff --git 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 12:08-0500\n" +"POT-Creation-Date: 2000-11-05 16:52-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"