diff --git a/misc/mc.keymap.default b/misc/mc.keymap.default index 774b9444f..f8eee56e3 100644 --- a/misc/mc.keymap.default +++ b/misc/mc.keymap.default @@ -165,6 +165,7 @@ ViewToggleWrapMode = f2 ViewQuit = f3; f10; q; esc; ctrl-g ViewToggleHexMode = f4 ViewGoto = f5 +ViewRunEditor = f6 ViewSearch = f7; question; slash ViewToggleMagicMode = f8 ViewToggleNroffMode = f9 diff --git a/misc/mc.keymap.emacs b/misc/mc.keymap.emacs index 985f65319..ccb5cd42b 100644 --- a/misc/mc.keymap.emacs +++ b/misc/mc.keymap.emacs @@ -169,6 +169,7 @@ ViewToggleWrapMode = f2 ViewQuit = f3; f10; q; esc; ctrl-g ViewToggleHexMode = f4 ViewGoto = f5 +ViewRunEditor = f6 ViewSearch = f7; question; slash ViewToggleMagicMode = f8 ViewToggleNroffMode = f9 diff --git a/src/cmddef.h b/src/cmddef.h index 4e74fbb98..d462879f6 100644 --- a/src/cmddef.h +++ b/src/cmddef.h @@ -290,6 +290,7 @@ #define CK_ViewPrevFile 5025 #define CK_ViewToggleRuler 5026 #define CK_ViewToggleHexNavMode 5027 +#define CK_ViewRunEditor 5028 /* Tree */ #define CK_TreeHelp 6001 diff --git a/src/keybind.c b/src/keybind.c index 1479d8594..433c97ccf 100644 --- a/src/keybind.c +++ b/src/keybind.c @@ -281,6 +281,7 @@ static name_keymap_t command_names[] = { { "ViewPrevFile", CK_ViewPrevFile }, { "ViewToggleRuler", CK_ViewToggleRuler }, { "ViewToggleHexNavMode", CK_ViewToggleHexNavMode }, + { "ViewRunEditor", CK_ViewRunEditor }, /* help */ { "HelpHelp", CK_HelpHelp }, @@ -552,6 +553,7 @@ const global_keymap_t default_viewer_keymap[] = { { KEY_F (3), CK_ViewQuit, "F3" }, { KEY_F (4), CK_ViewToggleHexMode, "F4" }, { KEY_F (5), CK_ViewGoto, "F5" }, + { KEY_F (6), CK_ViewRunEditor, "F6" }, { KEY_F (7), CK_ViewSearch, "F7" }, { KEY_F (8), CK_ViewToggleMagicMode, "F8" }, { KEY_F (9), CK_ViewToggleNroffMode, "F9" }, diff --git a/src/viewer/actions_cmd.c b/src/viewer/actions_cmd.c index 6d002b204..3501af19f 100644 --- a/src/viewer/actions_cmd.c +++ b/src/viewer/actions_cmd.c @@ -79,6 +79,7 @@ /*** file scope functions ************************************************************************/ + /* Both views */ static void mcview_search (mcview_t * view) @@ -340,6 +341,10 @@ mcview_execute_cmd (mcview_t * view, unsigned long command) /* Toggle between hex view and text view */ mcview_toggle_hex_mode (view); break; + case CK_ViewRunEditor: + /* Open current file in editor */ + mcview_edit (view); + break; case CK_ViewGoto: { off_t addr; diff --git a/src/viewer/display.c b/src/viewer/display.c index 671a18fe6..0c50a6994 100644 --- a/src/viewer/display.c +++ b/src/viewer/display.c @@ -101,7 +101,7 @@ mcview_set_buttonbar (mcview_t * view) buttonbar_set_label (b, 2, view->text_wrap_mode ? Q_ ("ButtonBar|UnWrap") : Q_ ("ButtonBar|Wrap"), keymap, (Widget *) view); buttonbar_set_label (b, 4, Q_ ("ButtonBar|Hex"), keymap, (Widget *) view); - buttonbar_set_label (b, 6, "", keymap, (Widget *) view); + buttonbar_set_label (b, 6, Q_ ("ButtonBar|Edit"), keymap, (Widget *) view); buttonbar_set_label (b, 7, Q_ ("ButtonBar|Search"), keymap, (Widget *) view); } diff --git a/src/viewer/internal.h b/src/viewer/internal.h index da4f73a9e..983e33e69 100644 --- a/src/viewer/internal.h +++ b/src/viewer/internal.h @@ -285,6 +285,7 @@ void mcview_toggle_magic_mode (mcview_t * view); void mcview_toggle_wrap_mode (mcview_t * view); void mcview_toggle_nroff_mode (mcview_t * view); void mcview_toggle_hex_mode (mcview_t * view); +void mcview_edit (mcview_t * view); gboolean mcview_ok_to_quit (mcview_t * view); void mcview_init (mcview_t * view); void mcview_done (mcview_t * view); diff --git a/src/viewer/lib.c b/src/viewer/lib.c index b80d96472..54c7c54a3 100644 --- a/src/viewer/lib.c +++ b/src/viewer/lib.c @@ -260,6 +260,24 @@ mcview_done (mcview_t * view) mcview_hexedit_free_change_list (view); } +void +mcview_edit (mcview_t * view) +{ + off_t line, column; + char *canon_fname; + off_t new_offset; + + mcview_offset_to_coord (view, &line, &column, view->dpy_start); + do_edit_at_line (view->filename, line + 1); + canon_fname = vfs_canon (view->filename); + load_file_position (canon_fname, &line, &column, &new_offset); + new_offset = min (new_offset, mcview_get_filesize (view)); + view->dpy_start = mcview_bol (view, new_offset); + g_free (canon_fname); + view->dpy_bbar_dirty = TRUE; + view->dirty++; +} + /* --------------------------------------------------------------------------------------------- */ void