Implementation of getting last editing/viewing position of file.

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
Slava Zanko 2013-01-11 13:31:31 +03:00
parent 7fd906ba13
commit 6447c76cca
5 changed files with 40 additions and 14 deletions

View File

@ -1102,7 +1102,8 @@ load_file_position (const vfs_path_t * filename_vpath, long *line, long *column,
return;
/* prepare array for serialized bookmarks */
*bookmarks = g_array_sized_new (FALSE, FALSE, sizeof (size_t), MAX_SAVED_BOOKMARKS);
if (bookmarks != NULL)
*bookmarks = g_array_sized_new (FALSE, FALSE, sizeof (size_t), MAX_SAVED_BOOKMARKS);
filename = vfs_path_to_str (filename_vpath);
while (fgets (buf, sizeof (buf), f) != NULL)
@ -1143,7 +1144,7 @@ load_file_position (const vfs_path_t * filename_vpath, long *line, long *column,
*column = strtol (pos_tokens[1], NULL, 10);
if (pos_tokens[2] == NULL)
*offset = 0;
else
else if (bookmarks != NULL)
{
size_t i;

View File

@ -67,7 +67,7 @@ int pause_after_run = pause_on_dumb_terminals;
void do_execute (const char *shell, const char *command, int flags);
void do_executev (const char *shell, int flags, char *const argv[]);
char *execute_get_external_cmd_opts_from_config (const char *command,
const vfs_path_t * filename_vpath, int start_line);
const vfs_path_t * filename_vpath, long start_line);
/* --------------------------------------------------------------------------------------------- */
@ -254,7 +254,7 @@ execute_get_opts_from_cfg (const char *command, const char *default_str)
char *
execute_get_external_cmd_opts_from_config (const char *command, const vfs_path_t * filename_vpath,
int start_line)
long start_line)
{
char *str_from_config, *return_str;
char *parameter;
@ -270,7 +270,7 @@ execute_get_external_cmd_opts_from_config (const char *command, const vfs_path_t
g_free (str_from_config);
str_from_config = return_str;
parameter = g_strdup_printf ("%d", start_line);
parameter = g_strdup_printf ("%ld", start_line);
return_str = str_replace_all (str_from_config, "%lineno", parameter);
g_free (parameter);
g_free (str_from_config);
@ -612,7 +612,7 @@ execute_with_vfs_arg (const char *command, const vfs_path_t * filename_vpath)
void
execute_external_editor_or_viewer (const char *command, const vfs_path_t * filename_vpath,
int start_line)
long start_line)
{
vfs_path_t *localcopy_vpath = NULL;
const vfs_path_t *do_execute_vpath;

View File

@ -44,7 +44,7 @@ gboolean execute_suspend (const gchar * event_group_name, const gchar * event_na
/* Execute command on a filename that can be on VFS */
void execute_with_vfs_arg (const char *command, const vfs_path_t * filename_vpath);
void execute_external_editor_or_viewer (const char *command, const vfs_path_t * filename_vpath,
int start_line);
long start_line);
void post_exec (void);
void pre_exec (void);

View File

@ -166,7 +166,17 @@ do_view_cmd (gboolean normal)
static inline void
do_edit (const vfs_path_t * what_vpath)
{
do_edit_at_line (what_vpath, use_internal_edit, 0);
long line = 0;
if (!use_internal_edit)
{
long column;
off_t offset;
if (what_vpath != NULL && *(vfs_path_get_by_index (what_vpath, 0)->path) != '\0')
load_file_position (what_vpath, &line, &column, &offset, NULL);
}
do_edit_at_line (what_vpath, use_internal_edit, line);
}
/* --------------------------------------------------------------------------------------------- */
@ -607,7 +617,7 @@ set_basic_panel_listing_to (int panel_index, int listing_mode)
/* --------------------------------------------------------------------------------------------- */
gboolean
view_file_at_line (const vfs_path_t * filename_vpath, int plain_view, int internal, int start_line)
view_file_at_line (const vfs_path_t * filename_vpath, int plain_view, int internal, long start_line)
{
static const char *viewer = NULL;
gboolean ret = TRUE;
@ -647,7 +657,7 @@ view_file_at_line (const vfs_path_t * filename_vpath, int plain_view, int intern
char view_entry[BUF_TINY];
if (start_line != 0)
g_snprintf (view_entry, sizeof (view_entry), "View:%d", start_line);
g_snprintf (view_entry, sizeof (view_entry), "View:%ld", start_line);
else
strcpy (view_entry, "View");
@ -688,7 +698,18 @@ view_file_at_line (const vfs_path_t * filename_vpath, int plain_view, int intern
gboolean
view_file (const vfs_path_t * filename_vpath, int plain_view, int internal)
{
return view_file_at_line (filename_vpath, plain_view, internal, 0);
long line = 0;
if (!internal)
{
long column;
off_t offset;
if (filename_vpath != NULL && *(vfs_path_get_by_index (filename_vpath, 0)->path) != '\0')
load_file_position (filename_vpath, &line, &column, &offset, NULL);
}
return view_file_at_line (filename_vpath, plain_view, internal, line);
}
@ -761,7 +782,7 @@ view_filtered_cmd (void)
/* --------------------------------------------------------------------------------------------- */
void
do_edit_at_line (const vfs_path_t * what_vpath, gboolean internal, int start_line)
do_edit_at_line (const vfs_path_t * what_vpath, gboolean internal, long start_line)
{
static const char *editor = NULL;
@ -777,6 +798,10 @@ do_edit_at_line (const vfs_path_t * what_vpath, gboolean internal, int start_lin
if (editor == NULL)
editor = get_default_editor ();
}
if (start_line < 1)
start_line = 1;
execute_external_editor_or_viewer (editor, what_vpath, start_line);
}

View File

@ -53,13 +53,13 @@ void smart_dirsize_cmd (void);
void single_dirsize_cmd (void);
void dirsizes_cmd (void);
gboolean view_file_at_line (const vfs_path_t * filename_vpath, int plain_view, int internal,
int start_line);
long start_line);
gboolean view_file (const vfs_path_t * filename_vpath, int normal, int internal);
void view_cmd (void);
void view_file_cmd (void);
void view_raw_cmd (void);
void view_filtered_cmd (void);
void do_edit_at_line (const vfs_path_t * what_vpath, gboolean internal, int start_line);
void do_edit_at_line (const vfs_path_t * what_vpath, gboolean internal, long start_line);
void edit_cmd (void);
void edit_cmd_new (void);
#ifdef USE_INTERNAL_EDIT