libedit: vendor import libedit 2021-03-28
It contains changes pushed by pstef@ when working on improving the completion for /bin/sh
This commit is contained in:
commit
19318a62d7
@ -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.
|
* Copyright (c) 1997 The NetBSD Foundation, Inc.
|
||||||
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#if !defined(lint) && !defined(SCCSID)
|
#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 */
|
#endif /* not lint && not SCCSID */
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -291,7 +291,7 @@ escape_filename(EditLine * el, const char *filename, int single_match,
|
|||||||
|
|
||||||
if (single_match && app_func) {
|
if (single_match && app_func) {
|
||||||
escaped_str[offset] = 0;
|
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 */
|
/* we want to append space only if we are not inside quotes */
|
||||||
if (append_char[0] == ' ') {
|
if (append_char[0] == ' ') {
|
||||||
if (!s_quoted && !d_quoted)
|
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
|
* '!' could never be invoked
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
fn_complete(EditLine *el,
|
fn_complete2(EditLine *el,
|
||||||
char *(*complet_func)(const char *, int),
|
char *(*complete_func)(const char *, int),
|
||||||
char **(*attempted_completion_function)(const char *, int, int),
|
char **(*attempted_completion_function)(const char *, int, int),
|
||||||
const wchar_t *word_break, const wchar_t *special_prefixes,
|
const wchar_t *word_break, const wchar_t *special_prefixes,
|
||||||
const char *(*app_func)(const char *), size_t query_items,
|
const char *(*app_func)(const char *), size_t query_items,
|
||||||
int *completion_type, int *over, int *point, int *end)
|
int *completion_type, int *over, int *point, int *end,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
const LineInfoW *li;
|
const LineInfoW *li;
|
||||||
wchar_t *temp;
|
wchar_t *temp;
|
||||||
@ -666,7 +667,7 @@ fn_complete(EditLine *el,
|
|||||||
size_t len;
|
size_t len;
|
||||||
int what_to_do = '\t';
|
int what_to_do = '\t';
|
||||||
int retval = CC_NORM;
|
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)
|
if (el->el_state.lastcmd == el->el_state.thiscmd)
|
||||||
what_to_do = '?';
|
what_to_do = '?';
|
||||||
@ -675,8 +676,8 @@ fn_complete(EditLine *el,
|
|||||||
if (completion_type != NULL)
|
if (completion_type != NULL)
|
||||||
*completion_type = what_to_do;
|
*completion_type = what_to_do;
|
||||||
|
|
||||||
if (!complet_func)
|
if (!complete_func)
|
||||||
complet_func = fn_filename_completion_function;
|
complete_func = fn_filename_completion_function;
|
||||||
if (!app_func)
|
if (!app_func)
|
||||||
app_func = append_char_function;
|
app_func = append_char_function;
|
||||||
|
|
||||||
@ -703,7 +704,7 @@ fn_complete(EditLine *el,
|
|||||||
if (!attempted_completion_function ||
|
if (!attempted_completion_function ||
|
||||||
(over != NULL && !*over && !matches))
|
(over != NULL && !*over && !matches))
|
||||||
matches = completion_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)
|
if (over != NULL)
|
||||||
*over = 0;
|
*over = 0;
|
||||||
@ -720,7 +721,7 @@ fn_complete(EditLine *el,
|
|||||||
|
|
||||||
if (matches[0][0] != '\0') {
|
if (matches[0][0] != '\0') {
|
||||||
el_deletestr(el, (int)len);
|
el_deletestr(el, (int)len);
|
||||||
if (!attempted_completion_function)
|
if (flags & FN_QUOTE_MATCH)
|
||||||
completion = escape_filename(el, matches[0],
|
completion = escape_filename(el, matches[0],
|
||||||
single_match, app_func);
|
single_match, app_func);
|
||||||
else
|
else
|
||||||
@ -735,7 +736,9 @@ fn_complete(EditLine *el,
|
|||||||
el_winsertstr(el,
|
el_winsertstr(el,
|
||||||
ct_decode_string(completion, &el->el_scratch));
|
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
|
* We found an exact match. Add a space after
|
||||||
* it, unless we do filename completion and the
|
* it, unless we do filename completion and the
|
||||||
@ -817,6 +820,20 @@ out:
|
|||||||
return retval;
|
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
|
* el-compatible wrapper around rl_complete; needed for key binding
|
||||||
*/
|
*/
|
||||||
|
@ -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.
|
* Copyright (c) 1997 The NetBSD Foundation, Inc.
|
||||||
@ -36,6 +36,12 @@ int fn_complete(EditLine *,
|
|||||||
char **(*)(const char *, int, int),
|
char **(*)(const char *, int, int),
|
||||||
const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t,
|
const wchar_t *, const wchar_t *, const char *(*)(const char *), size_t,
|
||||||
int *, int *, int *, int *);
|
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,
|
void fn_display_match_list(EditLine *, char **, size_t, size_t,
|
||||||
const char *(*)(const char *));
|
const char *(*)(const char *));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user