Patch 8.0.1513
Problem: The jumplist is not always properly cleaned up.
Solution: Call fname2fnum() before cleanup_jumplist(). (Yegappan Lakshmanan)
Files: src/evalfunc.c, src/mark.c, src/proto/mark.pro
*** ../vim-8.0.1512/src/evalfunc.c 2018-02-13 12:26:08.900247771 +0100
--- src/evalfunc.c 2018-02-13 13:27:21.178135044 +0100
***************
*** 4858,4870 ****
return;
list_append_number(rettv->vval.v_list, (varnumber_T)wp->w_jumplistidx);
! cleanup_jumplist(wp);
for (i = 0; i < wp->w_jumplistlen; ++i)
{
if (wp->w_jumplist[i].fmark.mark.lnum == 0)
continue;
- if (wp->w_jumplist[i].fmark.fnum == 0)
- fname2fnum(&wp->w_jumplist[i]);
if ((d = dict_alloc()) == NULL)
return;
if (list_append_dict(l, d) == FAIL)
--- 4858,4869 ----
return;
list_append_number(rettv->vval.v_list, (varnumber_T)wp->w_jumplistidx);
! cleanup_jumplist(wp, TRUE);
!
for (i = 0; i < wp->w_jumplistlen; ++i)
{
if (wp->w_jumplist[i].fmark.mark.lnum == 0)
continue;
if ((d = dict_alloc()) == NULL)
return;
if (list_append_dict(l, d) == FAIL)
*** ../vim-8.0.1512/src/mark.c 2018-02-11 14:29:45.372349161 +0100
--- src/mark.c 2018-02-13 13:31:39.188316169 +0100
***************
*** 221,227 ****
pos_T *pos;
xfmark_T *jmp;
! cleanup_jumplist(curwin);
if (curwin->w_jumplistlen == 0) /* nothing to jump to */
return (pos_T *)NULL;
--- 221,227 ----
pos_T *pos;
xfmark_T *jmp;
! cleanup_jumplist(curwin, TRUE);
if (curwin->w_jumplistlen == 0) /* nothing to jump to */
return (pos_T *)NULL;
***************
*** 891,897 ****
int i;
char_u *name;
! cleanup_jumplist(curwin);
/* Highlight title */
MSG_PUTS_TITLE(_("\n jump line col file/text"));
--- 891,897 ----
int i;
char_u *name;
! cleanup_jumplist(curwin, TRUE);
/* Highlight title */
MSG_PUTS_TITLE(_("\n jump line col file/text"));
***************
*** 899,906 ****
{
if (curwin->w_jumplist[i].fmark.mark.lnum != 0)
{
- if (curwin->w_jumplist[i].fmark.fnum == 0)
- fname2fnum(&curwin->w_jumplist[i]);
name = fm_getname(&curwin->w_jumplist[i].fmark, 16);
if (name == NULL) /* file name not available */
continue;
--- 899,904 ----
***************
*** 1303,1315 ****
/*
* When deleting lines, this may create duplicate marks in the
* jumplist. They will be removed here for the specified window.
*/
void
! cleanup_jumplist(win_T *wp)
{
int i;
int from, to;
to = 0;
for (from = 0; from < wp->w_jumplistlen; ++from)
{
--- 1301,1328 ----
/*
* When deleting lines, this may create duplicate marks in the
* jumplist. They will be removed here for the specified window.
+ * When "loadfiles" is TRUE first ensure entries have the "fnum" field set
+ * (this may be a bit slow).
*/
void
! cleanup_jumplist(win_T *wp, int loadfiles)
{
int i;
int from, to;
+ if (loadfiles)
+ {
+ /* If specified, load all the files from the jump list. This is
+ * needed to properly clean up duplicate entries, but will take some
+ * time. */
+ for (i = 0; i < wp->w_jumplistlen; ++i)
+ {
+ if ((wp->w_jumplist[i].fmark.fnum == 0) &&
+ (wp->w_jumplist[i].fmark.mark.lnum != 0))
+ fname2fnum(&wp->w_jumplist[i]);
+ }
+ }
+
to = 0;
for (from = 0; from < wp->w_jumplistlen; ++from)
{
***************
*** 1738,1744 ****
/* Write the jumplist with -' */
fputs(_("\n# Jumplist (newest first):\n"), fp);
setpcmark(); /* add current cursor position */
! cleanup_jumplist(curwin);
vi_idx = 0;
idx = curwin->w_jumplistlen - 1;
for (i = 0; i < JUMPLISTSIZE; ++i)
--- 1751,1757 ----
/* Write the jumplist with -' */
fputs(_("\n# Jumplist (newest first):\n"), fp);
setpcmark(); /* add current cursor position */
! cleanup_jumplist(curwin, FALSE);
vi_idx = 0;
idx = curwin->w_jumplistlen - 1;
for (i = 0; i < JUMPLISTSIZE; ++i)
*** ../vim-8.0.1512/src/proto/mark.pro 2018-02-11 14:29:45.376349139 +0100
--- src/proto/mark.pro 2018-02-13 13:27:21.178135044 +0100
***************
*** 24,30 ****
void mark_col_adjust(linenr_T lnum, colnr_T mincol, long lnum_amount, long
col_amount);
void copy_jumplist(win_T *from, win_T *to);
void free_jumplist(win_T *wp);
! void cleanup_jumplist(win_T *wp);
void set_last_cursor(win_T *win);
void free_all_marks(void);
int read_viminfo_filemark(vir_T *virp, int force);
--- 24,30 ----
void mark_col_adjust(linenr_T lnum, colnr_T mincol, long lnum_amount, long
col_amount);
void copy_jumplist(win_T *from, win_T *to);
void free_jumplist(win_T *wp);
! void cleanup_jumplist(win_T *wp, int loadfiles);
void set_last_cursor(win_T *win);
void free_all_marks(void);
int read_viminfo_filemark(vir_T *virp, int force);
*** ../vim-8.0.1512/src/version.c 2018-02-13 13:12:06.585200192 +0100
--- src/version.c 2018-02-13 13:28:45.573535153 +0100
***************
*** 773,774 ****
--- 773,776 ----
{ /* Add new patch number below this line */
+ /**/
+ 1513,
/**/
--
MARTHA'S WAY: Don't throw out all that leftover wine. Freeze into ice cubes
for future use in casseroles and sauces.
MY WAY: What leftover wine?
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.