From 88d4735de646f7c2bd0b67b33ffac5739251a7ec Mon Sep 17 00:00:00 2001 From: "Andrey A. Chernov" Date: Sat, 7 Jun 1997 12:58:06 +0000 Subject: [PATCH] Merge with previous variant --- contrib/libreadline/STANDALONE | 32 ---------- contrib/libreadline/complete.c | 86 ++++++++++++++++----------- contrib/libreadline/doc/Makefile | 69 --------------------- contrib/libreadline/doc/readline.3 | 18 ++++-- contrib/libreadline/examples/Makefile | 19 ------ contrib/libreadline/readline.3 | 18 ++++-- contrib/libreadline/readline.h | 19 +++++- contrib/libreadline/shell.c | 2 +- contrib/libreadline/util.c | 20 ++----- 9 files changed, 101 insertions(+), 182 deletions(-) delete mode 100644 contrib/libreadline/STANDALONE delete mode 100644 contrib/libreadline/doc/Makefile delete mode 100644 contrib/libreadline/examples/Makefile diff --git a/contrib/libreadline/STANDALONE b/contrib/libreadline/STANDALONE deleted file mode 100644 index f999e8d268a7..000000000000 --- a/contrib/libreadline/STANDALONE +++ /dev/null @@ -1,32 +0,0 @@ -This is a description of C preprocessor defines that readline accepts. -Most are passed in from the parent `make'; e.g. from the bash source -directory. - -NO_SYS_FILE is not present -HAVE_UNISTD_H exists -HAVE_STDLIB_H exists -HAVE_VARARGS_H exists and is usable -HAVE_STRING_H exists -HAVE_ALLOCA_H exists and is needed for alloca() -HAVE_ALLOCA alloca(3) or a define for it exists -PRAGMA_ALLOCA use of alloca() requires a #pragma, as in AIX 3.x -VOID_SIGHANDLER signal handlers are void functions -HAVE_DIRENT_H exists and is usable -HAVE_SYS_PTEM_H exists -HAVE_SYS_PTE_H exists -HAVE_SYS_STREAM_H exists -HAVE_SYS_SELECT_H exists - -System-specific options: - -GWINSZ_IN_SYS_IOCTL need to include for TIOCGWINSZ -HAVE_GETPW_DECLS the getpw* functions are declared in and cannot - be redeclared without compiler errors -HAVE_STRCASECMP the strcasecmp and strncasecmp functions are available - -USG Running a variant of System V -USGr3 Running System V.3 -XENIX_22 Xenix 2.2 -Linux Linux -CRAY running a recent version of Cray UNICOS -SunOS4 Running SunOS 4.x diff --git a/contrib/libreadline/complete.c b/contrib/libreadline/complete.c index df17e497b74d..90bd87092248 100644 --- a/contrib/libreadline/complete.c +++ b/contrib/libreadline/complete.c @@ -25,7 +25,6 @@ # include #endif -#include #include #include #if defined (HAVE_SYS_FILE_H) @@ -42,6 +41,8 @@ # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ +#include + #include #if !defined (errno) extern int errno; @@ -137,7 +138,7 @@ int rl_visible_stats = 0; static int completion_changed_buffer; /* Pointer to the generator function for completion_matches (). - NULL means to use filename_entry_function (), the default filename + NULL means to use filename_completion_function (), the default filename completer. */ Function *rl_completion_entry_function = (Function *)NULL; @@ -761,12 +762,13 @@ insert_text (text, start, end) } static char * -make_quoted_replacement (match, mtype, quote_char) +make_quoted_replacement (match, mtype, qc) char *match; - int mtype, quote_char; + int mtype; + char *qc; /* Pointer to quoting character, if any */ { int should_quote, do_replace; - char *replacement, qc; + char *replacement; /* If we are doing completion on quoted substrings, and any matches contain any of the completer_word_break_characters, then auto- @@ -784,10 +786,10 @@ make_quoted_replacement (match, mtype, quote_char) if (should_quote) #if defined (SHELL) - should_quote = should_quote && (!quote_char || quote_char == '"' || quote_char == '\''); -#else - should_quote = should_quote && !quote_char; -#endif + should_quote = should_quote && (!qc || !*qc || *qc == '"' || *qc == '\''); +#else /* !SHELL */ + should_quote = should_quote && (!qc || !*qc); +#endif /* !SHELL */ if (should_quote) { @@ -797,37 +799,37 @@ make_quoted_replacement (match, mtype, quote_char) should_quote = rl_strpbrk (match, rl_filename_quote_characters) != 0; do_replace = should_quote ? mtype : NO_MATCH; - if (do_replace != NO_MATCH) - { - /* Quote the replacement, since we found an embedded - word break character in a potential match. */ - if (rl_filename_quoting_function) - { - qc = quote_char; /* must pass a (char *) to quoting function */ - replacement = (*rl_filename_quoting_function) - (match, do_replace, &qc); - quote_char = qc; - } - } + /* Quote the replacement, since we found an embedded + word break character in a potential match. */ + if (do_replace != NO_MATCH && rl_filename_quoting_function) + replacement = (*rl_filename_quoting_function) (match, do_replace, qc); } return (replacement); } static void -insert_match (match, start, mtype, quote_char) +insert_match (match, start, mtype, qc) char *match; - int start, mtype, quote_char; + int start, mtype; + char *qc; { char *replacement; + char oqc; - replacement = make_quoted_replacement (match, mtype, quote_char); + oqc = qc ? *qc : '\0'; + replacement = make_quoted_replacement (match, mtype, qc); /* Now insert the match. */ if (replacement) { /* Don't double an opening quote character. */ - if (quote_char && start && rl_line_buffer[start - 1] == quote_char && - replacement[0] == quote_char) + if (qc && *qc && start && rl_line_buffer[start - 1] == *qc && + replacement[0] == *qc) + start--; + /* If make_quoted_replacement changed the quoting character, remove + the opening quote and insert the (fully-quoted) replacement. */ + else if (qc && (*qc != oqc) && start && rl_line_buffer[start - 1] == oqc && + replacement[0] != oqc) start--; insert_text (replacement, start, rl_point - 1); if (replacement != match) @@ -882,9 +884,10 @@ append_to_match (text, delimiter, quote_char) } static void -insert_all_matches (matches, point, quote_char) +insert_all_matches (matches, point, qc) char **matches; - int point, quote_char; + int point; + char *qc; { int i; char *rp; @@ -892,7 +895,7 @@ insert_all_matches (matches, point, quote_char) rl_begin_undo_group (); /* remove any opening quote character; make_quoted_replacement will add it back. */ - if (quote_char && point && rl_line_buffer[point - 1] == quote_char) + if (qc && *qc && point && rl_line_buffer[point - 1] == *qc) point--; rl_delete_text (point, rl_point); rl_point = point; @@ -901,7 +904,7 @@ insert_all_matches (matches, point, quote_char) { for (i = 1; matches[i]; i++) { - rp = make_quoted_replacement (matches[i], SINGLE_MATCH, quote_char); + rp = make_quoted_replacement (matches[i], SINGLE_MATCH, qc); rl_insert_text (rp); rl_insert_text (" "); if (rp != matches[i]) @@ -910,7 +913,7 @@ insert_all_matches (matches, point, quote_char) } else { - rp = make_quoted_replacement (matches[0], SINGLE_MATCH, quote_char); + rp = make_quoted_replacement (matches[0], SINGLE_MATCH, qc); rl_insert_text (rp); rl_insert_text (" "); if (rp != matches[0]) @@ -964,12 +967,12 @@ rl_complete_internal (what_to_do) text = rl_copy_text (start, end); matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char); - free (text); if (matches == 0) { ding (); FREE (saved_line_buffer); + free (text); return 0; } @@ -998,6 +1001,7 @@ rl_complete_internal (what_to_do) FREE (matches); ding (); FREE (saved_line_buffer); + FREE (text); return 0; } else @@ -1013,6 +1017,7 @@ rl_complete_internal (what_to_do) } } } + free (text); switch (what_to_do) { @@ -1020,7 +1025,7 @@ rl_complete_internal (what_to_do) case '!': /* Insert the first match with proper quoting. */ if (*matches[0]) - insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, quote_char); + insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); /* If there are more matches, ring the bell to indicate. If we are in vi mode, Posix.2 says to not ring the bell. @@ -1046,7 +1051,7 @@ rl_complete_internal (what_to_do) break; case '*': - insert_all_matches (matches, start, quote_char); + insert_all_matches (matches, start, "e_char); break; case '?': @@ -1102,10 +1107,14 @@ stat_char (filename) character = 0; if (S_ISDIR (finfo.st_mode)) character = '/'; +#if defined (S_ISCHR) else if (S_ISCHR (finfo.st_mode)) character = '%'; +#endif /* S_ISCHR */ +#if defined (S_ISBLK) else if (S_ISBLK (finfo.st_mode)) character = '#'; +#endif /* S_ISBLK */ #if defined (S_ISLNK) else if (S_ISLNK (finfo.st_mode)) character = '@'; @@ -1321,7 +1330,7 @@ filename_completion_function (text, state) int state; char *text; { - static DIR *directory; + static DIR *directory = (DIR *)NULL; static char *filename = (char *)NULL; static char *dirname = (char *)NULL; static char *users_dirname = (char *)NULL; @@ -1333,6 +1342,13 @@ filename_completion_function (text, state) /* If we don't have any state, then do some initialization. */ if (state == 0) { + /* If we were interrupted before closing the directory or reading + all of its contents, close it. */ + if (directory) + { + closedir (directory); + directory = (DIR *)NULL; + } FREE (dirname); FREE (filename); FREE (users_dirname); diff --git a/contrib/libreadline/doc/Makefile b/contrib/libreadline/doc/Makefile deleted file mode 100644 index 9dbab24ba848..000000000000 --- a/contrib/libreadline/doc/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -# This makefile for Readline library documentation is in -*- text -*- mode. -# Emacs likes it that way. -TEXI2DVI = texi2dvi - -RM = rm -f - -INSTALL_DATA = cp -infodir = /usr/local/info - -RLSRC = rlman.texinfo rluser.texinfo rltech.texinfo -HISTSRC = hist.texinfo hsuser.texinfo hstech.texinfo - -DVIOBJ = readline.dvi history.dvi -INFOOBJ = readline.info history.info -PSOBJ = readline.ps history.ps -HTMLOBJ = readline.html history.html - -all: info dvi html - -readline.dvi: $(RLSRC) - $(TEXI2DVI) rlman.texinfo - mv rlman.dvi readline.dvi - -readline.info: $(RLSRC) - makeinfo --no-split -o $@ rlman.texinfo - -history.dvi: ${HISTSRC} - $(TEXI2DVI) hist.texinfo - mv hist.dvi history.dvi - -history.info: ${HISTSRC} - makeinfo --no-split -o $@ hist.texinfo - -readline.ps: readline.dvi - dvips -D 300 -o $@ readline.dvi - -history.ps: history.dvi - dvips -D 300 -o $@ history.dvi - -readline.html: ${RLSRC} - texi2html rlman.texinfo - sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman.html > readline.html - sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman_toc.html > readline_toc.html - rm -f rlman.html rlman_toc.html - -history.html: ${HISTSRC} - texi2html hist.texinfo - sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist.html > history.html - sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist_toc.html > history_toc.html - rm -f hist.html hist_toc.html - -info: $(INFOOBJ) -dvi: $(DVIOBJ) -ps: $(PSOBJ) -html: $(HTMLOBJ) - -clean: - $(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \ - *.fns *.kys *.tps *.vrs *.o core - -distclean: clean -mostlyclean: clean - -maintainer-clean: clean - $(RM) *.dvi *.info *.info-* *.ps *.html - -install: info - ${INSTALL_DATA} readline.info $(infodir)/readline.info - ${INSTALL_DATA} history.info $(infodir)/history.info diff --git a/contrib/libreadline/doc/readline.3 b/contrib/libreadline/doc/readline.3 index e8cb2171c5b1..8c5ae9399b1e 100644 --- a/contrib/libreadline/doc/readline.3 +++ b/contrib/libreadline/doc/readline.3 @@ -6,9 +6,9 @@ .\" Case Western Reserve University .\" chet@ins.CWRU.Edu .\" -.\" Last Change: Mon Jul 8 13:07:48 EDT 1996 +.\" Last Change: Wed Feb 5 14:13:22 EST 1997 .\" -.TH READLINE 3 "1996 July 8" GNU +.TH READLINE 3 "1997 Feb 5" GNU .\" .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. @@ -22,7 +22,6 @@ readline \- get a line from a user with editing .LP .nf .ft B -#include #include #include .ft @@ -683,9 +682,18 @@ Add this digit to the argument already accumulating, or start a new argument. M\-\- starts a negative argument. .TP .B universal\-argument -Each time this is executed, the argument count is multiplied by four. +This is another way to specify an argument. +If this command is followed by one or more digits, optionally with a +leading minus sign, those digits define the argument. +If the command is followed by digits, executing +.B universal\-argument +again ends the numeric argument, but is otherwise ignored. +As a special case, if this command is immediately followed by a +character that is neither a digit or minus sign, the argument count +for the next command is multiplied by four. The argument count is initially one, so executing this function the -first time makes the argument count four. +first time makes the argument count four, a second time makes the +argument count sixteen, and so on. .PD .SS Completing .PP diff --git a/contrib/libreadline/examples/Makefile b/contrib/libreadline/examples/Makefile deleted file mode 100644 index cfa77457a7d1..000000000000 --- a/contrib/libreadline/examples/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# This is the Makefile for the examples subdirectory of readline. -*- text -*- -# -EXECUTABLES = fileman rltest -CFLAGS = -g -I../.. -I.. -LDFLAGS = -g -L.. - -.c.o: - $(CC) $(CFLAGS) -c $< - -all: $(EXECUTABLES) - -fileman: fileman.o - $(CC) $(LDFLAGS) -o $@ fileman.o -lreadline -ltermcap - -rltest: rltest.o - $(CC) $(LDFLAGS) -o $@ rltest.o -lreadline -ltermcap - -fileman.o: fileman.c -rltest.o: rltest.c diff --git a/contrib/libreadline/readline.3 b/contrib/libreadline/readline.3 index e8cb2171c5b1..8c5ae9399b1e 100644 --- a/contrib/libreadline/readline.3 +++ b/contrib/libreadline/readline.3 @@ -6,9 +6,9 @@ .\" Case Western Reserve University .\" chet@ins.CWRU.Edu .\" -.\" Last Change: Mon Jul 8 13:07:48 EDT 1996 +.\" Last Change: Wed Feb 5 14:13:22 EST 1997 .\" -.TH READLINE 3 "1996 July 8" GNU +.TH READLINE 3 "1997 Feb 5" GNU .\" .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. @@ -22,7 +22,6 @@ readline \- get a line from a user with editing .LP .nf .ft B -#include #include #include .ft @@ -683,9 +682,18 @@ Add this digit to the argument already accumulating, or start a new argument. M\-\- starts a negative argument. .TP .B universal\-argument -Each time this is executed, the argument count is multiplied by four. +This is another way to specify an argument. +If this command is followed by one or more digits, optionally with a +leading minus sign, those digits define the argument. +If the command is followed by digits, executing +.B universal\-argument +again ends the numeric argument, but is otherwise ignored. +As a special case, if this command is immediately followed by a +character that is neither a digit or minus sign, the argument count +for the next command is multiplied by four. The argument count is initially one, so executing this function the -first time makes the argument count four. +first time makes the argument count four, a second time makes the +argument count sixteen, and so on. .PD .SS Completing .PP diff --git a/contrib/libreadline/readline.h b/contrib/libreadline/readline.h index c6db3dfdbdd8..bf6c9448c972 100644 --- a/contrib/libreadline/readline.h +++ b/contrib/libreadline/readline.h @@ -102,7 +102,7 @@ extern int rl_noninc_forward_search_again (), rl_noninc_reverse_search_again (); /* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */ -extern int rl_vi_check (), rl_vi_textmod_command (); +extern int rl_vi_check (); extern int rl_vi_undo (), rl_vi_redo (), rl_vi_tilde_expand (), rl_vi_movement_mode (), rl_vi_insertion_mode (), rl_vi_arg_digit (), @@ -236,6 +236,10 @@ extern char *rl_library_version; whatever was in argv[0]. It is used when parsing conditionals. */ extern char *rl_readline_name; +/* The prompt readline uses. This is set from the argument to + readline (), and should not be assigned to directly. */ +extern char *rl_prompt; + /* The line buffer that is in use. */ extern char *rl_line_buffer; @@ -248,6 +252,11 @@ extern int rl_done; extern int rl_pending_input; +/* Non-zero if we called this function from _rl_dispatch(). It's present + so functions can find out whether they were called from a key binding + or directly from an application. */ +int rl_dispatching; + /* The name of the terminal to use. */ extern char *rl_terminal_name; @@ -370,6 +379,14 @@ extern int rl_completion_type; default is a space. Nothing is added if this is '\0'. */ extern int rl_completion_append_character; +/* Up to this many items will be displayed in response to a + possible-completions call. After that, we ask the user if she + is sure she wants to see them all. The default value is 100. */ +extern int rl_completion_query_items; + +/* If non-zero, then disallow duplicates in the matches. */ +extern int rl_ignore_completion_duplicates; + /* If this is non-zero, completion is (temporarily) inhibited, and the completion character will be inserted as any other. */ extern int rl_inhibit_completion; diff --git a/contrib/libreadline/shell.c b/contrib/libreadline/shell.c index eb99c7276e39..c39e4590034d 100644 --- a/contrib/libreadline/shell.c +++ b/contrib/libreadline/shell.c @@ -47,7 +47,7 @@ extern char *xmalloc (), *xrealloc (); /* Backwards compatibility, now that savestring has been removed from all `public' readline header files. */ char * -savestring (s) +rl_savestring (s) char *s; { return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s))); diff --git a/contrib/libreadline/util.c b/contrib/libreadline/util.c index 225e85cfc436..d96b29e8cdf8 100644 --- a/contrib/libreadline/util.c +++ b/contrib/libreadline/util.c @@ -25,11 +25,9 @@ # include #endif -#include #include #include -#include -#include +#include "posixjmp.h" #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ @@ -41,6 +39,9 @@ # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ +#include +#include + /* System-specific feature definitions and include files. */ #include "rldefs.h" @@ -55,7 +56,7 @@ /* Pseudo-globals imported from readline.c */ extern int readline_echoing_p; -extern jmp_buf readline_top_level; +extern procenv_t readline_top_level; extern int rl_line_buffer_len; extern Function *rl_last_func; @@ -243,17 +244,6 @@ _rl_qsort_string_compare (s1, s2) #endif } -#if !defined (SHELL) -/* Backwards compatibility, now that savestring has been removed from - all `public' readline header files. */ -char * -rl_savestring (s) - char *s; -{ - return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s))); -} -#endif /* !SHELL */ - /* Function equivalents for the macros defined in chartypes.h. */ #undef _rl_uppercase_p int