Fix mode switch after CK_FileNext/CK_FilePrev.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2013-03-24 16:14:33 +04:00
parent 4d0f17e79a
commit d70f6b5b63
3 changed files with 39 additions and 8 deletions

View File

@ -356,8 +356,6 @@ exec_extension_view (void *target, char *cmd, const vfs_path_t * filename_vpath,
int def_hex_mode = mcview_default_hex_mode, changed_hex_mode = 0;
int def_nroff_flag = mcview_default_nroff_flag, changed_nroff_flag = 0;
(void) target;
mcview_altered_hex_mode = 0;
mcview_altered_nroff_flag = 0;
if (def_hex_mode != mcview_default_hex_mode)
@ -365,7 +363,16 @@ exec_extension_view (void *target, char *cmd, const vfs_path_t * filename_vpath,
if (def_nroff_flag != mcview_default_nroff_flag)
changed_nroff_flag = 1;
if (target == NULL)
mcview_viewer (cmd, filename_vpath, start_line);
else
{
char *file_name;
file_name = vfs_path_to_str (filename_vpath);
mcview_load ((mcview_t *) target, cmd, file_name, start_line);
g_free (file_name);
}
if (changed_hex_mode && !mcview_altered_hex_mode)
mcview_default_hex_mode = def_hex_mode;

View File

@ -63,6 +63,7 @@
#include "src/filemanager/layout.h"
#include "src/filemanager/cmd.h"
#include "src/filemanager/midnight.h" /* current_panel */
#include "src/filemanager/ext.h" /* regex_command_for() */
#include "src/history.h"
#include "src/execute.h"
@ -78,9 +79,23 @@
/*** file scope variables ************************************************************************/
/* --------------------------------------------------------------------------------------------- */
/*** file scope functions ************************************************************************/
/* --------------------------------------------------------------------------------------------- */
static void
mcview_remove_ext_script (mcview_t * view)
{
if (view->ext_script != NULL)
{
mc_unlink (view->ext_script);
vfs_path_free (view->ext_script);
view->ext_script = NULL;
}
}
/* --------------------------------------------------------------------------------------------- */
/* Both views */
static void
mcview_search (mcview_t * view)
@ -320,7 +335,7 @@ mcview_load_next_prev (mcview_t * view, int direction)
dir_list *dir;
int *dir_count, *dir_idx;
vfs_path_t *vfile;
char *file;
vfs_path_t *ext_script = NULL;
mcview_load_next_prev_init (view);
mcview_scan_for_file (view, direction);
@ -333,15 +348,22 @@ mcview_load_next_prev (mcview_t * view, int direction)
view->dir_count = NULL;
view->dir_idx = NULL;
vfile = vfs_path_append_new (view->workdir_vpath, dir->list[*dir_idx].fname, (char *) NULL);
file = vfs_path_to_str (vfile);
vfs_path_free (vfile);
mcview_done (view);
mcview_remove_ext_script (view);
mcview_init (view);
if (regex_command_for (view, vfile, "View", &ext_script) == 0)
{
char *file;
file = vfs_path_to_str (vfile);
mcview_load (view, NULL, file, 0);
g_free (file);
}
vfs_path_free (vfile);
view->dir = dir;
view->dir_count = dir_count;
view->dir_idx = dir_idx;
view->ext_script = ext_script;
view->dpy_bbar_dirty = FALSE; /* FIXME */
view->dirty++;
@ -622,6 +644,7 @@ mcview_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *
mcview_ok_to_quit (view);
}
mcview_done (view);
mcview_remove_ext_script (view);
return MSG_HANDLED;
default:

View File

@ -188,6 +188,7 @@ struct mcview_struct
* Pointer is used here as reference to WPanel::count */
int *dir_idx; /* Index of current file in dir structure.
* Pointer is used here as reference to WPanel::count */
vfs_path_t *ext_script; /* Temporary script file created by regex_command_for() */
};
typedef struct mcview_nroff_struct