diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2020-12-16 11:14:08 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2020-12-16 11:14:08 +0100 |
commit | a97a795dcb41943943b8ecfe039e23673365af55 (patch) | |
tree | 9d5ca60480403678d27be2c922ce3350fef97426 | |
parent | 1d180cd7493f0a88fa39229cddcb30a0e44ade4c (diff) | |
download | busybox-w32-a97a795dcb41943943b8ecfe039e23673365af55.tar.gz busybox-w32-a97a795dcb41943943b8ecfe039e23673365af55.tar.bz2 busybox-w32-a97a795dcb41943943b8ecfe039e23673365af55.zip |
lineedit: disable completion and fancy prompts if no shells are selected
function old new delta
get_previous_history 51 56 +5
get_next_history 47 52 +5
null_str 1 - -1
beep 10 - -10
bb_msg_unknown 10 - -10
bb_internal_setpwent 24 - -24
remove_chunk 30 - -30
goto_new_line 33 - -33
bb_internal_endpwent 36 - -36
deinit_S 51 - -51
free_tab_completion_data 54 - -54
read_line_input 3171 3114 -57
rewind 68 - -68
add_match 70 - -70
complete_username 77 - -77
quote_special_chars 78 - -78
build_match_prefix 557 - -557
complete_cmd_dir_file 697 - -697
parse_and_put_prompt 823 53 -770
input_tab 926 - -926
------------------------------------------------------------------------------
(add/remove: 0/17 grow/shrink: 2/2 up/down: 10/-3549) Total: -3539 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | libbb/lineedit.c | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/libbb/lineedit.c b/libbb/lineedit.c index 0c48e8179..c3b5738e2 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c | |||
@@ -57,12 +57,23 @@ | |||
57 | #if ENABLE_FEATURE_EDITING | 57 | #if ENABLE_FEATURE_EDITING |
58 | 58 | ||
59 | 59 | ||
60 | #if !ENABLE_SHELL_ASH && !ENABLE_SHELL_HUSH | ||
61 | /* so far only shells use these features */ | ||
62 | # undef ENABLE_FEATURE_EDITING_FANCY_PROMPT | ||
63 | # undef ENABLE_FEATURE_TAB_COMPLETION | ||
64 | # undef ENABLE_FEATURE_USERNAME_COMPLETION | ||
65 | # define ENABLE_FEATURE_EDITING_FANCY_PROMPT 0 | ||
66 | # define ENABLE_FEATURE_TAB_COMPLETION 0 | ||
67 | # define ENABLE_FEATURE_USERNAME_COMPLETION 0 | ||
68 | #endif | ||
69 | |||
70 | |||
60 | #define ENABLE_USERNAME_OR_HOMEDIR \ | 71 | #define ENABLE_USERNAME_OR_HOMEDIR \ |
61 | (ENABLE_FEATURE_USERNAME_COMPLETION || ENABLE_FEATURE_EDITING_FANCY_PROMPT) | 72 | (ENABLE_FEATURE_USERNAME_COMPLETION || ENABLE_FEATURE_EDITING_FANCY_PROMPT) |
62 | #define IF_USERNAME_OR_HOMEDIR(...) | ||
63 | #if ENABLE_USERNAME_OR_HOMEDIR | 73 | #if ENABLE_USERNAME_OR_HOMEDIR |
64 | # undef IF_USERNAME_OR_HOMEDIR | ||
65 | # define IF_USERNAME_OR_HOMEDIR(...) __VA_ARGS__ | 74 | # define IF_USERNAME_OR_HOMEDIR(...) __VA_ARGS__ |
75 | #else | ||
76 | # define IF_USERNAME_OR_HOMEDIR(...) /*nothing*/ | ||
66 | #endif | 77 | #endif |
67 | 78 | ||
68 | 79 | ||
@@ -743,11 +754,11 @@ static unsigned path_parse(char ***p) | |||
743 | char *tmp; | 754 | char *tmp; |
744 | char **res; | 755 | char **res; |
745 | 756 | ||
746 | #if EDITING_HAS_path_lookup | 757 | # if EDITING_HAS_path_lookup |
747 | if (state->flags & WITH_PATH_LOOKUP) | 758 | if (state->flags & WITH_PATH_LOOKUP) |
748 | pth = state->path_lookup; | 759 | pth = state->path_lookup; |
749 | else | 760 | else |
750 | #endif | 761 | # endif |
751 | pth = getenv("PATH"); | 762 | pth = getenv("PATH"); |
752 | 763 | ||
753 | /* PATH="" or PATH=":"? */ | 764 | /* PATH="" or PATH=":"? */ |
@@ -1885,9 +1896,7 @@ static void parse_and_put_prompt(const char *prmt_ptr) | |||
1885 | { | 1896 | { |
1886 | int prmt_size = 0; | 1897 | int prmt_size = 0; |
1887 | char *prmt_mem_ptr = xzalloc(1); | 1898 | char *prmt_mem_ptr = xzalloc(1); |
1888 | # if ENABLE_USERNAME_OR_HOMEDIR | ||
1889 | char *cwd_buf = NULL; | 1899 | char *cwd_buf = NULL; |
1890 | # endif | ||
1891 | char flg_not_length = '['; | 1900 | char flg_not_length = '['; |
1892 | char cbuf[2]; | 1901 | char cbuf[2]; |
1893 | 1902 | ||
@@ -1954,11 +1963,9 @@ static void parse_and_put_prompt(const char *prmt_ptr) | |||
1954 | c = *prmt_ptr++; | 1963 | c = *prmt_ptr++; |
1955 | 1964 | ||
1956 | switch (c) { | 1965 | switch (c) { |
1957 | # if ENABLE_USERNAME_OR_HOMEDIR | ||
1958 | case 'u': | 1966 | case 'u': |
1959 | pbuf = user_buf ? user_buf : (char*)""; | 1967 | pbuf = user_buf ? user_buf : (char*)""; |
1960 | break; | 1968 | break; |
1961 | # endif | ||
1962 | case 'H': | 1969 | case 'H': |
1963 | case 'h': | 1970 | case 'h': |
1964 | pbuf = free_me = safe_gethostname(); | 1971 | pbuf = free_me = safe_gethostname(); |
@@ -1976,7 +1983,6 @@ static void parse_and_put_prompt(const char *prmt_ptr) | |||
1976 | strftime_HHMMSS(timebuf, sizeof(timebuf), NULL)[-3] = '\0'; | 1983 | strftime_HHMMSS(timebuf, sizeof(timebuf), NULL)[-3] = '\0'; |
1977 | pbuf = timebuf; | 1984 | pbuf = timebuf; |
1978 | break; | 1985 | break; |
1979 | # if ENABLE_USERNAME_OR_HOMEDIR | ||
1980 | case 'w': /* current dir */ | 1986 | case 'w': /* current dir */ |
1981 | case 'W': /* basename of cur dir */ | 1987 | case 'W': /* basename of cur dir */ |
1982 | if (!cwd_buf) { | 1988 | if (!cwd_buf) { |
@@ -2003,7 +2009,6 @@ static void parse_and_put_prompt(const char *prmt_ptr) | |||
2003 | if (cp) | 2009 | if (cp) |
2004 | pbuf = (char*)cp + 1; | 2010 | pbuf = (char*)cp + 1; |
2005 | break; | 2011 | break; |
2006 | # endif | ||
2007 | // bb_process_escape_sequence does this now: | 2012 | // bb_process_escape_sequence does this now: |
2008 | // case 'e': case 'E': /* \e \E = \033 */ | 2013 | // case 'e': case 'E': /* \e \E = \033 */ |
2009 | // c = '\033'; | 2014 | // c = '\033'; |
@@ -2064,10 +2069,8 @@ static void parse_and_put_prompt(const char *prmt_ptr) | |||
2064 | free(free_me); | 2069 | free(free_me); |
2065 | } /* while */ | 2070 | } /* while */ |
2066 | 2071 | ||
2067 | # if ENABLE_USERNAME_OR_HOMEDIR | ||
2068 | if (cwd_buf != (char *)bb_msg_unknown) | 2072 | if (cwd_buf != (char *)bb_msg_unknown) |
2069 | free(cwd_buf); | 2073 | free(cwd_buf); |
2070 | # endif | ||
2071 | /* see comment (above this function) about multiline prompt redrawing */ | 2074 | /* see comment (above this function) about multiline prompt redrawing */ |
2072 | cmdedit_prompt = prompt_last_line = prmt_mem_ptr; | 2075 | cmdedit_prompt = prompt_last_line = prmt_mem_ptr; |
2073 | prmt_ptr = strrchr(cmdedit_prompt, '\n'); | 2076 | prmt_ptr = strrchr(cmdedit_prompt, '\n'); |
@@ -2075,7 +2078,7 @@ static void parse_and_put_prompt(const char *prmt_ptr) | |||
2075 | prompt_last_line = prmt_ptr + 1; | 2078 | prompt_last_line = prmt_ptr + 1; |
2076 | put_prompt(); | 2079 | put_prompt(); |
2077 | } | 2080 | } |
2078 | #endif | 2081 | #endif /* FEATURE_EDITING_FANCY_PROMPT */ |
2079 | 2082 | ||
2080 | #if ENABLE_FEATURE_EDITING_WINCH | 2083 | #if ENABLE_FEATURE_EDITING_WINCH |
2081 | static void cmdedit_setwidth(void) | 2084 | static void cmdedit_setwidth(void) |