forked from aniani/vim
patch 9.1.0394: Cannot get a list of positions describing a region
Problem: Cannot get a list of positions describing a region
(Justin M. Keyes, after v9.1.0120)
Solution: Add the getregionpos() function
(Shougo Matsushita)
fixes: #14609
closes: #14617
Co-authored-by: Justin M. Keyes <justinkz@gmail.com>
Signed-off-by: Shougo Matsushita <Shougo.Matsu@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
c5def6561d
commit
b4757e627e
@@ -1642,16 +1642,44 @@ func Test_visual_getregion()
|
||||
call feedkeys("\<ESC>vjl", 'tx')
|
||||
call assert_equal(['one', 'tw'],
|
||||
\ 'v'->getpos()->getregion(getpos('.')))
|
||||
call assert_equal([
|
||||
\ [[bufnr('%'), 1, 1, 0], [bufnr('%'), 1, 3, 0]],
|
||||
\ [[bufnr('%'), 2, 1, 0], [bufnr('%'), 2, 2, 0]]
|
||||
\ ],
|
||||
\ 'v'->getpos()->getregionpos(getpos('.')))
|
||||
call assert_equal(['one', 'tw'],
|
||||
\ '.'->getpos()->getregion(getpos('v')))
|
||||
call assert_equal([
|
||||
\ [[bufnr('%'), 1, 1, 0], [bufnr('%'), 1, 3, 0]],
|
||||
\ [[bufnr('%'), 2, 1, 0], [bufnr('%'), 2, 2, 0]]
|
||||
\ ],
|
||||
\ '.'->getpos()->getregionpos(getpos('v')))
|
||||
call assert_equal(['o'],
|
||||
\ 'v'->getpos()->getregion(getpos('v')))
|
||||
call assert_equal([
|
||||
\ [[bufnr('%'), 1, 1, 0], [bufnr('%'), 1, 1, 0]],
|
||||
\ ],
|
||||
\ 'v'->getpos()->getregionpos(getpos('v')))
|
||||
call assert_equal(['w'],
|
||||
\ '.'->getpos()->getregion(getpos('.'), {'type': 'v' }))
|
||||
call assert_equal([
|
||||
\ [[bufnr('%'), 2, 2, 0], [bufnr('%'), 2, 2, 0]],
|
||||
\ ],
|
||||
\ '.'->getpos()->getregionpos(getpos('.'), {'type': 'v' }))
|
||||
call assert_equal(['one', 'two'],
|
||||
\ getpos('.')->getregion(getpos('v'), {'type': 'V' }))
|
||||
call assert_equal([
|
||||
\ [[bufnr('%'), 1, 1, 0], [bufnr('%'), 1, 3, 0]],
|
||||
\ [[bufnr('%'), 2, 1, 0], [bufnr('%'), 2, 3, 0]],
|
||||
\ ],
|
||||
\ getpos('.')->getregionpos(getpos('v'), {'type': 'V' }))
|
||||
call assert_equal(['on', 'tw'],
|
||||
\ getpos('.')->getregion(getpos('v'), {'type': "\<C-v>" }))
|
||||
call assert_equal([
|
||||
\ [[bufnr('%'), 1, 1, 0], [bufnr('%'), 1, 2, 0]],
|
||||
\ [[bufnr('%'), 2, 1, 0], [bufnr('%'), 2, 2, 0]],
|
||||
\ ],
|
||||
\ getpos('.')->getregionpos(getpos('v'), {'type': "\<C-v>" }))
|
||||
|
||||
#" Line visual mode
|
||||
call cursor(1, 1)
|
||||
@@ -1746,9 +1774,13 @@ func Test_visual_getregion()
|
||||
call assert_fails("call getregion(1, 2)", 'E1211:')
|
||||
call assert_fails("call getregion(getpos('.'), {})", 'E1211:')
|
||||
call assert_fails(':echo "."->getpos()->getregion("$", [])', 'E1211:')
|
||||
call assert_fails("call getregionpos(1, 2)", 'E1211:')
|
||||
call assert_fails("call getregionpos(getpos('.'), {})", 'E1211:')
|
||||
call assert_fails(':echo "."->getpos()->getregionpos("$", [])', 'E1211:')
|
||||
|
||||
#" using invalid value for "type"
|
||||
call assert_fails("call getregion(getpos('.'), getpos('.'), {'type': '' })", 'E475:')
|
||||
call assert_fails("call getregionpos(getpos('.'), getpos('.'), {'type': '' })", 'E475:')
|
||||
|
||||
#" using a mark from another buffer to current buffer
|
||||
new
|
||||
@@ -1759,13 +1791,20 @@ func Test_visual_getregion()
|
||||
call assert_equal([g:buf, 10, 1, 0], getpos("'A"))
|
||||
call assert_equal([], getregion(getpos('.'), getpos("'A"), {'type': 'v' }))
|
||||
call assert_equal([], getregion(getpos("'A"), getpos('.'), {'type': 'v' }))
|
||||
call assert_equal([], getregionpos(getpos('.'), getpos("'A"), {'type': 'v' }))
|
||||
call assert_equal([], getregionpos(getpos("'A"), getpos('.'), {'type': 'v' }))
|
||||
|
||||
#" using two marks from another buffer
|
||||
wincmd p
|
||||
normal! GmB
|
||||
wincmd p
|
||||
call assert_equal([g:buf, 10, 1, 0], getpos("'B"))
|
||||
call assert_equal(['9'], getregion(getpos("'B"), getpos("'A"), {'type': 'v' }))
|
||||
call assert_equal(['9'],
|
||||
\ getregion(getpos("'B"), getpos("'A"), {'type': 'v' }))
|
||||
call assert_equal([
|
||||
\ [[g:buf, 10, 1, 0], [g:buf, 10, 1, 0]],
|
||||
\ ],
|
||||
\ getregionpos(getpos("'B"), getpos("'A"), {'type': 'v' }))
|
||||
|
||||
#" using two positions from another buffer
|
||||
for type in ['v', 'V', "\<C-V>"]
|
||||
@@ -1788,6 +1827,8 @@ func Test_visual_getregion()
|
||||
call assert_fails('call getregion([g:buf, 10, 0, 0], [g:buf, 1, 1, 0])', 'E964:')
|
||||
call assert_fails('call getregion([g:buf, 1, 1, 0], [g:buf, 10, 3, 0])', 'E964:')
|
||||
call assert_fails('call getregion([g:buf, 10, 3, 0], [g:buf, 1, 1, 0])', 'E964:')
|
||||
call assert_fails('call getregion([g:buf, 1, 0, 0], [g:buf, 1, 1, 0])', 'E964:')
|
||||
call assert_fails('call getregion([g:buf, 1, 1, 0], [g:buf, 1, 0, 0])', 'E964:')
|
||||
|
||||
#" using invalid buffer
|
||||
call assert_fails('call getregion([10000, 10, 1, 0], [10000, 10, 1, 0])', 'E681:')
|
||||
@@ -1819,6 +1860,12 @@ func Test_visual_getregion()
|
||||
call feedkeys("\<Esc>\<C-v>jj", 'xt')
|
||||
call assert_equal(['e', ' ', '5'],
|
||||
\ getregion(getpos('v'), getpos('.'), {'type': "\<C-v>" }))
|
||||
call assert_equal([
|
||||
\ [[bufnr('%'), 1, 5, 0], [bufnr('%'), 1, 13, 0]],
|
||||
\ [[bufnr('%'), 2, 1, 0], [bufnr('%'), 2, 22, 0]],
|
||||
\ [[bufnr('%'), 3, 1, 0], [bufnr('%'), 3, 5, 0]],
|
||||
\ ],
|
||||
\ getregionpos(getpos('v'), getpos('.'), {'type': 'v' }))
|
||||
call cursor(1, 1)
|
||||
call feedkeys("\<Esc>vj", 'xt')
|
||||
call assert_equal(['abcdefghijk«', "\U0001f1e6"],
|
||||
@@ -1831,7 +1878,7 @@ func Test_visual_getregion()
|
||||
call setpos("'c", [0, 2, 0, 0])
|
||||
call cursor(1, 1)
|
||||
call assert_equal(['ghijk', '🇨«🇩'],
|
||||
\ getregion(getpos("'a"), getpos("'b"), {'type': "\<c-v>" }))
|
||||
\ getregion(getpos("'a"), getpos("'b"), {'type': "\<C-v>" }))
|
||||
call assert_equal(['k«', '🇦«🇧«🇨'],
|
||||
\ getregion(getpos("'a"), getpos("'b"), {'type': 'v' }))
|
||||
call assert_equal(['k«'],
|
||||
@@ -1958,4 +2005,30 @@ func Test_getregion_invalid_buf()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_getregion_maxcol()
|
||||
new
|
||||
autocmd TextYankPost *
|
||||
\ : if v:event.operator ==? 'y'
|
||||
\ | call assert_equal([
|
||||
\ [[bufnr('%'), 1, 1, 0], [bufnr('%'), 1, 4, 0]],
|
||||
\ ],
|
||||
\ getregionpos(getpos("'["), getpos("']"),
|
||||
\ #{ mode: visualmode() }))
|
||||
\ | call assert_equal(['abcd'],
|
||||
\ getregion(getpos("'["), getpos("']"),
|
||||
\ #{ mode: visualmode() }))
|
||||
\ | call assert_equal([
|
||||
\ [[bufnr('%'), 1, 1, 0], [bufnr('%'), 1, 4, 0]],
|
||||
\ ],
|
||||
\ getregionpos(getpos("']"), getpos("'["),
|
||||
\ #{ mode: visualmode() }))
|
||||
\ | call assert_equal(['abcd'],
|
||||
\ getregion(getpos("']"), getpos("'["),
|
||||
\ #{ mode: visualmode() }))
|
||||
\ | endif
|
||||
call setline(1, ['abcd', 'efghij'])
|
||||
normal yy
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
||||
Reference in New Issue
Block a user