mirror of
https://github.com/dhruvasagar/vim-table-mode.git
synced 2025-11-11 04:23:47 -05:00
Releasing version 3.3.1
* Borders are now disregarded, so add as many as you'd like. * Improved test coverage.
This commit is contained in:
11
CHANGELOG.md
11
CHANGELOG.md
@@ -1,4 +1,15 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
## Version 3.3.1
|
||||||
|
* Improved logic to ignore table borders (add as many as you'd like), the
|
||||||
|
first row is not treated special, it is row # 1. Keep that in mind while
|
||||||
|
defining Formulas
|
||||||
|
* Improved test coverage
|
||||||
|
|
||||||
|
## Version 3.3
|
||||||
|
* Dropped +- mapping to create table border instead now using ||
|
||||||
|
* You can now have a top table border (before header) as well as a bottom
|
||||||
|
table border.
|
||||||
|
|
||||||
## Version 3.2
|
## Version 3.2
|
||||||
* Added tests to test various use cases using <a
|
* Added tests to test various use cases using <a
|
||||||
href='https://github.com/kana/vim-vspec'>Vspec</a>..
|
href='https://github.com/kana/vim-vspec'>Vspec</a>..
|
||||||
|
|||||||
@@ -4,10 +4,9 @@
|
|||||||
" Author: Dhruva Sagar <http://dhruvasagar.com/>
|
" Author: Dhruva Sagar <http://dhruvasagar.com/>
|
||||||
" License: MIT (http://www.opensource.org/licenses/MIT)
|
" License: MIT (http://www.opensource.org/licenses/MIT)
|
||||||
" Website: http://github.com/dhruvasagar/vim-table-mode
|
" Website: http://github.com/dhruvasagar/vim-table-mode
|
||||||
" Version: 3.3
|
" Version: 3.3.0
|
||||||
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
|
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
|
||||||
" (https://gist.github.com/tpope/287147) plugin by Tim Pope and
|
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
|
||||||
" uses a small amount of code from it.
|
|
||||||
"
|
"
|
||||||
" Copyright Notice:
|
" Copyright Notice:
|
||||||
" Permission is hereby granted to use and distribute this code,
|
" Permission is hereby granted to use and distribute this code,
|
||||||
@@ -67,11 +66,11 @@ function! s:Sum(list) "{{{2
|
|||||||
let result = 0.0
|
let result = 0.0
|
||||||
for item in a:list
|
for item in a:list
|
||||||
if type(item) == type(1) || type(item) == type(1.0)
|
if type(item) == type(1) || type(item) == type(1.0)
|
||||||
let result = result + item
|
let result += item
|
||||||
elseif type(item) == type('')
|
elseif type(item) == type('')
|
||||||
let result = result + str2float(item)
|
let result += str2float(item)
|
||||||
elseif type(item) == type([])
|
elseif type(item) == type([])
|
||||||
let result = result + s:Sum(item)
|
let result += s:Sum(item)
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
return result
|
return result
|
||||||
@@ -257,9 +256,10 @@ function! s:GetFirstRow(line) "{{{2
|
|||||||
if tablemode#IsATableRow(a:line)
|
if tablemode#IsATableRow(a:line)
|
||||||
let line = s:Line(a:line)
|
let line = s:Line(a:line)
|
||||||
|
|
||||||
while tablemode#IsATableRow(line - s:RowGap())
|
while tablemode#IsATableRow(line - s:RowGap()) || tablemode#IsATableHeader(line - s:RowGap())
|
||||||
let line = line - s:RowGap()
|
let line -= s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
|
if tablemode#IsATableHeader(line) | let line += s:RowGap() | endif
|
||||||
|
|
||||||
return line
|
return line
|
||||||
endif
|
endif
|
||||||
@@ -275,9 +275,10 @@ function! s:GetLastRow(line) "{{{2
|
|||||||
if tablemode#IsATableRow(a:line)
|
if tablemode#IsATableRow(a:line)
|
||||||
let line = s:Line(a:line)
|
let line = s:Line(a:line)
|
||||||
|
|
||||||
while tablemode#IsATableRow(line+ s:RowGap())
|
while tablemode#IsATableRow(line + s:RowGap()) || tablemode#IsATableHeader(line + s:RowGap())
|
||||||
let line = line + s:RowGap()
|
let line += s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
|
if tablemode#IsATableHeader(line) | let line -= s:RowGap() | endif
|
||||||
|
|
||||||
return line
|
return line
|
||||||
endif
|
endif
|
||||||
@@ -289,6 +290,23 @@ function! s:MoveToLastRow() "{{{2
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:LineNr(row) "{{{2
|
||||||
|
if tablemode#IsATableRow('.')
|
||||||
|
let line = s:GetFirstRow('.')
|
||||||
|
let row_nr = 0
|
||||||
|
|
||||||
|
while tablemode#IsATableRow(line + s:RowGap()) || tablemode#IsATableHeader(line + s:RowGap())
|
||||||
|
if tablemode#IsATableRow(line)
|
||||||
|
let row_nr += 1
|
||||||
|
if row ==# row_nr | break | endif
|
||||||
|
endif
|
||||||
|
let line += s:RowGap()
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
return line
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! s:MoveToStartOfCell() "{{{2
|
function! s:MoveToStartOfCell() "{{{2
|
||||||
if getline('.')[col('.')-1] ==# g:table_mode_separator && !s:IsLastCell()
|
if getline('.')[col('.')-1] ==# g:table_mode_separator && !s:IsLastCell()
|
||||||
normal! 2l
|
normal! 2l
|
||||||
@@ -313,21 +331,28 @@ function! s:GetCells(line, ...) abort
|
|||||||
let [row, colm] = a:000
|
let [row, colm] = a:000
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let first_row = s:GetFirstRow(line)
|
||||||
if row == 0
|
if row == 0
|
||||||
let values = []
|
let values = []
|
||||||
let line = s:GetFirstRow(line)
|
let line = first_row
|
||||||
while tablemode#IsATableRow(line)
|
while tablemode#IsATableRow(line) || tablemode#IsATableHeader(line)
|
||||||
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
|
if tablemode#IsATableRow(line)
|
||||||
call add(values, s:Strip(get(split(row_line, g:table_mode_separator), colm>0?colm-1:colm, '')))
|
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
|
||||||
let line = line + s:RowGap()
|
call add(values, s:Strip(get(split(row_line, g:table_mode_separator), colm>0?colm-1:colm, '')))
|
||||||
|
endif
|
||||||
|
let line += s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
return values
|
return values
|
||||||
else
|
else
|
||||||
if row > 0
|
let row_nr = 0
|
||||||
let line = line + (row - tablemode#RowNr(line)) * s:RowGap()
|
let line = first_row
|
||||||
else
|
while tablemode#IsATableRow(line) || tablemode#IsATableHeader(line)
|
||||||
let line = line + row * s:RowGap()
|
if tablemode#IsATableRow(line)
|
||||||
endif
|
let row_nr += 1
|
||||||
|
if row ==# row_nr | break | endif
|
||||||
|
endif
|
||||||
|
let line += s:RowGap()
|
||||||
|
endwhile
|
||||||
|
|
||||||
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
|
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
|
||||||
if colm == 0
|
if colm == 0
|
||||||
@@ -638,7 +663,7 @@ function! tablemode#TableizeRange(...) range "{{{2
|
|||||||
while lnum < (a:firstline + (a:lastline - a:firstline + 1)*s:RowGap())
|
while lnum < (a:firstline + (a:lastline - a:firstline + 1)*s:RowGap())
|
||||||
call s:Tableizeline(lnum, a:1)
|
call s:Tableizeline(lnum, a:1)
|
||||||
undojoin
|
undojoin
|
||||||
let lnum = lnum + s:RowGap()
|
let lnum += s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
call tablemode#TableRealign(lnum - s:RowGap())
|
call tablemode#TableRealign(lnum - s:RowGap())
|
||||||
@@ -662,28 +687,28 @@ function! tablemode#TableRealign(line) "{{{2
|
|||||||
|
|
||||||
let [lnums, lines] = [[], []]
|
let [lnums, lines] = [[], []]
|
||||||
let [tline, blines] = [line, []]
|
let [tline, blines] = [line, []]
|
||||||
while tablemode#IsATableRow(tline) || getline(tline) =~# s:HeaderBorderExpr()
|
while tablemode#IsATableRow(tline) || tablemode#IsATableHeader(tline)
|
||||||
if getline(tline) =~# s:HeaderBorderExpr()
|
if tablemode#IsATableHeader(tline)
|
||||||
call insert(blines, tline)
|
call insert(blines, tline)
|
||||||
let tline = tline - s:RowGap()
|
let tline -= s:RowGap()
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
call insert(lnums, tline)
|
call insert(lnums, tline)
|
||||||
call insert(lines, getline(tline))
|
call insert(lines, getline(tline))
|
||||||
let tline = tline - s:RowGap()
|
let tline -= s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
let tline = line + s:RowGap()
|
let tline = line + s:RowGap()
|
||||||
|
|
||||||
while tablemode#IsATableRow(tline) || getline(tline) =~# s:HeaderBorderExpr()
|
while tablemode#IsATableRow(tline) || tablemode#IsATableHeader(tline)
|
||||||
if getline(tline) =~# s:HeaderBorderExpr()
|
if tablemode#IsATableHeader(tline)
|
||||||
call insert(blines, tline)
|
call insert(blines, tline)
|
||||||
let tline = tline + s:RowGap()
|
let tline += s:RowGap()
|
||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
call add(lnums, tline)
|
call add(lnums, tline)
|
||||||
call add(lines, getline(tline))
|
call add(lines, getline(tline))
|
||||||
let tline = tline + s:RowGap()
|
let tline += s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
let lines = s:Align(lines)
|
let lines = s:Align(lines)
|
||||||
@@ -708,29 +733,22 @@ function! tablemode#IsATableHeader(line) "{{{2
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#LineNr(row) "{{{2
|
function! tablemode#LineNr(row) "{{{2
|
||||||
if tablemode#IsATableRow('.')
|
return s:LineNr(row)
|
||||||
let line = s:Line('.')
|
|
||||||
let row = tablemode#RowNr('.')
|
|
||||||
if a:row != row
|
|
||||||
let line += a:row - row
|
|
||||||
endif
|
|
||||||
return line
|
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tablemode#RowCount(line) "{{{2
|
function! tablemode#RowCount(line) "{{{2
|
||||||
let line = s:Line(a:line)
|
let line = s:Line(a:line)
|
||||||
|
|
||||||
let [tline, totalRowCount] = [line, 0]
|
let [tline, totalRowCount] = [line, 0]
|
||||||
while tablemode#IsATableRow(tline)
|
while tablemode#IsATableRow(tline) || tablemode#IsATableHeader(tline)
|
||||||
let totalRowCount += 1
|
if tablemode#IsATableRow(tline) | let totalRowCount += 1 | endif
|
||||||
let tline = tline - s:RowGap()
|
let tline -= s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
let tline = line + s:RowGap()
|
let tline = line + s:RowGap()
|
||||||
while tablemode#IsATableRow(tline)
|
while tablemode#IsATableRow(tline) || tablemode#IsATableHeader(tline)
|
||||||
let totalRowCount += 1
|
if tablemode#IsATableRow(tline) | let totalRowCount += 1 | endif
|
||||||
let tline = tline + s:RowGap()
|
let tline += s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
return totalRowCount
|
return totalRowCount
|
||||||
@@ -740,9 +758,9 @@ function! tablemode#RowNr(line) "{{{2
|
|||||||
let line = s:Line(a:line)
|
let line = s:Line(a:line)
|
||||||
|
|
||||||
let rowNr = 0
|
let rowNr = 0
|
||||||
while tablemode#IsATableRow(line)
|
while tablemode#IsATableRow(line) || tablemode#IsATableHeader(line)
|
||||||
let rowNr += 1
|
if tablemode#IsATableRow(line) | let rowNr += 1 | endif
|
||||||
let line = line - s:RowGap()
|
let line -= s:RowGap()
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
return rowNr
|
return rowNr
|
||||||
@@ -912,7 +930,7 @@ function! tablemode#AddFormula() "{{{2
|
|||||||
if fr !=# ''
|
if fr !=# ''
|
||||||
let fr = '$' . row . ',' . colm . '=' . fr
|
let fr = '$' . row . ',' . colm . '=' . fr
|
||||||
let fline = tablemode#GetLastRow('.') + s:RowGap()
|
let fline = tablemode#GetLastRow('.') + s:RowGap()
|
||||||
if getline(fline) =~# s:HeaderBorderExpr() | let fline += s:RowGap() | endif
|
if tablemode#IsATableHeader(fline) | let fline += s:RowGap() | endif
|
||||||
let cursor_pos = [line('.'), col('.')]
|
let cursor_pos = [line('.'), col('.')]
|
||||||
if getline(fline) =~# 'tmf: '
|
if getline(fline) =~# 'tmf: '
|
||||||
" Comment line correctly
|
" Comment line correctly
|
||||||
@@ -1002,13 +1020,13 @@ function! tablemode#EvaluateFormulaLine() abort "{{{2
|
|||||||
if tablemode#IsATableRow('.') " We're inside the table
|
if tablemode#IsATableRow('.') " We're inside the table
|
||||||
let line = s:GetLastRow('.')
|
let line = s:GetLastRow('.')
|
||||||
let fline = line + s:RowGap()
|
let fline = line + s:RowGap()
|
||||||
if getline(fline) =~# s:HeaderBorderExpr() | let fline += s:RowGap() | endif
|
if tablemode#IsATableHeader(fline) | let fline += s:RowGap() | endif
|
||||||
if getline(fline) =~# 'tmf: '
|
if getline(fline) =~# 'tmf: '
|
||||||
let exprs = split(matchstr(getline(fline), matchexpr), ';')
|
let exprs = split(matchstr(getline(fline), matchexpr), ';')
|
||||||
endif
|
endif
|
||||||
elseif getline('.') =~# 'tmf: ' " We're on the formula line
|
elseif getline('.') =~# 'tmf: ' " We're on the formula line
|
||||||
let line = line('.') - s:RowGap()
|
let line = line('.') - s:RowGap()
|
||||||
if getline(line) =~# s:HeaderBorderExpr() | let line -= s:RowGap() | endif
|
if tablemode#IsATableHeader(line) | let line -= s:RowGap() | endif
|
||||||
if tablemode#IsATableRow(line)
|
if tablemode#IsATableRow(line)
|
||||||
let exprs = split(matchstr(getline('.'), matchexpr), ';')
|
let exprs = split(matchstr(getline('.'), matchexpr), ';')
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -4,10 +4,9 @@
|
|||||||
" Author: Dhruva Sagar <http://dhruvasagar.com/>
|
" Author: Dhruva Sagar <http://dhruvasagar.com/>
|
||||||
" License: MIT (http://www.opensource.org/licenses/MIT)
|
" License: MIT (http://www.opensource.org/licenses/MIT)
|
||||||
" Website: http://github.com/dhruvasagar/vim-table-mode
|
" Website: http://github.com/dhruvasagar/vim-table-mode
|
||||||
" Version: 3.3
|
" Version: 3.3.1
|
||||||
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
|
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
|
||||||
" (https://gist.github.com/tpope/287147) plugin by Tim Pope and
|
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
|
||||||
" uses a small amount of code from it.
|
|
||||||
"
|
"
|
||||||
" Copyright Notice:
|
" Copyright Notice:
|
||||||
" Permission is hereby granted to use and distribute this code,
|
" Permission is hereby granted to use and distribute this code,
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
" vim: fdm=indent
|
||||||
let g:table_mode_corner = '+'
|
let g:table_mode_corner = '+'
|
||||||
let g:table_mode_separator = '|'
|
let g:table_mode_separator = '|'
|
||||||
let g:table_mode_fillchar = '-'
|
let g:table_mode_fillchar = '-'
|
||||||
@@ -50,7 +51,7 @@ describe 'tablemode'
|
|||||||
|
|
||||||
describe 'API'
|
describe 'API'
|
||||||
before
|
before
|
||||||
normal! ggdG
|
new
|
||||||
call tablemode#TableModeEnable()
|
call tablemode#TableModeEnable()
|
||||||
normal! i
|
normal! i
|
||||||
|test11|test12|
|
|test11|test12|
|
||||||
@@ -129,7 +130,7 @@ describe 'tablemode'
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'Tableize'
|
describe 'Tableize'
|
||||||
before
|
before
|
||||||
new
|
new
|
||||||
normal! i
|
normal! i
|
||||||
@@ -149,14 +150,99 @@ describe 'tablemode'
|
|||||||
Expect tablemode#IsATableRow(2) to_be_true
|
Expect tablemode#IsATableRow(2) to_be_true
|
||||||
Expect tablemode#RowCount(2) == 2
|
Expect tablemode#RowCount(2) == 2
|
||||||
Expect tablemode#ColumnCount(2) == 2
|
Expect tablemode#ColumnCount(2) == 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'Motions'
|
||||||
|
describe 'left or right'
|
||||||
|
before
|
||||||
|
new
|
||||||
|
call tablemode#TableModeEnable()
|
||||||
|
normal! i|test11|test12|
|
||||||
|
|test21|test22|
|
||||||
|
call cursor(1, 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should move left when not on first column'
|
||||||
|
call cursor(1, 12)
|
||||||
|
Expect tablemode#ColumnNr('.') == 2
|
||||||
|
call tablemode#TableMotion('h')
|
||||||
|
Expect tablemode#ColumnNr('.') == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should move to the previous row last column if it exists when on first column'
|
||||||
|
call cursor(2, 3)
|
||||||
|
Expect tablemode#RowNr('.') == 2
|
||||||
|
Expect tablemode#ColumnNr('.') == 1
|
||||||
|
call tablemode#TableMotion('h')
|
||||||
|
Expect tablemode#RowNr('.') == 1
|
||||||
|
Expect tablemode#ColumnNr('.') == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should move right when not on last column'
|
||||||
|
Expect tablemode#ColumnNr('.') == 1
|
||||||
|
call tablemode#TableMotion('l')
|
||||||
|
Expect tablemode#ColumnNr('.') == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should move to the next row first column if it exists when on last column'
|
||||||
|
call cursor(1, 12)
|
||||||
|
Expect tablemode#RowNr('.') == 1
|
||||||
|
Expect tablemode#ColumnNr('.') == 2
|
||||||
|
call tablemode#TableMotion('l')
|
||||||
|
Expect tablemode#RowNr('.') == 2
|
||||||
|
Expect tablemode#ColumnNr('.') == 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'up or down'
|
||||||
|
before
|
||||||
|
new
|
||||||
|
call tablemode#TableModeEnable()
|
||||||
|
normal! i|test11|test12|
|
||||||
|
|test21|test22|
|
||||||
|
call cursor(1, 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should move a row up unless on first row'
|
||||||
|
call cursor(2, 3)
|
||||||
|
Expect tablemode#RowNr('.') == 2
|
||||||
|
call tablemode#TableMotion('k')
|
||||||
|
Expect tablemode#RowNr('.') == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should remain on first row when trying to move up'
|
||||||
|
Expect tablemode#RowNr('.') == 1
|
||||||
|
call tablemode#TableMotion('k')
|
||||||
|
Expect tablemode#RowNr('.') == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should move a row down unless on last row'
|
||||||
|
Expect tablemode#RowNr('.') == 1
|
||||||
|
call tablemode#TableMotion('j')
|
||||||
|
Expect tablemode#RowNr('.') == 2
|
||||||
|
end
|
||||||
|
|
||||||
it 'should remain on last row when trying to move down'
|
it 'should remain on last row when trying to move down'
|
||||||
Expect tablemode#RowNr('.') == 1
|
Expect tablemode#RowNr('.') == 1
|
||||||
call tablemode#TableMotion('k')
|
call tablemode#TableMotion('k')
|
||||||
end
|
Expect tablemode#RowNr('.') == 1
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'Manipulations'
|
||||||
|
before
|
||||||
|
new
|
||||||
|
call tablemode#TableModeEnable()
|
||||||
|
normal! i|test11|test12|
|
||||||
|
|test21|test22|
|
||||||
|
call cursor(1, 3)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should delete a row successfully'
|
||||||
|
Expect tablemode#RowCount('.') == 2
|
||||||
|
call tablemode#DeleteRow()
|
||||||
Expect tablemode#RowCount('.') == 1
|
Expect tablemode#RowCount('.') == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user