aboutsummaryrefslogtreecommitdiffstats
path: root/src/keys.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/keys.c')
-rw-r--r--src/keys.c67
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;
+}