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 / 7.4 / 7.4.572 < prev    next >
Encoding:
Internet Message Format  |  2015-01-14  |  5.9 KB

  1. To: vim_dev@googlegroups.com
  2. Subject: Patch 7.4.572
  3. Fcc: outbox
  4. From: Bram Moolenaar <Bram@moolenaar.net>
  5. Mime-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. ------------
  9.  
  10. Patch 7.4.572
  11. Problem:    Address type of :wincmd depends on the argument.
  12. Solution:   Check the argument.
  13. Files:        src/ex_docmd.c, src/window.c, src/proto/window.pro
  14.  
  15.  
  16. *** ../vim-7.4.571/src/ex_docmd.c    2015-01-14 11:24:51.851582151 +0100
  17. --- src/ex_docmd.c    2015-01-14 14:48:24.586468863 +0100
  18. ***************
  19. *** 2130,2151 ****
  20.    * is equal to the lower.
  21.    */
  22.   
  23. -     if (ea.cmdidx != CMD_SIZE
  24. - #ifdef FEAT_USR_CMDS
  25. -     && ea.cmdidx != CMD_USER
  26. -     && ea.cmdidx != CMD_USER_BUF
  27. - #endif
  28. -        )
  29. -     ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
  30. -     else
  31. - #ifdef FEAT_USR_CMDS
  32. -     if (ea.cmdidx != CMD_USER && ea.cmdidx != CMD_USER_BUF)
  33. - #endif
  34. -     ea.addr_type = ADDR_LINES;
  35.       /* ea.addr_type for user commands is set by find_ucmd */
  36. !     ea.cmd = cmd;
  37.   
  38.       /* repeat for all ',' or ';' separated addresses */
  39.       for (;;)
  40.       {
  41.       ea.line1 = ea.line2;
  42. --- 2130,2152 ----
  43.    * is equal to the lower.
  44.    */
  45.   
  46.       /* ea.addr_type for user commands is set by find_ucmd */
  47. !     if (!IS_USER_CMDIDX(ea.cmdidx))
  48. !     {
  49. !     if (ea.cmdidx != CMD_SIZE)
  50. !         ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
  51. !     else
  52. !         ea.addr_type = ADDR_LINES;
  53. ! #ifdef FEAT_WINDOWS
  54. !     /* :wincmd range depends on the argument. */
  55. !     if (ea.cmdidx == CMD_wincmd)
  56. !         get_wincmd_addr_type(p, &ea);
  57. ! #endif
  58. !     }
  59.   
  60.       /* repeat for all ',' or ';' separated addresses */
  61. +     ea.cmd = cmd;
  62.       for (;;)
  63.       {
  64.       ea.line1 = ea.line2;
  65. ***************
  66. *** 2181,2187 ****
  67.       {
  68.           if (*ea.cmd == '%')            /* '%' - all lines */
  69.           {
  70. -         buf_T    *buf;
  71.           ++ea.cmd;
  72.           switch (ea.addr_type)
  73.           {
  74. --- 2182,2187 ----
  75. ***************
  76. *** 2190,2204 ****
  77.               ea.line2 = curbuf->b_ml.ml_line_count;
  78.               break;
  79.               case ADDR_LOADED_BUFFERS:
  80. !             buf = firstbuf;
  81. !             while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL)
  82. !                 buf = buf->b_next;
  83. !             ea.line1 = buf->b_fnum;
  84. !             buf = lastbuf;
  85. !             while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
  86. !                 buf = buf->b_prev;
  87. !             ea.line2 = buf->b_fnum;
  88. !             break;
  89.               case ADDR_BUFFERS:
  90.               ea.line1 = firstbuf->b_fnum;
  91.               ea.line2 = lastbuf->b_fnum;
  92. --- 2190,2209 ----
  93.               ea.line2 = curbuf->b_ml.ml_line_count;
  94.               break;
  95.               case ADDR_LOADED_BUFFERS:
  96. !             {
  97. !                 buf_T    *buf = firstbuf;
  98. !                 while (buf->b_next != NULL
  99. !                           && buf->b_ml.ml_mfp == NULL)
  100. !                 buf = buf->b_next;
  101. !                 ea.line1 = buf->b_fnum;
  102. !                 buf = lastbuf;
  103. !                 while (buf->b_prev != NULL
  104. !                           && buf->b_ml.ml_mfp == NULL)
  105. !                 buf = buf->b_prev;
  106. !                 ea.line2 = buf->b_fnum;
  107. !                 break;
  108. !             }
  109.               case ADDR_BUFFERS:
  110.               ea.line1 = firstbuf->b_fnum;
  111.               ea.line2 = lastbuf->b_fnum;
  112. *** ../vim-7.4.571/src/window.c    2014-12-13 03:58:03.794672546 +0100
  113. --- src/window.c    2015-01-14 15:17:18.543647480 +0100
  114. ***************
  115. *** 624,629 ****
  116. --- 624,733 ----
  117.       }
  118.   }
  119.   
  120. + /*
  121. +  * Figure out the address type for ":wnncmd".
  122. +  */
  123. +     void
  124. + get_wincmd_addr_type(arg, eap)
  125. +     char_u    *arg;
  126. +     exarg_T    *eap;
  127. + {
  128. +     switch (*arg)
  129. +     {
  130. +     case 'S':
  131. +     case Ctrl_S:
  132. +     case 's':
  133. +     case Ctrl_N:
  134. +     case 'n':
  135. +     case 'j':
  136. +     case Ctrl_J:
  137. +     case 'k':
  138. +     case Ctrl_K:
  139. +     case 'T':
  140. +     case Ctrl_R:
  141. +     case 'r':
  142. +     case 'R':
  143. +     case 'K':
  144. +     case 'J':
  145. +     case '+':
  146. +     case '-':
  147. +     case Ctrl__:
  148. +     case '_':
  149. +     case '|':
  150. +     case ']':
  151. +     case Ctrl_RSB:
  152. +     case 'g':
  153. +     case Ctrl_G:
  154. + #ifdef FEAT_VERTSPLIT
  155. +     case Ctrl_V:
  156. +     case 'v':
  157. +     case 'h':
  158. +     case Ctrl_H:
  159. +     case 'l':
  160. +     case Ctrl_L:
  161. +     case 'H':
  162. +     case 'L':
  163. +     case '>':
  164. +     case '<':
  165. + #endif
  166. + #if defined(FEAT_QUICKFIX)
  167. +     case '}':
  168. + #endif
  169. + #ifdef FEAT_SEARCHPATH
  170. +     case 'f':
  171. +     case 'F':
  172. +     case Ctrl_F:
  173. + #endif
  174. + #ifdef FEAT_FIND_ID
  175. +     case 'i':
  176. +     case Ctrl_I:
  177. +     case 'd':
  178. +     case Ctrl_D:
  179. + #endif
  180. +         /* window size or any count */
  181. +         eap->addr_type = ADDR_LINES;
  182. +         break;
  183. +     case Ctrl_HAT:
  184. +     case '^':
  185. +         /* buffer number */
  186. +         eap->addr_type = ADDR_BUFFERS;
  187. +         break;
  188. +     case Ctrl_Q:
  189. +     case 'q':
  190. +     case Ctrl_C:
  191. +     case 'c':
  192. +     case Ctrl_O:
  193. +     case 'o':
  194. +     case Ctrl_W:
  195. +     case 'w':
  196. +     case 'W':
  197. +     case 'x':
  198. +     case Ctrl_X:
  199. +         /* window number */
  200. +         eap->addr_type = ADDR_WINDOWS;
  201. +         break;
  202. + #if defined(FEAT_QUICKFIX)
  203. +     case Ctrl_Z:
  204. +     case 'z':
  205. +     case 'P':
  206. + #endif
  207. +     case 't':
  208. +     case Ctrl_T:
  209. +     case 'b':
  210. +     case Ctrl_B:
  211. +     case 'p':
  212. +     case Ctrl_P:
  213. +     case '=':
  214. +     case CAR:
  215. +         /* no count */
  216. +         eap->addr_type = 0;
  217. +         break;
  218. +     }
  219. + }
  220.       static void
  221.   cmd_with_count(cmd, bufp, bufsize, Prenum)
  222.       char    *cmd;
  223. *** ../vim-7.4.571/src/proto/window.pro    2014-12-17 14:47:52.870412129 +0100
  224. --- src/proto/window.pro    2015-01-14 15:16:37.544092744 +0100
  225. ***************
  226. *** 1,5 ****
  227. --- 1,6 ----
  228.   /* window.c */
  229.   void do_window __ARGS((int nchar, long Prenum, int xchar));
  230. + void get_wincmd_addr_type __ARGS((char_u *arg, exarg_T *eap));
  231.   int win_split __ARGS((int size, int flags));
  232.   int win_split_ins __ARGS((int size, int flags, win_T *new_wp, int dir));
  233.   int win_valid __ARGS((win_T *win));
  234. *** ../vim-7.4.571/src/version.c    2015-01-14 14:08:40.364402377 +0100
  235. --- src/version.c    2015-01-14 15:46:36.136651958 +0100
  236. ***************
  237. *** 743,744 ****
  238. --- 743,746 ----
  239.   {   /* Add new patch number below this line */
  240. + /**/
  241. +     572,
  242.   /**/
  243.  
  244. -- 
  245. From "know your smileys":
  246.  :^[/   mean-smiley-with-cigarette
  247.  
  248.  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
  249. ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
  250. \\\  an exciting new programming language -- http://www.Zimbu.org        ///
  251.  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
  252.