From 69128806978841deceb23ba2f906cf570a8023d1 Mon Sep 17 00:00:00 2001 From: ibbem Date: Tue, 31 Mar 2020 18:21:45 +0200 Subject: [PATCH] Include the header when deleting columns --- autoload/tablemode/spreadsheet.vim | 21 ++++++++++++++++++++- t/fixtures/complex_header.txt | 9 +++++++++ t/spreadsheet.vim | 26 +++++++++++++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 t/fixtures/complex_header.txt diff --git a/autoload/tablemode/spreadsheet.vim b/autoload/tablemode/spreadsheet.vim index cb772ed..4bebec3 100644 --- a/autoload/tablemode/spreadsheet.vim +++ b/autoload/tablemode/spreadsheet.vim @@ -31,12 +31,31 @@ function! tablemode#spreadsheet#GetFirstRow(line) "{{{2 endif endfunction +function! tablemode#spreadsheet#GetFirstRowOrHeader(line) "{{{2 + if tablemode#table#IsRow(a:line) + let line = tablemode#utils#line(a:line) + + while tablemode#table#IsTable(line - 1) + let line -= 1 + endwhile + if tablemode#table#IsBorder(line) | let line += 1 | endif + + return line + endif +endfunction + function! tablemode#spreadsheet#MoveToFirstRow() "{{{2 if tablemode#table#IsRow('.') call cursor(tablemode#spreadsheet#GetFirstRow('.'), col('.')) endif endfunction +function! tablemode#spreadsheet#MoveToFirstRowOrHeader() "{{{2 + if tablemode#table#IsRow('.') + call cursor(tablemode#spreadsheet#GetFirstRowOrHeader('.'), col('.')) + endif +endfunction + function! tablemode#spreadsheet#GetLastRow(line) "{{{2 if tablemode#table#IsRow(a:line) let line = tablemode#utils#line(a:line) @@ -142,7 +161,7 @@ function! tablemode#spreadsheet#DeleteColumn() "{{{2 if tablemode#table#IsRow('.') for i in range(v:count1) call tablemode#spreadsheet#MoveToStartOfCell() - call tablemode#spreadsheet#MoveToFirstRow() + call tablemode#spreadsheet#MoveToFirstRowOrHeader() silent! execute "normal! h\f" . g:table_mode_separator call tablemode#spreadsheet#MoveToLastRow() normal! d diff --git a/t/fixtures/complex_header.txt b/t/fixtures/complex_header.txt new file mode 100644 index 0000000..7ed440f --- /dev/null +++ b/t/fixtures/complex_header.txt @@ -0,0 +1,9 @@ +|----------+----------+----------+----------| +| counting | backward | alphabet | backward | +|:========:+:=========+=========:+==========| +| 1 | 9 | a | z | +| 2 | 8 | b | y | +| 3 | 7 | c | x | +| 4 | 6 | d | w | +| 5 | 5 | e | v | +|----------+----------+----------+----------| diff --git a/t/spreadsheet.vim b/t/spreadsheet.vim index f83194f..fbcd31f 100644 --- a/t/spreadsheet.vim +++ b/t/spreadsheet.vim @@ -102,7 +102,31 @@ describe 'spreadsheet' Expect tablemode#spreadsheet#ColumnCount('.') == 1 end end - + + describe 'Manipulation of tables with headers' + before + new + normal! ggdG + let g:table_mode_header_fillchar = '=' + read t/fixtures/complex_header.txt + call cursor(4, 7) + end + + it 'should successfully delete a row ' + Expect tablemode#spreadsheet#RowCount('.') == 5 + call tablemode#spreadsheet#DeleteRow() + Expect tablemode#spreadsheet#RowCount('.') == 4 + Expect getline(4) == '| 2 | 8 | b | y |' + end + + it 'should successfully delete a column' + Expect tablemode#spreadsheet#ColumnCount('.') == 4 + call tablemode#spreadsheet#DeleteColumn() + Expect tablemode#spreadsheet#ColumnCount('.') == 3 + Expect getline(4) == '| 9 | a | z |' + end + end + describe 'Repeated Manipulations' before new