home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / patches / 6.2.414 < prev    next >
Encoding:
Internet Message Format  |  2004-03-29  |  9.5 KB

  1. To: vim-dev@vim.org
  2. Subject: Patch 6.2.414
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. Mime-Version: 1.0
  6. Content-Type: text/plain; charset=ISO-8859-1
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 6.2.414
  11. Problem:    The function used for custom completion of user commands cannot
  12.         have <SID> to make it local. (Hari Krishna Dara)
  13. Solution:   Pass the SID of the script where the user command was defined on
  14.         to the completion.  Also clean up #ifdefs.
  15. Files:        src/ex_docmd.c, src/eval.c, src/ex_getln.c, src/structs.h
  16.  
  17.  
  18. *** ../vim-6.2.413/src/ex_docmd.c    Fri Mar 26 10:38:21 2004
  19. --- src/ex_docmd.c    Tue Mar 30 20:28:50 2004
  20. ***************
  21. *** 32,38 ****
  22. --- 32,40 ----
  23.       long    uc_def;        /* The default value for a range/count */
  24.       scid_T    uc_scriptID;    /* SID where the command was defined */
  25.       int        uc_compl;    /* completion type */
  26. + # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  27.       char_u    *uc_compl_arg;    /* completion argument if any */
  28. + # endif
  29.   } ucmd_T;
  30.   
  31.   #define UC_BUFFER    1    /* -buffer: local to current buffer */
  32. ***************
  33. *** 2813,2819 ****
  34. --- 2813,2821 ----
  35.       xp->xp_pattern = buff;
  36.       xp->xp_context = EXPAND_COMMANDS;    /* Default until we get past command */
  37.       xp->xp_backslash = XP_BS_NONE;
  38. + #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  39.       xp->xp_arg = NULL;
  40. + #endif
  41.   
  42.   /*
  43.    * 2. skip comment lines and leading space, colons or bars
  44. ***************
  45. *** 2883,2890 ****
  46.                        cmdidx = (cmdidx_T)((int)cmdidx + 1))
  47.           if (STRNCMP(cmdnames[(int)cmdidx].cmd_name, cmd, (size_t)i) == 0)
  48.           break;
  49. - #ifdef FEAT_USR_CMDS
  50.   
  51.       if (cmd[0] >= 'A' && cmd[0] <= 'Z')
  52.       {
  53.           while (ASCII_ISALNUM(*p) || *p == '*')    /* Allow * wild card */
  54. --- 2885,2892 ----
  55.                        cmdidx = (cmdidx_T)((int)cmdidx + 1))
  56.           if (STRNCMP(cmdnames[(int)cmdidx].cmd_name, cmd, (size_t)i) == 0)
  57.           break;
  58.   
  59. + #ifdef FEAT_USR_CMDS
  60.       if (cmd[0] >= 'A' && cmd[0] <= 'Z')
  61.       {
  62.           while (ASCII_ISALNUM(*p) || *p == '*')    /* Allow * wild card */
  63. ***************
  64. *** 2955,2961 ****
  65. --- 2957,2966 ----
  66.                   argt = uc->uc_argt;
  67.   #ifdef FEAT_CMDL_COMPL
  68.                   compl = uc->uc_compl;
  69. + # ifdef FEAT_EVAL
  70.                   xp->xp_arg = uc->uc_compl_arg;
  71. +                 xp->xp_scriptID = uc->uc_scriptID;
  72. + # endif
  73.   #endif
  74.                   /* Do not search for further abbreviations
  75.                    * if this is an exact match
  76. ***************
  77. *** 4662,4677 ****
  78.       cmd->uc_argt = argt;
  79.       cmd->uc_def = def;
  80.       cmd->uc_compl = compl;
  81. -     cmd->uc_compl_arg = compl_arg;
  82.   #ifdef FEAT_EVAL
  83.       cmd->uc_scriptID = current_SID;
  84.   #endif
  85.   
  86.       return OK;
  87.   
  88.   fail:
  89.       vim_free(rep_buf);
  90.       vim_free(compl_arg);
  91.       return FAIL;
  92.   }
  93.   
  94. --- 4683,4702 ----
  95.       cmd->uc_argt = argt;
  96.       cmd->uc_def = def;
  97.       cmd->uc_compl = compl;
  98.   #ifdef FEAT_EVAL
  99.       cmd->uc_scriptID = current_SID;
  100. + # ifdef FEAT_CMDL_COMPL
  101. +     cmd->uc_compl_arg = compl_arg;
  102. + # endif
  103.   #endif
  104.   
  105.       return OK;
  106.   
  107.   fail:
  108.       vim_free(rep_buf);
  109. + #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  110.       vim_free(compl_arg);
  111. + #endif
  112.       return FAIL;
  113.   }
  114.   
  115. ***************
  116. *** 4688,4694 ****
  117.       {EXPAND_AUGROUP, "augroup"},
  118.       {EXPAND_BUFFERS, "buffer"},
  119.       {EXPAND_COMMANDS, "command"},
  120. ! #ifdef FEAT_EVAL
  121.       {EXPAND_USER_DEFINED, "custom"},
  122.   #endif
  123.       {EXPAND_DIRECTORIES, "dir"},
  124. --- 4713,4719 ----
  125.       {EXPAND_AUGROUP, "augroup"},
  126.       {EXPAND_BUFFERS, "buffer"},
  127.       {EXPAND_COMMANDS, "command"},
  128. ! #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  129.       {EXPAND_USER_DEFINED, "custom"},
  130.   #endif
  131.       {EXPAND_DIRECTORIES, "dir"},
  132. ***************
  133. *** 4998,5015 ****
  134.           EMSG2(_("E180: Invalid complete value: %s"), val);
  135.           return FAIL;
  136.           }
  137. !         if (*compl == EXPAND_USER_DEFINED && arg == NULL)
  138.           {
  139. !         EMSG(_("E467: Custom completion requires a function argument"));
  140.           return FAIL;
  141.           }
  142. !         if (*compl != EXPAND_USER_DEFINED && arg != NULL)
  143.           {
  144. !         EMSG(_("E468: Completion argument only allowed for custom completion"));
  145.           return FAIL;
  146.           }
  147.           if (arg != NULL)
  148.           *compl_arg = vim_strnsave(arg, (int)arglen);
  149.       }
  150.       else
  151.       {
  152. --- 5023,5046 ----
  153.           EMSG2(_("E180: Invalid complete value: %s"), val);
  154.           return FAIL;
  155.           }
  156. ! #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  157. !         if (*compl != EXPAND_USER_DEFINED && arg != NULL)
  158. ! #else
  159. !         if (arg != NULL)
  160. ! #endif
  161.           {
  162. !         EMSG(_("E468: Completion argument only allowed for custom completion"));
  163.           return FAIL;
  164.           }
  165. ! #if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  166. !         if (*compl == EXPAND_USER_DEFINED && arg == NULL)
  167.           {
  168. !         EMSG(_("E467: Custom completion requires a function argument"));
  169.           return FAIL;
  170.           }
  171.           if (arg != NULL)
  172.           *compl_arg = vim_strnsave(arg, (int)arglen);
  173. + #endif
  174.       }
  175.       else
  176.       {
  177. ***************
  178. *** 5111,5117 ****
  179. --- 5142,5150 ----
  180.       cmd = USER_CMD_GA(gap, i);
  181.       vim_free(cmd->uc_name);
  182.       vim_free(cmd->uc_rep);
  183. + # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  184.       vim_free(cmd->uc_compl_arg);
  185. + # endif
  186.       }
  187.       ga_clear(gap);
  188.   }
  189. ***************
  190. *** 5148,5154 ****
  191. --- 5181,5189 ----
  192.   
  193.       vim_free(cmd->uc_name);
  194.       vim_free(cmd->uc_rep);
  195. + # if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  196.       vim_free(cmd->uc_compl_arg);
  197. + # endif
  198.   
  199.       --gap->ga_len;
  200.       ++gap->ga_room;
  201. *** ../vim-6.2.413/src/eval.c    Mon Mar 29 16:12:14 2004
  202. --- src/eval.c    Tue Mar 30 20:27:02 2004
  203. ***************
  204. *** 695,700 ****
  205. --- 695,701 ----
  206.       return retval;
  207.   }
  208.   
  209. + #if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
  210.   /*
  211.    * Call some vimL function and return the result as a string
  212.    * Uses argv[argc] for the function arguments.
  213. ***************
  214. *** 757,762 ****
  215. --- 758,764 ----
  216.       }
  217.       return retval;
  218.   }
  219. + #endif
  220.   
  221.   /*
  222.    * Save the current function call pointer, and set it to NULL.
  223. *** ../vim-6.2.413/src/ex_getln.c    Wed Mar 17 14:08:56 2004
  224. --- src/ex_getln.c    Sun Mar 28 14:39:02 2004
  225. ***************
  226. *** 93,99 ****
  227. --- 93,101 ----
  228.   static int    glob_in_path_prefix __ARGS((expand_T *xp));
  229.   #ifdef FEAT_CMDL_COMPL
  230.   static int    ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
  231. + # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
  232.   static int    ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
  233. + # endif
  234.   #endif
  235.   
  236.   #ifdef FEAT_CMDWIN
  237. ***************
  238. *** 3733,3740 ****
  239. --- 3735,3744 ----
  240.       ret = ExpandSettings(xp, ®match, num_file, file);
  241.       else if (xp->xp_context == EXPAND_MAPPINGS)
  242.       ret = ExpandMappings(®match, num_file, file);
  243. + # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
  244.       else if (xp->xp_context == EXPAND_USER_DEFINED)
  245.       ret = ExpandUserDefined(xp, ®match, num_file, file);
  246. + # endif
  247.       else
  248.       {
  249.       static struct expgen
  250. ***************
  251. *** 3872,3877 ****
  252. --- 3876,3882 ----
  253.       return OK;
  254.   }
  255.   
  256. + # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
  257.   /*
  258.    * Expand names with a function defined by the user.
  259.    */
  260. ***************
  261. *** 3882,3888 ****
  262.       int        *num_file;
  263.       char_u    ***file;
  264.   {
  265. - #ifdef FEAT_EVAL
  266.       char_u    *args[3];
  267.       char_u    *all;
  268.       char_u    *s;
  269. --- 3887,3892 ----
  270. ***************
  271. *** 3890,3895 ****
  272. --- 3894,3900 ----
  273.       char_u      keep;
  274.       char_u      num[50];
  275.       garray_T    ga;
  276. +     int        save_current_SID = current_SID;
  277.   
  278.       if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0')
  279.       return FAIL;
  280. ***************
  281. *** 3903,3909 ****
  282. --- 3908,3916 ----
  283.       args[1] = ccline.cmdbuff;
  284.       args[2] = num;
  285.   
  286. +     current_SID = xp->xp_scriptID;
  287.       all = call_vim_function(xp->xp_arg, 3, args, FALSE);
  288. +     current_SID = save_current_SID;
  289.       ccline.cmdbuff[ccline.cmdlen] = keep;
  290.       if (all == NULL)
  291.       return FAIL;
  292. ***************
  293. *** 3940,3949 ****
  294.       *file = ga.ga_data;
  295.       *num_file = ga.ga_len;
  296.       return OK;
  297. - #else
  298. -     return FAIL;
  299. - #endif
  300.   }
  301.   
  302.   /*
  303.    * Expand color scheme names: 'runtimepath'/colors/{pat}.vim
  304. --- 3947,3954 ----
  305.       *file = ga.ga_data;
  306.       *num_file = ga.ga_len;
  307.       return OK;
  308.   }
  309. + #endif
  310.   
  311.   /*
  312.    * Expand color scheme names: 'runtimepath'/colors/{pat}.vim
  313. *** ../vim-6.2.413/src/structs.h    Tue Mar 23 14:04:16 2004
  314. --- src/structs.h    Sun Mar 28 11:52:48 2004
  315. ***************
  316. *** 383,389 ****
  317.   {
  318.       int        xp_context;        /* type of expansion */
  319.       char_u    *xp_pattern;        /* start of item to expand */
  320. !     char_u    *xp_arg;        /* generic expansion argument */
  321.       int        xp_backslash;        /* one of the XP_BS_ values */
  322.       int        xp_numfiles;        /* number of files found by
  323.                               file name completion */
  324. --- 383,392 ----
  325.   {
  326.       int        xp_context;        /* type of expansion */
  327.       char_u    *xp_pattern;        /* start of item to expand */
  328. ! #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
  329. !     char_u    *xp_arg;        /* completion function */
  330. !     int        xp_scriptID;        /* SID for completion function */
  331. ! #endif
  332.       int        xp_backslash;        /* one of the XP_BS_ values */
  333.       int        xp_numfiles;        /* number of files found by
  334.                               file name completion */
  335. *** ../vim-6.2.413/src/version.c    Tue Mar 30 10:43:14 2004
  336. --- src/version.c    Tue Mar 30 21:42:05 2004
  337. ***************
  338. *** 639,640 ****
  339. --- 639,642 ----
  340.   {   /* Add new patch number below this line */
  341. + /**/
  342. +     414,
  343.   /**/
  344.  
  345. -- 
  346. hundred-and-one symptoms of being an internet addict:
  347. 195. Your cat has its own home page.
  348.  
  349.  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
  350. ///        Sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
  351. \\\              Project leader for A-A-P -- http://www.A-A-P.org        ///
  352.  \\\  Buy at Amazon and help AIDS victims -- http://ICCF.nl/click1.html ///
  353.