mirror of
1
0
Fork 0
ultimate-vim/sources_non_forked/tlib/autoload/tlib/selection.vim

41 lines
1.3 KiB
VimL

" @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
" @Website: http://www.vim.org/account/profile.php?user_id=4037
" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Last Change: 2017-09-28
" @Revision: 4
" :display: tlib#selection#GetSelection(mode, ?mbeg="'<", ?mend="'>", ?opmode='selection')
" mode can be one of: selection, lines, block
function! tlib#selection#GetSelection(mode, ...) range "{{{3
if a:0 >= 2
let mbeg = a:1
let mend = a:2
else
let mbeg = "'<"
let mend = "'>"
endif
let opmode = a:0 >= 3 ? a:3 : 'selection'
let l0 = line(mbeg)
let l1 = line(mend)
let text = getline(l0, l1)
let c0 = col(mbeg)
let c1 = col(mend)
" TLogVAR mbeg, mend, opmode, l0, l1, c0, c1
" TLogVAR text[-1]
" TLogVAR len(text[-1])
if opmode == 'block'
let clen = c1 - c0
call map(text, 'tlib#string#Strcharpart(v:val, c0, clen)')
elseif opmode == 'selection'
if c1 > 1
let text[-1] = tlib#string#Strcharpart(text[-1], 0, c1 - (a:mode == 'o' || c1 > len(text[-1]) ? 0 : 1))
endif
if c0 > 1
let text[0] = tlib#string#Strcharpart(text[0], c0 - 1)
endif
endif
return text
endf