command-not-found: handle multiple matches at same length
This commit is contained in:
parent
3cc4ef712e
commit
6ee3449e0c
@ -1,6 +1,6 @@
|
||||
TERMUX_PKG_HOMEPAGE=http://termux.com
|
||||
TERMUX_PKG_DESCRIPTION="List of commands available for installation"
|
||||
TERMUX_PKG_VERSION=0.1
|
||||
TERMUX_PKG_VERSION=0.2
|
||||
|
||||
termux_step_make_install () {
|
||||
TERMUX_SHARE_DIR=$TERMUX_PREFIX/share/termux
|
||||
|
@ -72,7 +72,29 @@ int main(int argc, char** argv) {
|
||||
printf("%s: command not found\n", command_not_found);
|
||||
} else {
|
||||
printf("No command '%s' found, did you mean:\n", command_not_found);
|
||||
printf(" Command '%s' from package '%s'\n", best_command_guess, best_package_guess);
|
||||
if (guesses_at_best_distance == 1) {
|
||||
// Only one suggestion - show it:
|
||||
printf(" Command '%s' from package '%s'\n", best_command_guess, best_package_guess);
|
||||
} else {
|
||||
// Multiple suggestions at the same distance - show them all:
|
||||
rewind(commands_file);
|
||||
while (true) {
|
||||
size_t buffer_length = sizeof(current_line);
|
||||
ssize_t read_bytes = getline(¤t_line, &buffer_length, commands_file);
|
||||
if (read_bytes <= 1) break;
|
||||
size_t line_length = strlen(current_line);
|
||||
current_line[line_length-1] = 0;
|
||||
if (current_line[0] == ' ') { // Binary
|
||||
char* binary_name = current_line + 1;
|
||||
int distance = termux_levenshtein_distance(command_not_found, binary_name);
|
||||
if (best_distance == distance) {
|
||||
printf(" Command '%s' from package '%s'\n", binary_name, current_package);
|
||||
}
|
||||
} else { // Package
|
||||
strncpy(current_package, current_line, sizeof(current_package));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user