diff options
| author | Nakidai <nakidai@disroot.org> | 2025-06-12 05:11:20 +0300 |
|---|---|---|
| committer | Nakidai <nakidai@disroot.org> | 2025-06-12 05:11:20 +0300 |
| commit | 56febb222bcae0ac9e46e312e37e6bc42448b41c (patch) | |
| tree | f875a10e482edc301e02bfddd71f055eb9bca325 | |
| parent | 412e21a2fee23fd952b205dfd967fa34b5b60b4d (diff) | |
| download | fp-56febb222bcae0ac9e46e312e37e6bc42448b41c.tar.gz fp-56febb222bcae0ac9e46e312e37e6bc42448b41c.zip | |
Add lines argument
So now amount of lines in search printed is not hardcoded but is chosen by a user
| -rw-r--r-- | fp.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/fp.c b/fp.c index 3279f2d..e75c5be 100644 --- a/fp.c +++ b/fp.c @@ -21,7 +21,7 @@ struct result char name[NAME_MAX+1]; } *results = 0; size_t amount = 0; -int ischosen = 1; +int ischosen = 1, lines; struct termios state; int getch() @@ -31,20 +31,20 @@ int getch() fflush(stdout); - int res = tcgetattr(0, &old); + tcgetattr(0, &old); old.c_lflag &= ~ICANON & ~ECHO; old.c_cc[VMIN] = 1; old.c_cc[VTIME] = 0; - res = tcsetattr(0, TCSANOW, &old); + tcsetattr(0, TCSANOW, &old); buf = getchar(); old.c_lflag |= ICANON | ECHO; - res = tcsetattr(0, TCSANOW, &old); + tcsetattr(0, TCSANOW, &old); return buf; } void restore(void) { - fprintf(stderr, "\033[6B\r"); + fprintf(stderr, "\033[%dB\r", lines + 1); if (ischosen) { fprintf(stderr, "You've chosen `"); @@ -122,21 +122,24 @@ void render(const char *buf, size_t bufi) { sortresults(buf); fprintf(stderr, "\r: %s\n", buf); - for (size_t i = 0; i < 5; ++i) + for (size_t i = 0; i < lines; ++i) fprintf(stderr, "`%s'\n", results[i].name); - fprintf(stderr, "\033[6A\033[%luC", 2 + bufi); + fprintf(stderr, "\033[%dA\033[%luC", lines + 1, 2 + bufi); fflush(stderr); } int main(int argc, char **argv) { - if (argc != 2 || !*argv[1]) + if (argc != 3 || !*argv[1] || !*argv[2]) { - fprintf(stderr, "usage: %s path\n", *argv); + fprintf(stderr, "usage: %s path lines\n", *argv); return 1; } loadpath(argv[1]); + lines = atoi(argv[2]); + lines = lines < 0 ? 0 : lines; + lines = lines > amount - 1 ? amount - 1 : lines; render("", 0); tcgetattr(0, &state); |