git: 31595a7c3a4a - vendor/NetBSD/libedit - libedit: vendor import snapshot 2021-03-28

Baptiste Daroussin bapt at FreeBSD.org
Mon Mar 29 08:04:16 UTC 2021


The branch vendor/NetBSD/libedit has been updated by bapt:

URL: https://cgit.FreeBSD.org/src/commit/?id=31595a7c3a4afa330555de5f58b1a23ad88a8bc5

commit 31595a7c3a4afa330555de5f58b1a23ad88a8bc5
Author:     Baptiste Daroussin <bapt at FreeBSD.org>
AuthorDate: 2021-03-29 08:01:41 +0000
Commit:     Baptiste Daroussin <bapt at FreeBSD.org>
CommitDate: 2021-03-29 08:02:12 +0000

    libedit: vendor import snapshot 2021-03-28
---
 filecomplete.c | 47 ++++++++++++++++++++++++++++++++---------------
 filecomplete.h |  8 +++++++-
 2 files changed, 39 insertions(+), 16 deletions(-)

diff --git a/filecomplete.c b/filecomplete.c
index ba887e0e4180..963a73fc8322 100644
--- a/filecomplete.c
+++ b/filecomplete.c
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecomplete.c,v 1.64 2020/01/05 07:12:05 abhinav Exp $	*/
+/*	$NetBSD: filecomplete.c,v 1.67 2021/03/28 13:39:39 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: filecomplete.c,v 1.64 2020/01/05 07:12:05 abhinav Exp $");
+__RCSID("$NetBSD: filecomplete.c,v 1.67 2021/03/28 13:39:39 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <sys/types.h>
@@ -291,7 +291,7 @@ escape_filename(EditLine * el, const char *filename, int single_match,
 
 	if (single_match && app_func) {
 		escaped_str[offset] = 0;
-		append_char = app_func(escaped_str);
+		append_char = app_func(filename);
 		/* we want to append space only if we are not inside quotes */
 		if (append_char[0] == ' ') {
 			if (!s_quoted && !d_quoted)
@@ -652,12 +652,13 @@ find_word_to_complete(const wchar_t * cursor, const wchar_t * buffer,
  *       '!' could never be invoked
  */
 int
-fn_complete(EditLine *el,
-	char *(*complet_func)(const char *, int),
-	char **(*attempted_completion_function)(const char *, int, int),
-	const wchar_t *word_break, const wchar_t *special_prefixes,
-	const char *(*app_func)(const char *), size_t query_items,
-	int *completion_type, int *over, int *point, int *end)
+fn_complete2(EditLine *el,
+    char *(*complete_func)(const char *, int),
+    char **(*attempted_completion_function)(const char *, int, int),
+    const wchar_t *word_break, const wchar_t *special_prefixes,
+    const char *(*app_func)(const char *), size_t query_items,
+    int *completion_type, int *over, int *point, int *end,
+    unsigned int flags)
 {
 	const LineInfoW *li;
 	wchar_t *temp;
@@ -666,7 +667,7 @@ fn_complete(EditLine *el,
 	size_t len;
 	int what_to_do = '\t';
 	int retval = CC_NORM;
-	int do_unescape = attempted_completion_function == NULL? 1: 0;
+	int do_unescape = flags & FN_QUOTE_MATCH;
 
 	if (el->el_state.lastcmd == el->el_state.thiscmd)
 		what_to_do = '?';
@@ -675,8 +676,8 @@ fn_complete(EditLine *el,
 	if (completion_type != NULL)
 		*completion_type = what_to_do;
 
-	if (!complet_func)
-		complet_func = fn_filename_completion_function;
+	if (!complete_func)
+		complete_func = fn_filename_completion_function;
 	if (!app_func)
 		app_func = append_char_function;
 
@@ -703,7 +704,7 @@ fn_complete(EditLine *el,
 	if (!attempted_completion_function ||
 	    (over != NULL && !*over && !matches))
 		matches = completion_matches(
-		    ct_encode_string(temp, &el->el_scratch), complet_func);
+		    ct_encode_string(temp, &el->el_scratch), complete_func);
 
 	if (over != NULL)
 		*over = 0;
@@ -720,7 +721,7 @@ fn_complete(EditLine *el,
 
 	if (matches[0][0] != '\0') {
 		el_deletestr(el, (int)len);
-		if (!attempted_completion_function)
+		if (flags & FN_QUOTE_MATCH)
 			completion = escape_filename(el, matches[0],
 			    single_match, app_func);
 		else
@@ -735,7 +736,9 @@ fn_complete(EditLine *el,
 		el_winsertstr(el,
 		    ct_decode_string(completion, &el->el_scratch));
 
-		if (single_match && attempted_completion_function) {
+		if (single_match && attempted_completion_function &&
+		    !(flags & FN_QUOTE_MATCH))
+		{
 			/*
 			 * We found an exact match. Add a space after
 			 * it, unless we do filename completion and the
@@ -817,6 +820,20 @@ out:
 	return retval;
 }
 
+int
+fn_complete(EditLine *el,
+    char *(*complete_func)(const char *, int),
+    char **(*attempted_completion_function)(const char *, int, int),
+    const wchar_t *word_break, const wchar_t *special_prefixes,
+    const char *(*app_func)(const char *), size_t query_items,
+    int *completion_type, int *over, int *point, int *end)
+{
+	return fn_complete2(el, complete_func, attempted_completion_function,
+	    word_break, special_prefixes, app_func, query_items,
+	    completion_type, over, point, end,
+	    attempted_completion_function ? 0 : FN_QUOTE_MATCH);
+}
+
 /*
  * el-compatible wrapper around rl_complete; needed for key binding
  */
diff --git a/filecomplete.h b/filecomplete.h
index 61d81389a0f7..60ea4894414b 100644
--- a/filecomplete.h
+++ b/filecomplete.h
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecomplete.h,v 1.11 2017/04/21 05:38:03 abhinav Exp $	*/
+/*	$NetBSD: filecomplete.h,v 1.13 2021/03/28 13:38:10 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -36,6 +36,12 @@ int fn_complete(EditLine *,
     char **(*)(const char *, int, int),
     const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t,
     int *, int *, int *, int *);
+int fn_complete2(EditLine *,
+    char *(*)(const char *, int),
+    char **(*)(const char *, int, int),
+    const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t,
+    int *, int *, int *, int *, unsigned int);
+#define FN_QUOTE_MATCH 1		/* Quote the returned match */
 
 void fn_display_match_list(EditLine *, char **, size_t, size_t,
 	const char *(*)(const char *));


More information about the dev-commits-src-all mailing list