Patch 7.4.2071
Problem: The return value of type() is difficult to use.
Solution: Define v:t_ constants. (Ken Takata)
Files: runtime/doc/eval.txt, src/eval.c, src/evalfunc.c,
src/testdir/test_channel.vim, src/testdir/test_viml.vim, src/vim.h
*** ../vim-7.4.2070/runtime/doc/eval.txt 2016-07-16 14:46:51.119240709
+0200
--- runtime/doc/eval.txt 2016-07-19 17:18:42.434204673 +0200
***************
*** 1810,1815 ****
--- 1827,1853 ----
example, when jumping to a tag the value is ":tag tagname\r".
For ":edit +cmd file" the value is ":cmd\r".
+ *v:t_TYPE* *v:t_bool* *t_bool-varialble*
+ v:t_bool Value of Boolean type. Read-only. See: |type()|
+ *v:t_channel* *t_channel-varialble*
+ v:t_channel Value of Channel type. Read-only. See: |type()|
+ *v:t_dict* *t_dict-varialble*
+ v:t_dict Value of Dictionary type. Read-only. See: |type()|
+ *v:t_float* *t_float-varialble*
+ v:t_float Value of Float type. Read-only. See: |type()|
+ *v:t_func* *t_func-varialble*
+ v:t_func Value of Funcref type. Read-only. See: |type()|
+ *v:t_job* *t_job-varialble*
+ v:t_job Value of Job type. Read-only. See: |type()|
+ *v:t_list* *t_list-varialble*
+ v:t_list Value of List type. Read-only. See: |type()|
+ *v:t_none* *t_none-varialble*
+ v:t_none Value of None type. Read-only. See: |type()|
+ *v:t_number* *t_number-varialble*
+ v:t_number Value of Number type. Read-only. See: |type()|
+ *v:t_string* *t_string-varialble*
+ v:t_string Value of String type. Read-only. See: |type()|
+
*v:termresponse* *termresponse-variable*
v:termresponse The escape sequence returned by the terminal for the
|t_RV|
termcap entry. It is set when Vim receives an escape sequence
***************
*** 7403,7422 ****
{only available when compiled with the |+float| feature}
*type()*
! type({expr}) The result is a Number, depending on the type of {expr}:
! Number: 0
! String: 1
! Funcref: 2
! List: 3
! Dictionary: 4
! Float: 5
! To avoid the magic numbers it should be used this way: >
:if type(myvar) == type(0)
:if type(myvar) == type("")
:if type(myvar) == type(function("tr"))
:if type(myvar) == type([])
:if type(myvar) == type({})
:if type(myvar) == type(0.0)
undofile({name}) *undofile()*
Return the name of the undo file that would be used for a file
--- 7546,7575 ----
{only available when compiled with the |+float| feature}
*type()*
! type({expr}) The result is a Number representing the type of {expr}.
! Instead of using the number directly, it is better to use the
! v:t_ variable that has the value:
! Number: 0 |v:t_number|
! String: 1 |v:t_string|
! Funcref: 2 |v:t_func|
! List: 3 |v:t_list|
! Dictionary: 4 |v:t_dict|
! Float: 5 |v:t_float|
! Boolean: 6 |v:t_bool| (v:false and v:true)
! None 7 |v:t_none| (v:null and v:none)
! Job 8 |v:t_job|
! Channel 9 |v:t_channel|
! For backward compatibility, this method can be used: >
:if type(myvar) == type(0)
:if type(myvar) == type("")
:if type(myvar) == type(function("tr"))
:if type(myvar) == type([])
:if type(myvar) == type({})
:if type(myvar) == type(0.0)
+ :if type(myvar) == type(v:false)
+ :if type(myvar) == type(v:none)
+ < To check if the v:t_ variables exist use this: >
+ :if exists('v:t_number')
undofile({name}) *undofile()*
Return the name of the undo file that would be used for a file
***************
*** 7510,7515 ****
--- 7663,7672 ----
plus one)
'x position of mark x (if the mark is not set, 0 is
returned)
+ v In Visual mode: the start of the Visual area (the
+ cursor is the end). When not in Visual mode
+ returns the cursor position. Differs from |'<| in
+ that it's updated right away.
Note that only marks in the current file can be used.
Examples: >
virtcol(".") with text "foo^Lbar", with cursor on the "^L",
returns 5
*** ../vim-7.4.2070/src/eval.c 2016-07-17 22:13:26.805095373 +0200
--- src/eval.c 2016-07-19 17:11:58.058396906 +0200
***************
*** 177,182 ****
--- 177,192 ----
{VV_NAME("none", VAR_SPECIAL), VV_RO},
{VV_NAME("vim_did_enter", VAR_NUMBER), VV_RO},
{VV_NAME("testing", VAR_NUMBER), 0},
+ {VV_NAME("t_number", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_string", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_func", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_list", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_dict", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_float", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_bool", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_none", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_job", VAR_NUMBER), VV_RO},
+ {VV_NAME("t_channel", VAR_NUMBER), VV_RO},
};
/* shorthand */
***************
*** 292,297 ****
--- 302,318 ----
set_vim_var_nr(VV_NONE, VVAL_NONE);
set_vim_var_nr(VV_NULL, VVAL_NULL);
+ set_vim_var_nr(VV_TYPE_NUMBER, VAR_TYPE_NUMBER);
+ set_vim_var_nr(VV_TYPE_STRING, VAR_TYPE_STRING);
+ set_vim_var_nr(VV_TYPE_FUNC, VAR_TYPE_FUNC);
+ set_vim_var_nr(VV_TYPE_LIST, VAR_TYPE_LIST);
+ set_vim_var_nr(VV_TYPE_DICT, VAR_TYPE_DICT);
+ set_vim_var_nr(VV_TYPE_FLOAT, VAR_TYPE_FLOAT);
+ set_vim_var_nr(VV_TYPE_BOOL, VAR_TYPE_BOOL);
+ set_vim_var_nr(VV_TYPE_NONE, VAR_TYPE_NONE);
+ set_vim_var_nr(VV_TYPE_JOB, VAR_TYPE_JOB);
+ set_vim_var_nr(VV_TYPE_CHANNEL, VAR_TYPE_CHANNEL);
+
set_reg_var(0); /* default for v:register is not 0 but '"' */
#ifdef EBCDIC
*** ../vim-7.4.2070/src/evalfunc.c 2016-07-17 22:33:48.668907497 +0200
--- src/evalfunc.c 2016-07-19 17:11:58.058396906 +0200
***************
*** 12136,12157 ****
switch (argvars[0].v_type)
{
! case VAR_NUMBER: n = 0; break;
! case VAR_STRING: n = 1; break;
case VAR_PARTIAL:
! case VAR_FUNC: n = 2; break;
! case VAR_LIST: n = 3; break;
! case VAR_DICT: n = 4; break;
! case VAR_FLOAT: n = 5; break;
case VAR_SPECIAL:
if (argvars[0].vval.v_number == VVAL_FALSE
|| argvars[0].vval.v_number == VVAL_TRUE)
! n = 6;
else
! n = 7;
break;
! case VAR_JOB: n = 8; break;
! case VAR_CHANNEL: n = 9; break;
case VAR_UNKNOWN:
EMSG2(_(e_intern2), "f_type(UNKNOWN)");
n = -1;
--- 12136,12157 ----
switch (argvars[0].v_type)
{
! case VAR_NUMBER: n = VAR_TYPE_NUMBER; break;
! case VAR_STRING: n = VAR_TYPE_STRING; break;
case VAR_PARTIAL:
! case VAR_FUNC: n = VAR_TYPE_FUNC; break;
! case VAR_LIST: n = VAR_TYPE_LIST; break;
! case VAR_DICT: n = VAR_TYPE_DICT; break;
! case VAR_FLOAT: n = VAR_TYPE_FLOAT; break;
case VAR_SPECIAL:
if (argvars[0].vval.v_number == VVAL_FALSE
|| argvars[0].vval.v_number == VVAL_TRUE)
! n = VAR_TYPE_BOOL;
else
! n = VAR_TYPE_NONE;
break;
! case VAR_JOB: n = VAR_TYPE_JOB; break;
! case VAR_CHANNEL: n = VAR_TYPE_CHANNEL; break;
case VAR_UNKNOWN:
EMSG2(_(e_intern2), "f_type(UNKNOWN)");
n = -1;
*** ../vim-7.4.2070/src/testdir/test_channel.vim 2016-07-15
21:24:41.197452549 +0200
--- src/testdir/test_channel.vim 2016-07-19 17:11:58.058396906 +0200
***************
*** 188,193 ****
--- 188,194 ----
" Test that we can open two channels.
func Ch_two_channels(port)
let handle = ch_open('localhost:' . a:port, s:chopt)
+ call assert_equal(v:t_channel, type(handle))
if ch_status(handle) == "fail"
call assert_false(1, "Can't open channel")
return
***************
*** 420,425 ****
--- 421,427 ----
endif
call ch_log('Test_raw_pipe()')
let job = job_start(s:python . " test_channel_pipe.py", {'mode': 'raw'})
+ call assert_equal(v:t_job, type(job))
call assert_equal("run", job_status(job))
try
" For a change use the job where a channel is expected.
*** ../vim-7.4.2070/src/testdir/test_viml.vim 2016-07-01 18:16:47.497936191
+0200
--- src/testdir/test_viml.vim 2016-07-19 17:11:58.058396906 +0200
***************
*** 950,955 ****
--- 950,969 ----
call assert_equal(6, type(v:true))
call assert_equal(7, type(v:none))
call assert_equal(7, type(v:null))
+ call assert_equal(8, v:t_job)
+ call assert_equal(9, v:t_channel)
+ call assert_equal(v:t_number, type(0))
+ call assert_equal(v:t_string, type(""))
+ call assert_equal(v:t_func, type(function("tr")))
+ call assert_equal(v:t_func, type(function("tr", [8])))
+ call assert_equal(v:t_list, type([]))
+ call assert_equal(v:t_dict, type({}))
+ call assert_equal(v:t_float, type(0.0))
+ call assert_equal(v:t_bool, type(v:false))
+ call assert_equal(v:t_bool, type(v:true))
+ call assert_equal(v:t_none, type(v:none))
+ call assert_equal(v:t_none, type(v:null))
+
call assert_equal(0, 0 + v:false)
call assert_equal(1, 0 + v:true)
*** ../vim-7.4.2070/src/vim.h 2016-07-19 17:01:20.341019259 +0200
--- src/vim.h 2016-07-19 17:11:58.062396864 +0200
***************
*** 1968,1974 ****
#define VV_NONE 68
#define VV_VIM_DID_ENTER 69
#define VV_TESTING 70
! #define VV_LEN 71 /* number of v: vars */
/* used for v_number in VAR_SPECIAL */
#define VVAL_FALSE 0L
--- 1968,1984 ----
#define VV_NONE 68
#define VV_VIM_DID_ENTER 69
#define VV_TESTING 70
! #define VV_TYPE_NUMBER 71
! #define VV_TYPE_STRING 72
! #define VV_TYPE_FUNC 73
! #define VV_TYPE_LIST 74
! #define VV_TYPE_DICT 75
! #define VV_TYPE_FLOAT 76
! #define VV_TYPE_BOOL 77
! #define VV_TYPE_NONE 78
! #define VV_TYPE_JOB 79
! #define VV_TYPE_CHANNEL 80
! #define VV_LEN 81 /* number of v: vars */
/* used for v_number in VAR_SPECIAL */
#define VVAL_FALSE 0L
***************
*** 1976,1981 ****
--- 1986,2003 ----
#define VVAL_NONE 2L
#define VVAL_NULL 3L
+ /* Type values for type(). */
+ #define VAR_TYPE_NUMBER 0
+ #define VAR_TYPE_STRING 1
+ #define VAR_TYPE_FUNC 2
+ #define VAR_TYPE_LIST 3
+ #define VAR_TYPE_DICT 4
+ #define VAR_TYPE_FLOAT 5
+ #define VAR_TYPE_BOOL 6
+ #define VAR_TYPE_NONE 7
+ #define VAR_TYPE_JOB 8
+ #define VAR_TYPE_CHANNEL 9
+
#ifdef FEAT_CLIPBOARD
/* VIM_ATOM_NAME is the older Vim-specific selection type for X11. Still
*** ../vim-7.4.2070/src/version.c 2016-07-19 17:01:20.345019217 +0200
--- src/version.c 2016-07-19 17:10:31.799291839 +0200
***************
*** 760,761 ****
--- 760,763 ----
{ /* Add new patch number below this line */
+ /**/
+ 2071,
/**/
--
ARTHUR: I did say sorry about the `old woman,' but from the behind you
looked--
DENNIS: What I object to is you automatically treat me like an inferior!
ARTHUR: Well, I AM king...
The Quest for the Holy Grail (Monty Python)
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.