comparison src/viminfo.c @ 26532:255bc9a08e58 v8.2.3795

patch 8.2.3795: too many #ifdefs Commit: https://github.com/vim/vim/commit/739f13a55b4982efb37ebc9282e7f79975fff982 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 13 13:12:53 2021 +0000 patch 8.2.3795: too many #ifdefs Problem: Too many #ifdefs. Solution: Graduate the jumplist feature.
author Bram Moolenaar <Bram@vim.org>
date Mon, 13 Dec 2021 14:15:03 +0100
parents 50f8204eb8f7
children 3a2b222107a6
comparison
equal deleted inserted replaced
26531:b8398b0fb0ed 26532:255bc9a08e58
1945 /* 1945 /*
1946 * Functions relating to reading/writing marks from viminfo 1946 * Functions relating to reading/writing marks from viminfo
1947 */ 1947 */
1948 1948
1949 static xfmark_T *vi_namedfm = NULL; 1949 static xfmark_T *vi_namedfm = NULL;
1950 #ifdef FEAT_JUMPLIST
1951 static xfmark_T *vi_jumplist = NULL; 1950 static xfmark_T *vi_jumplist = NULL;
1952 static int vi_jumplist_len = 0; 1951 static int vi_jumplist_len = 0;
1953 #endif
1954 1952
1955 static void 1953 static void
1956 write_one_mark(FILE *fp_out, int c, pos_T *pos) 1954 write_one_mark(FILE *fp_out, int c, pos_T *pos)
1957 { 1955 {
1958 if (pos->lnum != 0) 1956 if (pos->lnum != 0)
1976 write_one_mark(fp_out, '*', &pos); 1974 write_one_mark(fp_out, '*', &pos);
1977 1975
1978 write_one_mark(fp_out, '"', &buf->b_last_cursor); 1976 write_one_mark(fp_out, '"', &buf->b_last_cursor);
1979 write_one_mark(fp_out, '^', &buf->b_last_insert); 1977 write_one_mark(fp_out, '^', &buf->b_last_insert);
1980 write_one_mark(fp_out, '.', &buf->b_last_change); 1978 write_one_mark(fp_out, '.', &buf->b_last_change);
1981 #ifdef FEAT_JUMPLIST
1982 // changelist positions are stored oldest first 1979 // changelist positions are stored oldest first
1983 for (i = 0; i < buf->b_changelistlen; ++i) 1980 for (i = 0; i < buf->b_changelistlen; ++i)
1984 { 1981 {
1985 // skip duplicates 1982 // skip duplicates
1986 if (i == 0 || !EQUAL_POS(buf->b_changelist[i - 1], 1983 if (i == 0 || !EQUAL_POS(buf->b_changelist[i - 1],
1987 buf->b_changelist[i])) 1984 buf->b_changelist[i]))
1988 write_one_mark(fp_out, '+', &buf->b_changelist[i]); 1985 write_one_mark(fp_out, '+', &buf->b_changelist[i]);
1989 } 1986 }
1990 #endif
1991 for (i = 0; i < NMARKS; i++) 1987 for (i = 0; i < NMARKS; i++)
1992 write_one_mark(fp_out, 'a' + i, &buf->b_namedm[i]); 1988 write_one_mark(fp_out, 'a' + i, &buf->b_namedm[i]);
1993 } 1989 }
1994 1990
1995 /* 1991 /*
2171 ++vi_idx; // skip duplicate 2167 ++vi_idx; // skip duplicate
2172 } 2168 }
2173 write_one_filemark(fp, fm, '\'', i - NMARKS + '0'); 2169 write_one_filemark(fp, fm, '\'', i - NMARKS + '0');
2174 } 2170 }
2175 2171
2176 #ifdef FEAT_JUMPLIST
2177 // Write the jumplist with -' 2172 // Write the jumplist with -'
2178 fputs(_("\n# Jumplist (newest first):\n"), fp); 2173 fputs(_("\n# Jumplist (newest first):\n"), fp);
2179 setpcmark(); // add current cursor position 2174 setpcmark(); // add current cursor position
2180 cleanup_jumplist(curwin, FALSE); 2175 cleanup_jumplist(curwin, FALSE);
2181 vi_idx = 0; 2176 vi_idx = 0;
2199 if (fm->fmark.fnum == 0 2194 if (fm->fmark.fnum == 0
2200 || ((buf = buflist_findnr(fm->fmark.fnum)) != NULL 2195 || ((buf = buflist_findnr(fm->fmark.fnum)) != NULL
2201 && !skip_for_viminfo(buf))) 2196 && !skip_for_viminfo(buf)))
2202 write_one_filemark(fp, fm, '-', '\''); 2197 write_one_filemark(fp, fm, '-', '\'');
2203 } 2198 }
2204 #endif
2205 } 2199 }
2206 2200
2207 /* 2201 /*
2208 * Compare functions for qsort() below, that compares b_last_used. 2202 * Compare functions for qsort() below, that compares b_last_used.
2209 */ 2203 */
2410 { 2404 {
2411 case '"': curbuf->b_last_cursor = pos; break; 2405 case '"': curbuf->b_last_cursor = pos; break;
2412 case '^': curbuf->b_last_insert = pos; break; 2406 case '^': curbuf->b_last_insert = pos; break;
2413 case '.': curbuf->b_last_change = pos; break; 2407 case '.': curbuf->b_last_change = pos; break;
2414 case '+': 2408 case '+':
2415 #ifdef FEAT_JUMPLIST
2416 // changelist positions are stored oldest 2409 // changelist positions are stored oldest
2417 // first 2410 // first
2418 if (curbuf->b_changelistlen == JUMPLISTSIZE) 2411 if (curbuf->b_changelistlen == JUMPLISTSIZE)
2419 // list is full, remove oldest entry 2412 // list is full, remove oldest entry
2420 mch_memmove(curbuf->b_changelist, 2413 mch_memmove(curbuf->b_changelist,
2422 sizeof(pos_T) * (JUMPLISTSIZE - 1)); 2415 sizeof(pos_T) * (JUMPLISTSIZE - 1));
2423 else 2416 else
2424 ++curbuf->b_changelistlen; 2417 ++curbuf->b_changelistlen;
2425 curbuf->b_changelist[ 2418 curbuf->b_changelist[
2426 curbuf->b_changelistlen - 1] = pos; 2419 curbuf->b_changelistlen - 1] = pos;
2427 #endif
2428 break; 2420 break;
2429 2421
2430 // Using the line number for the last-used 2422 // Using the line number for the last-used
2431 // timestamp. 2423 // timestamp.
2432 case '*': curbuf->b_last_used = pos.lnum; break; 2424 case '*': curbuf->b_last_used = pos.lnum; break;
2440 fputs((char *)line, fp_out); 2432 fputs((char *)line, fp_out);
2441 } 2433 }
2442 2434
2443 if (load_marks) 2435 if (load_marks)
2444 { 2436 {
2445 #ifdef FEAT_JUMPLIST
2446 win_T *wp; 2437 win_T *wp;
2447 2438
2448 FOR_ALL_WINDOWS(wp) 2439 FOR_ALL_WINDOWS(wp)
2449 { 2440 {
2450 if (wp->w_buffer == curbuf) 2441 if (wp->w_buffer == curbuf)
2451 wp->w_changelistidx = curbuf->b_changelistlen; 2442 wp->w_changelistidx = curbuf->b_changelistlen;
2452 } 2443 }
2453 #endif
2454 if (flags & VIF_ONLY_CURBUF) 2444 if (flags & VIF_ONLY_CURBUF)
2455 break; 2445 break;
2456 } 2446 }
2457 } 2447 }
2458 2448
2502 ((*virp->vir_line == '\'' && (VIM_ISDIGIT(*str) || isupper(*str))) 2492 ((*virp->vir_line == '\'' && (VIM_ISDIGIT(*str) || isupper(*str)))
2503 || (*virp->vir_line == '-' && *str == '\''))) 2493 || (*virp->vir_line == '-' && *str == '\'')))
2504 { 2494 {
2505 if (*str == '\'') 2495 if (*str == '\'')
2506 { 2496 {
2507 #ifdef FEAT_JUMPLIST
2508 // If the jumplist isn't full insert fmark as oldest entry 2497 // If the jumplist isn't full insert fmark as oldest entry
2509 if (curwin->w_jumplistlen == JUMPLISTSIZE) 2498 if (curwin->w_jumplistlen == JUMPLISTSIZE)
2510 fm = NULL; 2499 fm = NULL;
2511 else 2500 else
2512 { 2501 {
2516 ++curwin->w_jumplistlen; 2505 ++curwin->w_jumplistlen;
2517 fm = &curwin->w_jumplist[0]; 2506 fm = &curwin->w_jumplist[0];
2518 fm->fmark.mark.lnum = 0; 2507 fm->fmark.mark.lnum = 0;
2519 fm->fname = NULL; 2508 fm->fname = NULL;
2520 } 2509 }
2521 #else
2522 fm = NULL;
2523 #endif
2524 } 2510 }
2525 else if (VIM_ISDIGIT(*str)) 2511 else if (VIM_ISDIGIT(*str))
2526 fm = &namedfm_p[*str - '0' + NMARKS]; 2512 fm = &namedfm_p[*str - '0' + NMARKS];
2527 else 2513 else
2528 fm = &namedfm_p[*str - 'A']; 2514 fm = &namedfm_p[*str - 'A'];
2549 */ 2535 */
2550 static void 2536 static void
2551 prepare_viminfo_marks(void) 2537 prepare_viminfo_marks(void)
2552 { 2538 {
2553 vi_namedfm = ALLOC_CLEAR_MULT(xfmark_T, NMARKS + EXTRA_MARKS); 2539 vi_namedfm = ALLOC_CLEAR_MULT(xfmark_T, NMARKS + EXTRA_MARKS);
2554 #ifdef FEAT_JUMPLIST
2555 vi_jumplist = ALLOC_CLEAR_MULT(xfmark_T, JUMPLISTSIZE); 2540 vi_jumplist = ALLOC_CLEAR_MULT(xfmark_T, JUMPLISTSIZE);
2556 vi_jumplist_len = 0; 2541 vi_jumplist_len = 0;
2557 #endif
2558 } 2542 }
2559 2543
2560 static void 2544 static void
2561 finish_viminfo_marks(void) 2545 finish_viminfo_marks(void)
2562 { 2546 {
2566 { 2550 {
2567 for (i = 0; i < NMARKS + EXTRA_MARKS; ++i) 2551 for (i = 0; i < NMARKS + EXTRA_MARKS; ++i)
2568 vim_free(vi_namedfm[i].fname); 2552 vim_free(vi_namedfm[i].fname);
2569 VIM_CLEAR(vi_namedfm); 2553 VIM_CLEAR(vi_namedfm);
2570 } 2554 }
2571 #ifdef FEAT_JUMPLIST
2572 if (vi_jumplist != NULL) 2555 if (vi_jumplist != NULL)
2573 { 2556 {
2574 for (i = 0; i < vi_jumplist_len; ++i) 2557 for (i = 0; i < vi_jumplist_len; ++i)
2575 vim_free(vi_jumplist[i].fname); 2558 vim_free(vi_jumplist[i].fname);
2576 VIM_CLEAR(vi_jumplist); 2559 VIM_CLEAR(vi_jumplist);
2577 } 2560 }
2578 #endif
2579 } 2561 }
2580 2562
2581 /* 2563 /*
2582 * Accept a new style mark line from the viminfo, store it when it's new. 2564 * Accept a new style mark line from the viminfo, store it when it's new.
2583 */ 2565 */
2610 return; 2592 return;
2611 timestamp = (time_t)vp[3].bv_nr; 2593 timestamp = (time_t)vp[3].bv_nr;
2612 2594
2613 if (name == '\'') 2595 if (name == '\'')
2614 { 2596 {
2615 #ifdef FEAT_JUMPLIST
2616 if (vi_jumplist != NULL) 2597 if (vi_jumplist != NULL)
2617 { 2598 {
2618 if (vi_jumplist_len < JUMPLISTSIZE) 2599 if (vi_jumplist_len < JUMPLISTSIZE)
2619 fm = &vi_jumplist[vi_jumplist_len++]; 2600 fm = &vi_jumplist[vi_jumplist_len++];
2620 } 2601 }
2665 fm->fmark.mark.lnum = 0; 2646 fm->fmark.mark.lnum = 0;
2666 fm->fname = NULL; 2647 fm->fname = NULL;
2667 fm->time_set = 0; 2648 fm->time_set = 0;
2668 } 2649 }
2669 } 2650 }
2670 #endif
2671 } 2651 }
2672 else 2652 else
2673 { 2653 {
2674 int idx; 2654 int idx;
2675 xfmark_T *namedfm_p = get_namedfm(); 2655 xfmark_T *namedfm_p = get_namedfm();