Skip to content

Commit

Permalink
show selection info (with -i option)
Browse files Browse the repository at this point in the history
  • Loading branch information
Ondrej Martinek authored and jhawthorn committed Dec 28, 2019
1 parent 04c342c commit 07ee5a4
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 9 deletions.
1 change: 1 addition & 0 deletions src/config.def.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,4 @@
#define DEFAULT_PROMPT "> "
#define DEFAULT_NUM_LINES 10
#define DEFAULT_WORKERS 0
#define DEFAULT_SHOW_INFO 0
8 changes: 7 additions & 1 deletion src/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ static const char *usage_str =
" -s, --show-scores Show the scores of each match\n"
" -0, --read-null Read input delimited by ASCII NUL characters\n"
" -j, --workers NUM Use NUM workers for searching. (default is # of CPUs)\n"
" -i, --show-info Show selection info line\n"
" -h, --help Display this help and exit\n"
" -v, --version Output version information and exit\n";

Expand All @@ -36,6 +37,7 @@ static struct option longopts[] = {{"show-matches", required_argument, NULL, 'e'
{"version", no_argument, NULL, 'v'},
{"benchmark", optional_argument, NULL, 'b'},
{"workers", required_argument, NULL, 'j'},
{"show-info", no_argument, NULL, 'i'},
{"help", no_argument, NULL, 'h'},
{NULL, 0, NULL, 0}};

Expand All @@ -51,13 +53,14 @@ void options_init(options_t *options) {
options->prompt = DEFAULT_PROMPT;
options->workers = DEFAULT_WORKERS;
options->input_delimiter = '\n';
options->show_info = DEFAULT_SHOW_INFO;
}

void options_parse(options_t *options, int argc, char *argv[]) {
options_init(options);

int c;
while ((c = getopt_long(argc, argv, "vhs0e:q:l:t:p:j:", longopts, NULL)) != -1) {
while ((c = getopt_long(argc, argv, "vhs0e:q:l:t:p:j:i", longopts, NULL)) != -1) {
switch (c) {
case 'v':
printf("%s " VERSION " © 2014-2018 John Hawthorn\n", argv[0]);
Expand Down Expand Up @@ -108,6 +111,9 @@ void options_parse(options_t *options, int argc, char *argv[]) {
}
options->num_lines = l;
} break;
case 'i':
options->show_info = 1;
break;
case 'h':
default:
usage(argv[0]);
Expand Down
1 change: 1 addition & 0 deletions src/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ typedef struct {
const char *prompt;
unsigned int workers;
char input_delimiter;
int show_info;
} options_t;

void options_init(options_t *options);
Expand Down
18 changes: 10 additions & 8 deletions src/tty_interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ static void clear(tty_interface_t *state) {

tty_setcol(tty, 0);
size_t line = 0;
while (line++ < state->options->num_lines) {
while (line++ < state->options->num_lines + (state->options->show_info ? 1 : 0)) {
tty_newline(tty);
}
tty_clearline(tty);
Expand Down Expand Up @@ -90,9 +90,16 @@ static void draw(tty_interface_t *state) {
start = available - num_lines;
}
}

tty_setcol(tty, 0);
tty_printf(tty, "%s%s", options->prompt, state->search);
tty_clearline(tty);

if (options->show_info) {
tty_printf(tty, "\n[%lu/%lu]", choices->available, choices->size);
tty_clearline(tty);
}

for (size_t i = start; i < start + num_lines; i++) {
tty_printf(tty, "\n");
tty_clearline(tty);
Expand All @@ -101,14 +108,9 @@ static void draw(tty_interface_t *state) {
draw_match(state, choice, i == choices->selection);
}
}
if (num_lines > 0) {
tty_moveup(tty, num_lines);
}

tty_setcol(tty, 0);
fputs(options->prompt, tty->fout);
for (size_t i = 0; i < state->cursor; i++)
fputc(state->search[i], tty->fout);
tty_moveup(tty, num_lines + (options->show_info ? 1 : 0));
tty_setcol(tty, strlen(options->prompt) + state->cursor);
tty_flush(tty);
}

Expand Down

0 comments on commit 07ee5a4

Please sign in to comment.