commit - d244a6559b664474533c734bb3494bb802f3786f
commit + 2c5122bc37cd83522916d7d0ce331971a636ea7e
blob - f8155b46f303d0a2e54e6cef7182335800008725
blob + a0498c7f8f73465f6111e48162a570d1bca2448f
--- fm.1
+++ fm.1
View file with a pager.
.It e
Edit file with an editor.
+.It o
+Open the file with an external application.
+.It m
+Toggle mark on the file at point.
+.It M
+Mark all files
+.It t
+Toggle marking.
.It q
Quit
.Nm .
blob - 5713113a00b60eaaffc9d119ae286f6c3831ae46
blob + daf0b188ce5c58ffc2bec0d80d40e7df82c7bf0f
--- fm.c
+++ fm.c
#define FM_ED "/bin/ed"
#endif
+#ifndef FM_OPENER
+#define FM_OPENER "xdg-open"
+#endif
+
#include "config.h"
struct option opts[] = {
editor = FM_ED;
spawn(editor, ENAME(ESEL), NULL);
+}
+
+static void
+cmd_open(void)
+{
+ const char *opener;
+
+ if (!fm.nfiles || S_ISDIR(EMODE(ESEL)))
+ return;
+
+ if ((opener = getenv("OPENER")) == NULL)
+ opener = FM_OPENER;
+
+ spawn(opener, ENAME(ESEL), NULL);
+}
+
+static void
+cmd_mark(void)
+{
+ if (MARKED(ESEL))
+ del_mark(&fm.marks, ENAME(ESEL));
+ else
+ add_mark(&fm.marks, CWD, ENAME(ESEL));
+
+ MARKED(ESEL) = !MARKED(ESEL);
+ ESEL = (ESEL + 1) % fm.nfiles;
+}
+
+static void
+cmd_toggle_mark(void)
+{
+ int i;
+
+ for (i = 0; i < fm.nfiles; ++i) {
+ if (MARKED(i))
+ del_mark(&fm.marks, ENAME(i));
+ else
+ add_mark(&fm.marks, CWD, ENAME(ESEL));
+ MARKED(i) = !MARKED(i);
+ }
}
static void
+cmd_mark_all(void)
+{
+ int i;
+
+ for (i = 0; i < fm.nfiles; ++i)
+ if (!MARKED(i)) {
+ add_mark(&fm.marks, CWD, ENAME(ESEL));
+ MARKED(i) = 1;
+ }
+}
+
+static void
loop(void)
{
int meta, ch, c;
{'H', 0, cmd_home, X_UPDV},
{'J', 0, cmd_scroll_down, X_UPDV},
{'K', 0, cmd_scroll_up, X_UPDV},
+ {'M', 0, cmd_mark_all, X_UPDV},
{'P', 0, cmd_paste_path, X_UPDV},
{'V', K_CTRL, cmd_scroll_down, X_UPDV},
{'Y', 0, cmd_copy_path, X_UPDV},
{'l', K_CTRL, cmd_reload, X_UPDV},
{'n', 0, cmd_down, X_UPDV},
{'n', K_CTRL, cmd_down, X_UPDV},
+ {'m', 0, cmd_mark, X_UPDV},
{'m', K_CTRL, cmd_shell, X_UPDV},
+ {'o', 0, cmd_open, X_UPDV},
{'p', 0, cmd_up, X_UPDV},
{'p', K_CTRL, cmd_up, X_UPDV},
{'q', 0, NULL, X_QUIT},
+ {'t', 0, cmd_toggle_mark, X_UPDV},
{'v', 0, cmd_view, X_UPDV},
{'v', K_META, cmd_scroll_up, X_UPDV},
{KEY_DOWN, 0, cmd_scroll_down, X_UPDV},