diff options
Diffstat (limited to 'src/keys.c')
| -rw-r--r-- | src/keys.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/keys.c b/src/keys.c new file mode 100644 index 0000000..8fa11c6 --- /dev/null +++ b/src/keys.c @@ -0,0 +1,67 @@ +#include "keys.h" + +#include <linux/limits.h> +#include <ncurses.h> +#include <stdio.h> +#include <stdlib.h> + +#include "display.h" +#include "err.h" +#include "fm.h" +#include "log.h" +#include "mem.h" +#include "wm.h" + +void handling_keys(int ch, fm_info *i) +{ + switch (ch) { +#ifdef KEY_RESIZE + case KEY_RESIZE: + handle_resize(); + /* TODO: redraw ui */ + break; +#endif + /* Quit */ + case 'q': + endwin(); + exit(0); + /* Down */ + case 'j': + fm_entries_scroll(i, 1); + break; + case 'k': + fm_entries_scroll(i, -1); + break; + case 'h': + fm_cd_up(i); + break; + case 'l': + fm_cd_down(i); + break; + case 'o': + case '\n': + case '\r': + case KEY_ENTER: + log_write(LOG_INFO, "Open file"); + if (!(i->cur->items[i->cursor].is_dir)) { + char filepath[PATH_MAX]; + size_t len = + snprintf(filepath, PATH_MAX, "%s/%s", i->cwd, + i->cur->items[i->cursor].name); + if (len >= PATH_MAX) { + die("snprintf failed"); + } + + char *argv[] = {enveditor, filepath, NULL}; + open_with_editor(argv); + break; + } else { + return; + } + break; + default: + return; + } + + need_redraw = true; +} |
