diff --git a/autoload/tablemode/spreadsheet.vim b/autoload/tablemode/spreadsheet.vim index 5d7d87d..dfda45a 100644 --- a/autoload/tablemode/spreadsheet.vim +++ b/autoload/tablemode/spreadsheet.vim @@ -46,13 +46,13 @@ endfunction function! tablemode#spreadsheet#MoveToFirstRow() "{{{2 if tablemode#table#IsRow('.') - call cursor(tablemode#spreadsheet#GetFirstRow('.'), col('.')) + call tablemode#utils#MoveToLine(tablemode#spreadsheet#GetFirstRow('.')) endif endfunction function! tablemode#spreadsheet#MoveToFirstRowOrHeader() "{{{2 if tablemode#table#IsRow('.') - call cursor(tablemode#spreadsheet#GetFirstRowOrHeader('.'), col('.')) + call tablemode#utils#MoveToLine(tablemode#spreadsheet#GetFirstRowOrHeader('.')) endif endfunction @@ -71,7 +71,7 @@ endfunction function! tablemode#spreadsheet#MoveToLastRow() "{{{2 if tablemode#table#IsRow('.') - call cursor(tablemode#spreadsheet#GetLastRow('.'), col('.')) + call tablemode#utils#MoveToLine(tablemode#spreadsheet#GetLastRow('.')) endif endfunction diff --git a/autoload/tablemode/utils.vim b/autoload/tablemode/utils.vim index aa95a92..9dc32f2 100644 --- a/autoload/tablemode/utils.vim +++ b/autoload/tablemode/utils.vim @@ -51,3 +51,12 @@ endfunction function! tablemode#utils#get_buffer_or_global_option(table_option) "{{{2 return get(b:, a:table_option, get(g:, a:table_option)) endf + +function tablemode#utils#MoveToLine(line) "{{{2 + let offset = tablemode#utils#line(a:line) - line('.') + if offset > 0 + execute "normal! ".offset."j" + elseif offset < 0 + execute "normal! ".(-offset)."k" + endif +endfunction diff --git a/t/spreadsheet.vim b/t/spreadsheet.vim index c60073b..0350b00 100644 --- a/t/spreadsheet.vim +++ b/t/spreadsheet.vim @@ -193,4 +193,37 @@ describe 'spreadsheet' Expect getline('.') == '| 1 | 9 | | | a | z |' end end + + describe 'Unicode table separators' + before + new + normal! ggdG + read t/fixtures/table/sample_realign_unicode_after.txt + call cursor(2, 19) + end + + it 'should not prevent the deletion of rows' + Expect tablemode#spreadsheet#RowCount('.') == 4 + call tablemode#spreadsheet#DeleteRow() + Expect tablemode#spreadsheet#RowCount('.') == 3 + end + + it 'should not prevent the deletion of columns' + Expect tablemode#spreadsheet#ColumnCount('.') == 3 + call tablemode#spreadsheet#DeleteColumn() + Expect tablemode#spreadsheet#ColumnCount('.') == 2 + end + + it 'should not prevent the insertion of columns before the cursor' + Expect tablemode#spreadsheet#ColumnCount('.') == 3 + call tablemode#spreadsheet#InsertColumn(1) + Expect tablemode#spreadsheet#ColumnCount('.') == 4 + end + + it 'should not prevent the insertion of columns after the cursor' + Expect tablemode#spreadsheet#ColumnCount('.') == 3 + call tablemode#spreadsheet#InsertColumn(1) + Expect tablemode#spreadsheet#ColumnCount('.') == 4 + end + end end