summaryrefslogtreecommitdiffstats
path: root/src/ex_docmd.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2015-01-14 15:47:36 +0100
committerBram Moolenaar <Bram@vim.org>2015-01-14 15:47:36 +0100
commit84c8e5ab9cfb6826e880e8ae062ff3347bb6909e (patch)
treed8fde94422676bc61459e9cc66d367b9f567ee51 /src/ex_docmd.c
parent435797304adc544562934f3ea1572fdc81f6dd92 (diff)
updated for version 7.4.572v7.4.572
Problem: Address type of :wincmd depends on the argument. Solution: Check the argument.
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r--src/ex_docmd.c51
1 files changed, 28 insertions, 23 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index c36f407406..3edc1a2247 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2130,22 +2130,23 @@ do_one_cmd(cmdlinep, sourcing,
* is equal to the lower.
*/
- if (ea.cmdidx != CMD_SIZE
-#ifdef FEAT_USR_CMDS
- && ea.cmdidx != CMD_USER
- && ea.cmdidx != CMD_USER_BUF
-#endif
- )
- ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
- else
-#ifdef FEAT_USR_CMDS
- if (ea.cmdidx != CMD_USER && ea.cmdidx != CMD_USER_BUF)
-#endif
- ea.addr_type = ADDR_LINES;
/* ea.addr_type for user commands is set by find_ucmd */
- ea.cmd = cmd;
+ if (!IS_USER_CMDIDX(ea.cmdidx))
+ {
+ if (ea.cmdidx != CMD_SIZE)
+ ea.addr_type = cmdnames[(int)ea.cmdidx].cmd_addr_type;
+ else
+ ea.addr_type = ADDR_LINES;
+
+#ifdef FEAT_WINDOWS
+ /* :wincmd range depends on the argument. */
+ if (ea.cmdidx == CMD_wincmd)
+ get_wincmd_addr_type(p, &ea);
+#endif
+ }
/* repeat for all ',' or ';' separated addresses */
+ ea.cmd = cmd;
for (;;)
{
ea.line1 = ea.line2;
@@ -2181,7 +2182,6 @@ do_one_cmd(cmdlinep, sourcing,
{
if (*ea.cmd == '%') /* '%' - all lines */
{
- buf_T *buf;
++ea.cmd;
switch (ea.addr_type)
{
@@ -2190,15 +2190,20 @@ do_one_cmd(cmdlinep, sourcing,
ea.line2 = curbuf->b_ml.ml_line_count;
break;
case ADDR_LOADED_BUFFERS:
- buf = firstbuf;
- while (buf->b_next != NULL && buf->b_ml.ml_mfp == NULL)
- buf = buf->b_next;
- ea.line1 = buf->b_fnum;
- buf = lastbuf;
- while (buf->b_prev != NULL && buf->b_ml.ml_mfp == NULL)
- buf = buf->b_prev;
- ea.line2 = buf->b_fnum;
- break;
+ {
+ buf_T *buf = firstbuf;
+
+ while (buf->b_next != NULL
+ && buf->b_ml.ml_mfp == NULL)
+ buf = buf->b_next;
+ ea.line1 = buf->b_fnum;
+ buf = lastbuf;
+ while (buf->b_prev != NULL
+ && buf->b_ml.ml_mfp == NULL)
+ buf = buf->b_prev;
+ ea.line2 = buf->b_fnum;
+ break;
+ }
case ADDR_BUFFERS:
ea.line1 = firstbuf->b_fnum;
ea.line2 = lastbuf->b_fnum;