Commit Diff


commit - 63fe4ed00638fdb4e44feeb16c33bb9b6263d7ed
commit + d244a6559b664474533c734bb3494bb802f3786f
blob - 0fc49eb5c21f32a52551a168d27dd6c81e93a2cd
blob + f8155b46f303d0a2e54e6cef7182335800008725
--- fm.1
+++ fm.1
@@ -98,6 +98,8 @@ Refresh and redraw screen.
 Spawn a shell
 .It v
 View file with a pager.
+.It e
+Edit file with an editor.
 .It q
 Quit
 .Nm .
blob - d4d03e8f16cedffd10d9404047118384e0be364e
blob + 5713113a00b60eaaffc9d119ae286f6c3831ae46
--- fm.c
+++ fm.c
@@ -35,6 +35,10 @@
 #define FM_PAGER "/usr/bin/less"
 #endif
 
+#ifndef FM_ED
+#define FM_ED "/bin/ed"
+#endif
+
 #include "config.h"
 
 struct option opts[] = {
@@ -1352,6 +1356,21 @@ cmd_view(void)
 	if ((pager = getenv("PAGER")) == NULL)
 		pager = FM_PAGER;
 	spawn(pager, ENAME(ESEL), NULL);
+}
+
+static void
+cmd_edit(void)
+{
+	const char *editor;
+
+	if (!fm.nfiles || S_ISDIR(EMODE(ESEL)))
+		return;
+
+	if ((editor = getenv("VISUAL")) == NULL ||
+	    (editor = getenv("EDITOR")) == NULL)
+		editor = FM_ED;
+
+	spawn(editor, ENAME(ESEL), NULL);
 }
 
 static void
@@ -1380,6 +1399,7 @@ loop(void)
 		{'Y',		0,	cmd_copy_path,		X_UPDV},
 		{'^',		0,	cmd_cd_up,		X_UPDV},
 		{'b',		0,	cmd_cd_up,		X_UPDV},
+		{'e',		0,	cmd_edit,		X_UPDV},
 		{'f',		0,	cmd_cd_down,		X_UPDV},
 		{'g',		0,	cmd_jump_top,		X_UPDV},
 		{'g',		K_CTRL,	NULL,			X_UPDV},