Compare commits

..

3 Commits
v3.2.4 ... v3.3

3 changed files with 49 additions and 40 deletions

View File

@@ -4,7 +4,7 @@
" 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.2 " Version: 3.3
" 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 and
" uses a small amount of code from it. " uses a small amount of code from it.
@@ -169,13 +169,8 @@ function! s:ToggleMapping() "{{{2
execute "inoremap <silent> <buffer> " . b:table_mode_separator_map . ' ' . execute "inoremap <silent> <buffer> " . b:table_mode_separator_map . ' ' .
\ b:table_mode_separator_map . "<Esc>:call tablemode#TableizeInsertMode()<CR>a" \ b:table_mode_separator_map . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
execute "inoremap <silent> <buffer> " . g:table_mode_corner .
\ g:table_mode_fillchar . " <Esc>:call tablemode#AddHeaderBorder('.')<CR>A"
else else
execute "iunmap <silent> <buffer> " . b:table_mode_separator_map execute "iunmap <silent> <buffer> " . b:table_mode_separator_map
execute "iunmap <silent> <buffer> " . g:table_mode_corner . g:table_mode_fillchar
endif endif
endfunction endfunction
@@ -184,10 +179,25 @@ function! s:SetActive(bool) "{{{2
call s:ToggleMapping() call s:ToggleMapping()
endfunction endfunction
function! s:DefaultHeaderBorder() "{{{2
if s:IsTableModeActive()
return g:table_mode_separator . g:table_mode_fillchar . g:table_mode_corner . g:table_mode_fillchar . g:table_mode_separator
else
return ''
endif
endfunction
function! s:GenerateHeaderBorder(line) "{{{2 function! s:GenerateHeaderBorder(line) "{{{2
let line = s:Line(a:line) let line = s:Line(a:line)
if tablemode#IsATableRow(line - s:RowGap()) if tablemode#IsATableRow(line - s:RowGap()) || tablemode#IsATableRow(line + s:RowGap())
let line_val = getline(line - s:RowGap()) let line_val = ''
if tablemode#IsATableRow(line + s:RowGap())
let line_val = getline(line + s:RowGap())
endif
if tablemode#IsATableRow(line - s:RowGap()) && s:Strlen(line_val) < s:Strlen(getline(line - s:RowGap()))
let line_val = getline(line - s:RowGap())
endif
if s:Strlen(line_val) <= 1 | return s:DefaultHeaderBorder() | endif
let border = substitute(line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)], g:table_mode_separator, g:table_mode_corner, 'g') let border = substitute(line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)], g:table_mode_separator, g:table_mode_corner, 'g')
let border = substitute(border, '[^' . g:table_mode_corner . ']', g:table_mode_fillchar, 'g') let border = substitute(border, '[^' . g:table_mode_corner . ']', g:table_mode_fillchar, 'g')
let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_separator . '\1' . g:table_mode_separator , '') let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_separator . '\1' . g:table_mode_separator , '')
@@ -203,6 +213,8 @@ function! s:GenerateHeaderBorder(line) "{{{2
else else
return border return border
endif endif
else
return s:DefaultHeaderBorder()
endif endif
endfunction endfunction
@@ -414,7 +426,7 @@ function! s:ParseRange(range, ...) "{{{2
else else
let [row2, col2] = [rcs2[0], default_col] let [row2, col2] = [rcs2[0], default_col]
endif endif
return [row1, col1, row2, col2] return [row1, col1, row2, col2]
endfunction endfunction
@@ -649,31 +661,26 @@ function! tablemode#TableRealign(line) "{{{2
let line = s:Line(a:line) let line = s:Line(a:line)
let [lnums, lines] = [[], []] let [lnums, lines] = [[], []]
let [bline, tline] = [0, line] let [tline, blines] = [line, []]
while tablemode#IsATableRow(tline) while tablemode#IsATableRow(tline) || getline(tline) =~# s:HeaderBorderExpr()
if getline(tline) =~# s:HeaderBorderExpr()
call insert(blines, tline)
let tline = tline - s:RowGap()
continue
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 = tline - s:RowGap()
endwhile endwhile
" If we reached header walking upwards
if getline(tline) =~# s:HeaderBorderExpr() && tablemode#IsATableRow(tline - s:RowGap())
let bline = tline
let tline = tline - s:RowGap()
" Insert the header line
call insert(lnums, tline)
call insert(lines, getline(tline))
endif
let tline = line + s:RowGap() let tline = line + s:RowGap()
" If we start at header while tablemode#IsATableRow(tline) || getline(tline) =~# s:HeaderBorderExpr()
if !bline && getline(tline) =~# s:HeaderBorderExpr() if getline(tline) =~# s:HeaderBorderExpr()
let bline = tline call insert(blines, tline)
let tline = tline + s:RowGap() let tline = tline + s:RowGap()
endif continue
endif
while tablemode#IsATableRow(tline)
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 = tline + s:RowGap()
@@ -686,9 +693,9 @@ function! tablemode#TableRealign(line) "{{{2
call setline(lnum, lines[index]) call setline(lnum, lines[index])
endfor endfor
if bline for bline in blines
call tablemode#AddHeaderBorder(bline) call tablemode#AddHeaderBorder(bline)
endif endfor
endfunction endfunction
function! tablemode#IsATableRow(line) "{{{2 function! tablemode#IsATableRow(line) "{{{2
@@ -764,7 +771,7 @@ function! tablemode#TableMotion(direction) "{{{2
if tablemode#IsATableRow('.') if tablemode#IsATableRow('.')
if a:direction ==# 'l' if a:direction ==# 'l'
if s:IsLastCell() if s:IsLastCell()
if !tablemode#IsATableHeader(line('.') + s:RowGap()) && !tablemode#IsATableRow(line('.') + s:RowGap()) if !tablemode#IsATableHeader(line('.') + s:RowGap()) && !tablemode#IsATableRow(line('.') + s:RowGap())
return return
endif endif
call tablemode#TableMotion('j') call tablemode#TableMotion('j')
@@ -905,6 +912,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
let cursor_pos = [line('.'), col('.')] let cursor_pos = [line('.'), col('.')]
if getline(fline) =~# 'tmf: ' if getline(fline) =~# 'tmf: '
" Comment line correctly " Comment line correctly
@@ -993,11 +1001,14 @@ function! tablemode#EvaluateFormulaLine() abort "{{{2
endif endif
if tablemode#IsATableRow('.') " We're inside the table if tablemode#IsATableRow('.') " We're inside the table
let line = s:GetLastRow('.') let line = s:GetLastRow('.')
if getline(line + s:RowGap()) =~# 'tmf: ' let fline = line + s:RowGap()
let exprs = split(matchstr(getline(line + s:RowGap()), matchexpr), ';') if getline(fline) =~# s:HeaderBorderExpr() | let fline += s:RowGap() | endif
if getline(fline) =~# 'tmf: '
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#IsATableRow(line) if tablemode#IsATableRow(line)
let exprs = split(matchstr(getline('.'), matchexpr), ';') let exprs = split(matchstr(getline('.'), matchexpr), ';')
endif endif

View File

@@ -1,7 +1,7 @@
*table-mode.txt* Table Mode for easy table formatting. v3.2 *table-mode.txt* Table Mode for easy table formatting. v3.3
=============================================================================== ===============================================================================
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 3.2 VERSION 3.3
Author: Dhruva Sagar <http://dhruvasagar.com/> Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/> License: MIT <http://opensource.org/licenses/MIT/>
@@ -323,11 +323,9 @@ MAPPINGS *table-mode-mappings*
would evaluate the formula line and update the table would evaluate the formula line and update the table
accordingly. This invokes the |TableEvalFormulaLine| command. accordingly. This invokes the |TableEvalFormulaLine| command.
+- Expands to a header border, the line immidiately above this || Expands to a header border, the line immidiately above or
will be considered as the table header. You can change this by below this will be considered as the table header. You can
changing |table-mode-corner| and |table-mode-fillchar| change this by changing |table-mode-separator| options.
options. This is an iabbrev so is triggered when you press
space or <CR> after typing the mapping.
=============================================================================== ===============================================================================
COMMANDS *table-mode-commands* COMMANDS *table-mode-commands*

View File

@@ -4,7 +4,7 @@
" 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.2 " Version: 3.3
" 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 and
" uses a small amount of code from it. " uses a small amount of code from it.