comparison src/eval.c @ 6991:814f1f569e4a v7.4.813

patch 7.4.813 Problem: It is not possible to save and restore character search state. Solution: Add getcharsearch() and setcharsearch(). (James McCoy)
author Bram Moolenaar <bram@vim.org>
date Tue, 11 Aug 2015 14:26:19 +0200
parents 1efa7c2b9368
children fc099c55a36a
comparison
equal deleted inserted replaced
6990:9c248be4e7d2 6991:814f1f569e4a
553 static void f_get __ARGS((typval_T *argvars, typval_T *rettv)); 553 static void f_get __ARGS((typval_T *argvars, typval_T *rettv));
554 static void f_getbufline __ARGS((typval_T *argvars, typval_T *rettv)); 554 static void f_getbufline __ARGS((typval_T *argvars, typval_T *rettv));
555 static void f_getbufvar __ARGS((typval_T *argvars, typval_T *rettv)); 555 static void f_getbufvar __ARGS((typval_T *argvars, typval_T *rettv));
556 static void f_getchar __ARGS((typval_T *argvars, typval_T *rettv)); 556 static void f_getchar __ARGS((typval_T *argvars, typval_T *rettv));
557 static void f_getcharmod __ARGS((typval_T *argvars, typval_T *rettv)); 557 static void f_getcharmod __ARGS((typval_T *argvars, typval_T *rettv));
558 static void f_getcharsearch __ARGS((typval_T *argvars, typval_T *rettv));
558 static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv)); 559 static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv));
559 static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv)); 560 static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv));
560 static void f_getcmdtype __ARGS((typval_T *argvars, typval_T *rettv)); 561 static void f_getcmdtype __ARGS((typval_T *argvars, typval_T *rettv));
561 static void f_getcmdwintype __ARGS((typval_T *argvars, typval_T *rettv)); 562 static void f_getcmdwintype __ARGS((typval_T *argvars, typval_T *rettv));
562 static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv)); 563 static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv));
686 static void f_searchpairpos __ARGS((typval_T *argvars, typval_T *rettv)); 687 static void f_searchpairpos __ARGS((typval_T *argvars, typval_T *rettv));
687 static void f_searchpos __ARGS((typval_T *argvars, typval_T *rettv)); 688 static void f_searchpos __ARGS((typval_T *argvars, typval_T *rettv));
688 static void f_server2client __ARGS((typval_T *argvars, typval_T *rettv)); 689 static void f_server2client __ARGS((typval_T *argvars, typval_T *rettv));
689 static void f_serverlist __ARGS((typval_T *argvars, typval_T *rettv)); 690 static void f_serverlist __ARGS((typval_T *argvars, typval_T *rettv));
690 static void f_setbufvar __ARGS((typval_T *argvars, typval_T *rettv)); 691 static void f_setbufvar __ARGS((typval_T *argvars, typval_T *rettv));
692 static void f_setcharsearch __ARGS((typval_T *argvars, typval_T *rettv));
691 static void f_setcmdpos __ARGS((typval_T *argvars, typval_T *rettv)); 693 static void f_setcmdpos __ARGS((typval_T *argvars, typval_T *rettv));
692 static void f_setline __ARGS((typval_T *argvars, typval_T *rettv)); 694 static void f_setline __ARGS((typval_T *argvars, typval_T *rettv));
693 static void f_setloclist __ARGS((typval_T *argvars, typval_T *rettv)); 695 static void f_setloclist __ARGS((typval_T *argvars, typval_T *rettv));
694 static void f_setmatches __ARGS((typval_T *argvars, typval_T *rettv)); 696 static void f_setmatches __ARGS((typval_T *argvars, typval_T *rettv));
695 static void f_setpos __ARGS((typval_T *argvars, typval_T *rettv)); 697 static void f_setpos __ARGS((typval_T *argvars, typval_T *rettv));
8147 {"get", 2, 3, f_get}, 8149 {"get", 2, 3, f_get},
8148 {"getbufline", 2, 3, f_getbufline}, 8150 {"getbufline", 2, 3, f_getbufline},
8149 {"getbufvar", 2, 3, f_getbufvar}, 8151 {"getbufvar", 2, 3, f_getbufvar},
8150 {"getchar", 0, 1, f_getchar}, 8152 {"getchar", 0, 1, f_getchar},
8151 {"getcharmod", 0, 0, f_getcharmod}, 8153 {"getcharmod", 0, 0, f_getcharmod},
8154 {"getcharsearch", 0, 0, f_getcharsearch},
8152 {"getcmdline", 0, 0, f_getcmdline}, 8155 {"getcmdline", 0, 0, f_getcmdline},
8153 {"getcmdpos", 0, 0, f_getcmdpos}, 8156 {"getcmdpos", 0, 0, f_getcmdpos},
8154 {"getcmdtype", 0, 0, f_getcmdtype}, 8157 {"getcmdtype", 0, 0, f_getcmdtype},
8155 {"getcmdwintype", 0, 0, f_getcmdwintype}, 8158 {"getcmdwintype", 0, 0, f_getcmdwintype},
8156 {"getcurpos", 0, 0, f_getcurpos}, 8159 {"getcurpos", 0, 0, f_getcurpos},
8283 {"searchpairpos", 3, 7, f_searchpairpos}, 8286 {"searchpairpos", 3, 7, f_searchpairpos},
8284 {"searchpos", 1, 4, f_searchpos}, 8287 {"searchpos", 1, 4, f_searchpos},
8285 {"server2client", 2, 2, f_server2client}, 8288 {"server2client", 2, 2, f_server2client},
8286 {"serverlist", 0, 0, f_serverlist}, 8289 {"serverlist", 0, 0, f_serverlist},
8287 {"setbufvar", 3, 3, f_setbufvar}, 8290 {"setbufvar", 3, 3, f_setbufvar},
8291 {"setcharsearch", 1, 1, f_setcharsearch},
8288 {"setcmdpos", 1, 1, f_setcmdpos}, 8292 {"setcmdpos", 1, 1, f_setcmdpos},
8289 {"setline", 2, 2, f_setline}, 8293 {"setline", 2, 2, f_setline},
8290 {"setloclist", 2, 3, f_setloclist}, 8294 {"setloclist", 2, 3, f_setloclist},
8291 {"setmatches", 1, 1, f_setmatches}, 8295 {"setmatches", 1, 1, f_setmatches},
8292 {"setpos", 2, 2, f_setpos}, 8296 {"setpos", 2, 2, f_setpos},
11659 f_getcharmod(argvars, rettv) 11663 f_getcharmod(argvars, rettv)
11660 typval_T *argvars UNUSED; 11664 typval_T *argvars UNUSED;
11661 typval_T *rettv; 11665 typval_T *rettv;
11662 { 11666 {
11663 rettv->vval.v_number = mod_mask; 11667 rettv->vval.v_number = mod_mask;
11668 }
11669
11670 /*
11671 * "getcharsearch()" function
11672 */
11673 static void
11674 f_getcharsearch(argvars, rettv)
11675 typval_T *argvars UNUSED;
11676 typval_T *rettv;
11677 {
11678 if (rettv_dict_alloc(rettv) != FAIL)
11679 {
11680 dict_T *dict = rettv->vval.v_dict;
11681
11682 dict_add_nr_str(dict, "char", 0L, last_csearch());
11683 dict_add_nr_str(dict, "forward", last_csearch_forward(), NULL);
11684 dict_add_nr_str(dict, "until", last_csearch_until(), NULL);
11685 }
11664 } 11686 }
11665 11687
11666 /* 11688 /*
11667 * "getcmdline()" function 11689 * "getcmdline()" function
11668 */ 11690 */
16999 } 17021 }
17000 } 17022 }
17001 17023
17002 /* reset notion of buffer */ 17024 /* reset notion of buffer */
17003 aucmd_restbuf(&aco); 17025 aucmd_restbuf(&aco);
17026 }
17027 }
17028
17029 static void
17030 f_setcharsearch(argvars, rettv)
17031 typval_T *argvars;
17032 typval_T *rettv UNUSED;
17033 {
17034 dict_T *d;
17035 dictitem_T *di;
17036 char_u *csearch;
17037
17038 if (argvars[0].v_type != VAR_DICT)
17039 {
17040 EMSG(_(e_dictreq));
17041 return;
17042 }
17043
17044 if ((d = argvars[0].vval.v_dict) != NULL)
17045 {
17046 csearch = get_dict_string(d, (char_u *)"char", FALSE);
17047 if (csearch != NULL)
17048 {
17049 if (enc_utf8)
17050 {
17051 int pcc[MAX_MCO];
17052 int c = utfc_ptr2char(csearch, pcc);
17053 set_last_csearch(c, csearch, utfc_ptr2len(csearch));
17054 }
17055 else
17056 set_last_csearch(mb_ptr2char(csearch),
17057 csearch, mb_ptr2len(csearch));
17058 }
17059
17060 di = dict_find(d, (char_u *)"forward", -1);
17061 if (di != NULL)
17062 set_csearch_direction(get_tv_number(&di->di_tv)
17063 ? FORWARD : BACKWARD);
17064
17065 di = dict_find(d, (char_u *)"until", -1);
17066 if (di != NULL)
17067 set_csearch_until(!!get_tv_number(&di->di_tv));
17004 } 17068 }
17005 } 17069 }
17006 17070
17007 /* 17071 /*
17008 * "setcmdpos()" function 17072 * "setcmdpos()" function