Thumbnail

rani/cscroll.git

Clone URL: https://git.buni.party/rani/cscroll.git

commit fee8bcd62ed96564632764e8f4512ff431538210 Author: Raniconduh <clagv.randomgames@gmail.com> Date: Mon Oct 11 23:36:57 2021 +0000 added (un)mark all commands diff --git a/include/io.h b/include/io.h index 5a75bad..d7b8529 100644 --- a/include/io.h +++ b/include/io.h @@ -296 +299 @@ void terminate_curses(void);  void curses_write_file(struct dir_entry_t *, bool);  char curses_getch(void);  char * prompt(char *, char **); +char * curses_getline(char *); +void unmark_all(void); +void mark_all(void);    extern bool print_path;  extern FILE * stdout_back; diff --git a/src/io.c b/src/io.c index 79de4fd..c0726f7 100644 --- a/src/io.c +++ b/src/io.c @@ -26 +27 @@  #include <stdbool.h>  #include <string.h>  #include <stdio.h> +#include <stdlib.h>    #include "dir.h"  #include "io.h" @@ -1037 +10413 @@ char curses_getch(void) {   char * ptr = seq;     if (c == 27) { - *ptr++ = getch(); + char c = getch(); + if (c == '[') { + *ptr++ = c; + } else { + ungetch(c); + return seq[0]; + }   *ptr++ = getch();   *ptr++ = '\0';   } @@ -2103 +21737 @@ done:;   delwin(w);   return NULL;  } + + +char * curses_getline(char * p) { + curs_set(1); + echo(); + + printw("%s", p); + refresh(); + + char * inp = malloc(128); + size_t l = 0; + char c; + while ((c = getch()) != '\n') + inp[l++] = c; + + curs_set(0); + noecho(); + + return inp; +} + + +void mark_all(void) { + for (size_t i = 0; i < n_dir_entries; i++) + dir_entries[i]->marked = true; + n_marked_files = n_dir_entries; +} + + +void unmark_all(void) { + for (size_t i = 0; i < n_dir_entries; i++) + dir_entries[i]->marked = false; + n_marked_files = 0; +} diff --git a/src/main.c b/src/main.c index 6f5d026..158c332 100644 --- a/src/main.c +++ b/src/main.c @@ -1726 +17214 @@ int main(int argc, char ** argv) {   if (n_marked_files) n_marked_files--;   }   break; + case ':':; + char * inp = curses_getline(":"); + if (!strcmp(inp, "ma")) + mark_all(); + else if (!strcmp(inp, "mu")) + unmark_all(); + free(inp); + break;   case 'q':   goto done;   default: