mirror of
https://github.com/dhruvasagar/vim-table-mode.git
synced 2025-11-08 11:03:47 -05:00
Automatically setup table options
Readme mentions settings for Markdown and ReST, but we can apply them automatically for the current filetype. If a user is editing a no filetype scratch buffer, they'll still need to configure these options themselves. But this provides better defaults when editing a buffer of these filetypes. Adds get_buffer_or_global_option that could be used for any other buffer-local (filetype-specific) options.
This commit is contained in:
@@ -113,6 +113,7 @@ To get ReST-compatible tables use
|
|||||||
| Sherlock Holmes | 221B Baker Street | 0987654321 |
|
| Sherlock Holmes | 221B Baker Street | 0987654321 |
|
||||||
+-----------------+--------------------------+------------+
|
+-----------------+--------------------------+------------+
|
||||||
|
|
||||||
|
Markdown and ReST filetypes have automatically configured corners.
|
||||||
|
|
||||||
You can also define in a table header border how it's content should be
|
You can also define in a table header border how it's content should be
|
||||||
aligned, whether center, right or left by using a `:` character defined by
|
aligned, whether center, right or left by using a `:` character defined by
|
||||||
|
|||||||
@@ -67,7 +67,9 @@ function! tablemode#align#alignments(lnum, ncols) "{{{2
|
|||||||
let achr = g:table_mode_align_char
|
let achr = g:table_mode_align_char
|
||||||
let alignments = []
|
let alignments = []
|
||||||
if tablemode#table#IsBorder(a:lnum+1)
|
if tablemode#table#IsBorder(a:lnum+1)
|
||||||
let hcols = tablemode#align#Split(getline(a:lnum+1), '[' . g:table_mode_corner . g:table_mode_corner_corner . ']')
|
let corner = tablemode#utils#get_buffer_or_global_option('table_mode_corner')
|
||||||
|
let corner_corner = tablemode#utils#get_buffer_or_global_option('table_mode_corner_corner')
|
||||||
|
let hcols = tablemode#align#Split(getline(a:lnum+1), '[' . corner . corner_corner . ']')
|
||||||
for idx in range(len(hcols))
|
for idx in range(len(hcols))
|
||||||
" Right align if header
|
" Right align if header
|
||||||
call add(alignments, 'l')
|
call add(alignments, 'l')
|
||||||
|
|||||||
@@ -4,16 +4,21 @@ function! s:blank(string) "{{{2
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:BorderExpr() "{{{2
|
function! s:BorderExpr() "{{{2
|
||||||
|
let corner = tablemode#utils#get_buffer_or_global_option('table_mode_corner')
|
||||||
|
let corner_corner = tablemode#utils#get_buffer_or_global_option('table_mode_corner_corner')
|
||||||
|
let header_fillchar = tablemode#utils#get_buffer_or_global_option('table_mode_header_fillchar')
|
||||||
return tablemode#table#StartExpr() .
|
return tablemode#table#StartExpr() .
|
||||||
\ '[' . g:table_mode_corner . g:table_mode_corner_corner . ']' .
|
\ '[' . corner . corner_corner . ']' .
|
||||||
\ '[' . escape(g:table_mode_fillchar . g:table_mode_header_fillchar . g:table_mode_corner . g:table_mode_align_char, '-') . ']\+' .
|
\ '[' . escape(g:table_mode_fillchar . header_fillchar . corner . g:table_mode_align_char, '-') . ']\+' .
|
||||||
\ '[' . g:table_mode_corner . g:table_mode_corner_corner . ']' .
|
\ '[' . corner . corner_corner . ']' .
|
||||||
\ tablemode#table#EndExpr()
|
\ tablemode#table#EndExpr()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:DefaultBorder() "{{{2
|
function! s:DefaultBorder() "{{{2
|
||||||
if tablemode#IsActive()
|
if tablemode#IsActive()
|
||||||
return g:table_mode_corner_corner . g:table_mode_fillchar . g:table_mode_corner . g:table_mode_fillchar . g:table_mode_corner_corner
|
let corner = tablemode#utils#get_buffer_or_global_option('table_mode_corner')
|
||||||
|
let corner_corner = tablemode#utils#get_buffer_or_global_option('table_mode_corner_corner')
|
||||||
|
return corner_corner . g:table_mode_fillchar . corner . g:table_mode_fillchar . corner_corner
|
||||||
else
|
else
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
@@ -31,20 +36,24 @@ function! s:GenerateHeaderBorder(line) "{{{2
|
|||||||
endif
|
endif
|
||||||
if tablemode#utils#strlen(line_val) <= 1 | return s:DefaultBorder() | endif
|
if tablemode#utils#strlen(line_val) <= 1 | return s:DefaultBorder() | endif
|
||||||
|
|
||||||
|
let corner = tablemode#utils#get_buffer_or_global_option('table_mode_corner')
|
||||||
|
let corner_corner = tablemode#utils#get_buffer_or_global_option('table_mode_corner_corner')
|
||||||
|
let header_fillchar = tablemode#utils#get_buffer_or_global_option('table_mode_header_fillchar')
|
||||||
|
|
||||||
let tline = line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)]
|
let tline = line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)]
|
||||||
let fillchar = tablemode#table#IsHeader(line - 1) ? g:table_mode_header_fillchar : g:table_mode_fillchar
|
let fillchar = tablemode#table#IsHeader(line - 1) ? header_fillchar : g:table_mode_fillchar
|
||||||
|
|
||||||
let special_replacement = '___'
|
let special_replacement = '___'
|
||||||
let border = substitute(tline, g:table_mode_escaped_separator_regex, special_replacement, 'g')
|
let border = substitute(tline, g:table_mode_escaped_separator_regex, special_replacement, 'g')
|
||||||
let seperator_match_regex = special_replacement . '\zs\(.\{-}\)\ze' . special_replacement
|
let seperator_match_regex = special_replacement . '\zs\(.\{-}\)\ze' . special_replacement
|
||||||
let border = substitute(border, seperator_match_regex, '\=repeat(fillchar, tablemode#utils#StrDisplayWidth(submatch(0)))', 'g')
|
let border = substitute(border, seperator_match_regex, '\=repeat(fillchar, tablemode#utils#StrDisplayWidth(submatch(0)))', 'g')
|
||||||
let border = substitute(border, special_replacement, g:table_mode_separator, 'g')
|
let border = substitute(border, special_replacement, g:table_mode_separator, 'g')
|
||||||
let border = substitute(border, g:table_mode_separator, g:table_mode_corner, 'g')
|
let border = substitute(border, g:table_mode_separator, corner, 'g')
|
||||||
let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_corner_corner . '\1' . g:table_mode_corner_corner, '')
|
let border = substitute(border, '^' . corner . '\(.*\)' . corner . '$', corner_corner . '\1' . corner_corner, '')
|
||||||
|
|
||||||
" Incorporate header alignment chars
|
" Incorporate header alignment chars
|
||||||
if getline(line) =~# g:table_mode_align_char
|
if getline(line) =~# g:table_mode_align_char
|
||||||
let pat = '[' . g:table_mode_corner_corner . g:table_mode_corner . ']'
|
let pat = '[' . corner_corner . corner . ']'
|
||||||
let hcols = tablemode#align#Split(getline(line), pat)
|
let hcols = tablemode#align#Split(getline(line), pat)
|
||||||
let gcols = tablemode#align#Split(border, pat)
|
let gcols = tablemode#align#Split(border, pat)
|
||||||
|
|
||||||
|
|||||||
@@ -47,3 +47,7 @@ function! tablemode#utils#StrDisplayWidth(string) "{{{2
|
|||||||
return rv
|
return rv
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! tablemode#utils#get_buffer_or_global_option(table_option)
|
||||||
|
return get(b:, a:table_option, get(g:, a:table_option))
|
||||||
|
endf
|
||||||
|
|||||||
@@ -184,6 +184,9 @@ g:table_mode_verbose *table-mode-verbose*
|
|||||||
g:table_mode_corner *table-mode-corner*
|
g:table_mode_corner *table-mode-corner*
|
||||||
Use this option to define the table corner character: >
|
Use this option to define the table corner character: >
|
||||||
let g:table_mode_corner = '+'
|
let g:table_mode_corner = '+'
|
||||||
|
<
|
||||||
|
Or only in the current buffer: >
|
||||||
|
let b:table_mode_corner = '+'
|
||||||
<
|
<
|
||||||
g:table_mode_separator *table-mode-separator*
|
g:table_mode_separator *table-mode-separator*
|
||||||
Use this option to define the table column separator character: >
|
Use this option to define the table column separator character: >
|
||||||
@@ -232,6 +235,9 @@ g:table_mode_corner_corner *table-mode-corner-corner*
|
|||||||
Use this option to define the character to be used for the extreme
|
Use this option to define the character to be used for the extreme
|
||||||
corners of the table border. >
|
corners of the table border. >
|
||||||
let g:table_mode_corner_corner = '|'
|
let g:table_mode_corner_corner = '|'
|
||||||
|
<
|
||||||
|
Or only in the current buffer: >
|
||||||
|
let b:table_mode_corner_corner = '|'
|
||||||
<
|
<
|
||||||
g:table_mode_align_char *table-mode-align-char*
|
g:table_mode_align_char *table-mode-align-char*
|
||||||
Use this option to define the character to be used for defining
|
Use this option to define the character to be used for defining
|
||||||
|
|||||||
1
ftplugin/markdown.vim
Normal file
1
ftplugin/markdown.vim
Normal file
@@ -0,0 +1 @@
|
|||||||
|
let g:table_mode_corner = '|'
|
||||||
2
ftplugin/rst.vim
Normal file
2
ftplugin/rst.vim
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
let b:table_mode_corner_corner = '+'
|
||||||
|
let b:table_mode_header_fillchar = '='
|
||||||
Reference in New Issue
Block a user