Compare commits

...

36 Commits

Author SHA1 Message Date
Dhruva Sagar
6412352b54 Merge pull request #169 from dhruvasagar/dependabot/bundler/rake-12.3.3
Bump rake from 10.1.0 to 12.3.3
2020-03-02 00:08:27 -05:00
dependabot[bot]
a5909a01b9 Bump rake from 10.1.0 to 12.3.3
Bumps [rake](https://github.com/ruby/rake) from 10.1.0 to 12.3.3.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/rake-10.1.0...v12.3.3)

Signed-off-by: dependabot[bot] <support@github.com>
2020-02-29 08:29:09 +00:00
Dhruva Sagar
0af25d72eb Update dependencies, use ruby 2.5.3 for testing 2019-12-17 14:29:38 -05:00
Dhruva Sagar
06adb63764 Trying to fix travis 2019-12-17 14:22:58 -05:00
Dhruva Sagar
aedcd8e077 Fix #161, Add documentation about :TableModeRealign and mapping to README 2019-12-17 14:08:09 -05:00
Dhruva Sagar
5ac34a22db Fix #156, improved cursor column detection 2019-12-10 16:13:23 -05:00
Dhruva Sagar
8677840826 Rename ftplugins to avoid clobbering with other ftplugins 2019-12-10 16:13:23 -05:00
Dhruva Sagar
5ec330d114 Merge pull request #158 from I-am-the-doctor/fix-delete
Fix repeated deletions of rows and columns
2019-11-16 13:11:40 -05:00
Benjamin Moosherr
d670f5e0f8 Tests for issue #157 2019-11-16 17:17:29 +01:00
Benjamin Moosherr
9781613f66 Fix issue #157
Because tablemode#spreadsheet#DeleteColumn() and
tablemode#spreadsheet#DeleteRow() take v:count1 into account, the
automatic repetition of vim has to be suppressed.
2019-11-16 17:17:07 +01:00
Dhruva Sagar
126897a6fb Merge pull request #154 from opencollective/opencollective
Activating Open Collective
2019-09-28 15:03:33 -04:00
Jess
49c41900f5 Added financial contributors to the README 2019-09-28 11:55:35 -07:00
Dhruva Sagar
934778947e Create FUNDING.yml 2019-09-05 13:28:06 -04:00
Dhruva Sagar
865563f785 Allow range for TableSort. Fix #133 2019-04-25 23:14:05 +05:30
Dhruva Sagar
a40ef26c5c Merge pull request #146 from elig0n/patch-1
Fix github repo links in documentation
2019-03-22 13:52:06 +05:30
Eliran Gonen
b6210c9392 Fix github repo links
From 'table-mode' to 'vim-table-mode'
2019-03-22 10:21:19 +02:00
Dhruva Sagar
fdfcb85fb3 Add fold marker for improved folding 2019-02-20 09:43:50 +05:30
Dhruva Sagar
229916cd00 Fix markdown ftplugin 2019-02-20 09:36:23 +05:30
Dhruva Sagar
ad9229c937 Fix #141. Allow negative row reference in formula expressions 2019-01-21 15:20:10 +05:30
Dhruva Sagar
cdf33f680f Merge pull request #137 from idbrii/auto-corner
Automatically setup table options
2019-01-02 17:11:07 +05:30
David Briscoe
5c3c30a9cc 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.
2018-12-19 12:50:47 -08:00
Dhruva Sagar
130e835ff7 Merge pull request #135 from idbrii/safer-borders
Only insert borders on blank/whitespace-only lines
2018-10-21 06:02:50 +05:30
Dhruva Sagar
a1be216c94 Update tablemode.vim 2018-10-21 05:53:36 +05:30
David Briscoe
cf11264525 Only insert borders on blank/whitespace-only lines
Fixes #45.

Require our end expr to insert a border. This prevents borders from
clobbering other text and makes it possible to use visual block to insert
a new column.
2018-05-19 06:15:36 -07:00
Dhruva Sagar
5483e163bd Merge pull request #134 from jeetsukumaran/master
Disable/restore foldmethod during realignment
2018-05-16 19:50:04 +05:30
Jeet Sukumaran
09f4336954 Disable/restore foldmethod during realignment 2018-05-15 18:07:30 -04:00
Dhruva Sagar
e646bee5c4 Fix #132
Disabling InsertLeave autocmd for realign since it is getting triggered
multiple times during realignment and causes issues while creation of
tables
2018-03-22 09:40:50 +05:30
Dhruva Sagar
d0a6405189 Fix #131. Cleanly disable auto align when table mode is disabled. 2018-03-17 08:06:45 +05:30
Dhruva Sagar
c35fd9b104 Remove CursorHoldI for auto-align. Fix #128
Since auto-align in insert mode causes snags, removing it and instead
doing it on InsertLeave instead
2018-02-13 08:34:35 +05:30
Dhruva Sagar
bdd96b05cb AutoAlign only if buffer is already modified. Fix #126 2018-01-22 16:59:50 +05:30
Dhruva Sagar
b25fe6f9f0 Fix #124
Underscores should not create an issue
2018-01-04 12:18:22 +05:30
Dhruva Sagar
322503e814 Add support for escaping the separator #118
Initial support. Alignment and border creation is fixed and is
consistent in considering the escaped table separator as part of the
column.

TODO :
* Fix syntax to reflect the above.
* Fix cell definition, motion & formula engine to incorporate this.
2017-12-28 01:04:45 +05:30
Dhruva Sagar
40fe641708 Merge pull request #123 from vbwx/master
Mappings for tableize commands
2017-10-26 07:12:22 +05:30
Bernhard Waldbrunner
1d9d512ed1 Allow dynamic prefix for all mappings 2017-10-25 21:19:32 +02:00
Dhruva Sagar
9f383b92be Play nice with vimwiki. Fix #110
In order to use vim table mode over vimwiki native table formatting
support you need to add the following vimwiki settings to your vimrc :

```vim
let g:vimwiki_table_mappings=0
let g:vimwiki_table_auto_fmt=0
```
2017-10-09 20:44:50 +05:30
Dhruva Sagar
a646b4033b Fix #122 : Disable auto align properly after disabling Table Mode 2017-07-31 06:06:22 +05:30
18 changed files with 191 additions and 47 deletions

12
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: vim-table-mode
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@@ -1,4 +1,4 @@
language: ruby
rvm:
- 2.3.0
- 2.5.3
script: rake ci

View File

@@ -1,5 +1,5 @@
source 'https://rubygems.org'
ruby '2.3.0'
ruby '2.5.3'
gem 'rake'
gem 'vim-flavor', '~> 1.1'

View File

@@ -4,7 +4,7 @@ GEM
blankslate (2.1.2.4)
parslet (1.5.0)
blankslate (~> 2.0)
rake (10.1.0)
rake (12.3.3)
thor (0.18.1)
vim-flavor (1.1.3)
parslet (~> 1.0)
@@ -16,3 +16,9 @@ PLATFORMS
DEPENDENCIES
rake
vim-flavor (~> 1.1)
RUBY VERSION
ruby 2.5.3p105
BUNDLED WITH
2.0.1

View File

@@ -113,11 +113,17 @@ To get ReST-compatible tables use
| 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
aligned, whether center, right or left by using a `:` character defined by
`g:table_mode_align_char` option.
If you manipulate the table when table mode is disabled or copy paste a table
from clipboard from outside and it ends up being misaligned, you can realign
it using `:TableModeRealign` or using the default mapping
<kbd>\<Leader\>tr</kbd> defined by `g:table_mode_relign_map` option.
### Formatting existing content into a table
Table Mode wouldn't justify it's name if it didn't allow formatting
@@ -266,3 +272,33 @@ named <a href="https://gist.github.com/tpope/287147">cucumbertables.vim</a>.
Also a shout out to godlygeek who developed the incredible <a
href="http://github.com/godlygeek/tabular">Tabular</a> plugin.
## Contributors
### Code Contributors
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
<a href="https://github.com/dhruvasagar/vim-table-mode/graphs/contributors"><img src="https://opencollective.com/vim-table-mode/contributors.svg?width=890&button=false" /></a>
### Financial Contributors
Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/vim-table-mode/contribute)]
#### Individuals
<a href="https://opencollective.com/vim-table-mode"><img src="https://opencollective.com/vim-table-mode/individuals.svg?width=890"></a>
#### Organizations
Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/vim-table-mode/contribute)]
<a href="https://opencollective.com/vim-table-mode/organization/0/website"><img src="https://opencollective.com/vim-table-mode/organization/0/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/1/website"><img src="https://opencollective.com/vim-table-mode/organization/1/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/2/website"><img src="https://opencollective.com/vim-table-mode/organization/2/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/3/website"><img src="https://opencollective.com/vim-table-mode/organization/3/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/4/website"><img src="https://opencollective.com/vim-table-mode/organization/4/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/5/website"><img src="https://opencollective.com/vim-table-mode/organization/5/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/6/website"><img src="https://opencollective.com/vim-table-mode/organization/6/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/7/website"><img src="https://opencollective.com/vim-table-mode/organization/7/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/8/website"><img src="https://opencollective.com/vim-table-mode/organization/8/avatar.svg"></a>
<a href="https://opencollective.com/vim-table-mode/organization/9/website"><img src="https://opencollective.com/vim-table-mode/organization/9/avatar.svg"></a>

View File

@@ -98,10 +98,11 @@ function! s:ToggleAutoAlign() "{{{2
augroup TableModeAutoAlign
au!
autocmd CursorHold <buffer> nested silent! call tablemode#table#Realign('.')
autocmd CursorHold <buffer> nested silent! if &modified | call tablemode#table#Realign('.') | endif
" autocmd InsertLeave <buffer> nested silent! if &modified | call tablemode#table#Realign('.') | endif
augroup END
else
silent! augroup! TableModeAutoAlign
autocmd! TableModeAutoAlign
endif
endfunction
@@ -168,15 +169,17 @@ function! tablemode#IsActive() "{{{2
endfunction
function! tablemode#TableizeInsertMode() "{{{2
if tablemode#IsActive() && getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator . g:table_mode_separator)
call tablemode#table#AddBorder('.')
normal! A
elseif tablemode#IsActive() && getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator)
let column = tablemode#utils#strlen(substitute(getline('.')[0:col('.')], '[^' . g:table_mode_separator . ']', '', 'g'))
let position = tablemode#utils#strlen(matchstr(getline('.')[0:col('.')], '.*' . g:table_mode_separator . '\s*\zs.*'))
call tablemode#table#Realign('.')
normal! 0
call search(repeat('[^' . g:table_mode_separator . ']*' . g:table_mode_separator, column) . '\s\{-\}' . repeat('.', position), 'ce', line('.'))
if tablemode#IsActive()
if getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator . g:table_mode_separator . tablemode#table#EndExpr())
call tablemode#table#AddBorder('.')
normal! A
elseif getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator)
let column = tablemode#utils#strlen(substitute(getline('.')[0:col('.')], '[^' . g:table_mode_separator . ']', '', 'g'))
let position = tablemode#utils#strlen(matchstr(getline('.')[0:col('.')], '.*' . g:table_mode_separator . '\s*\zs.*'))
call tablemode#table#Realign('.')
normal! 0
call search(repeat('[^' . g:table_mode_separator . ']*' . g:table_mode_separator, column) . '\s\{-\}' . repeat('.', position), 'ce', line('.'))
endif
endif
endfunction

View File

@@ -67,7 +67,9 @@ function! tablemode#align#alignments(lnum, ncols) "{{{2
let achr = g:table_mode_align_char
let alignments = []
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))
" Right align if header
call add(alignments, 'l')
@@ -84,7 +86,7 @@ endfunction
function! tablemode#align#Align(lines) "{{{2
if empty(a:lines) | return [] | endif
let lines = map(a:lines, 'map(v:val, "v:key =~# \"text\" ? tablemode#align#Split(v:val, g:table_mode_separator) : v:val")')
let lines = map(a:lines, 'map(v:val, "v:key =~# \"text\" ? tablemode#align#Split(v:val, g:table_mode_escaped_separator_regex) : v:val")')
for line in lines
let stext = line.text

View File

@@ -180,10 +180,19 @@ function! tablemode#spreadsheet#Average(range, ...) abort "{{{2
return s:Average(call('tablemode#spreadsheet#cell#GetCellRange', args))
endfunction
function! tablemode#spreadsheet#Sort(bang, ...) "{{{2
function! tablemode#spreadsheet#Sort(bang, ...) range "{{{2
if exists('*getcurpos')
let col = getcurpos()[4] " curswant
else
let col = col('.')
endif
let opts = a:0 ? a:1 : ''
let bang = a:bang ? '!' : ''
let [firstRow, lastRow] = [tablemode#spreadsheet#GetFirstRow('.'), tablemode#spreadsheet#GetLastRow('.')]
if a:firstline == a:lastline
let [firstRow, lastRow] = [tablemode#spreadsheet#GetFirstRow('.'), tablemode#spreadsheet#GetLastRow('.')]
else
let [firstRow, lastRow] = [a:firstline, a:lastline]
endif
call tablemode#spreadsheet#MoveToStartOfCell()
exec ':'.firstRow.','.lastRow . 'sort'.bang opts '/.*\%'.col('.').'v/'
exec ':undojoin | '.firstRow.','.lastRow . 'sort'.bang opts '/.*\%'.col.'v/'
endfunction

View File

@@ -63,8 +63,8 @@ function! tablemode#spreadsheet#formula#EvaluateExpr(expr, line) abort "{{{2
let expr = substitute(expr, 'Average(\([^)]*\))', 'tablemode#spreadsheet#Average("\1",'.line.','.colm.')', 'g')
endif
if expr =~# '\$\d\+,\d\+'
let expr = substitute(expr, '\$\(\d\+\),\(\d\+\)',
if expr =~# '\$\-\?\d\+,\-\?\d\+'
let expr = substitute(expr, '\$\(\-\?\d\+\),\(\-\?\d\+\)',
\ '\=str2float(tablemode#spreadsheet#cell#GetCells(line, submatch(1), submatch(2)))', 'g')
endif

View File

@@ -4,16 +4,21 @@ function! s:blank(string) "{{{2
endfunction
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() .
\ '[' . g:table_mode_corner . g:table_mode_corner_corner . ']' .
\ '[' . escape(g:table_mode_fillchar . g:table_mode_header_fillchar . g:table_mode_corner . g:table_mode_align_char, '-') . ']\+' .
\ '[' . g:table_mode_corner . g:table_mode_corner_corner . ']' .
\ '[' . corner . corner_corner . ']' .
\ '[' . escape(g:table_mode_fillchar . header_fillchar . corner . g:table_mode_align_char, '-') . ']\+' .
\ '[' . corner . corner_corner . ']' .
\ tablemode#table#EndExpr()
endfunction
function! s:DefaultBorder() "{{{2
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
return ''
endif
@@ -31,16 +36,24 @@ function! s:GenerateHeaderBorder(line) "{{{2
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 fillchar = tablemode#table#IsHeader(line - 1) ? g:table_mode_header_fillchar : g:table_mode_fillchar
let seperator_match_regex = g:table_mode_separator . '\zs\([^' . g:table_mode_separator . ']*\)\ze' . g:table_mode_separator
let border = substitute(tline, seperator_match_regex, '\=repeat(fillchar, tablemode#utils#StrDisplayWidth(submatch(0)))', 'g')
let border = substitute(border, g:table_mode_separator, g:table_mode_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 fillchar = tablemode#table#IsHeader(line - 1) ? header_fillchar : g:table_mode_fillchar
let special_replacement = '___'
let border = substitute(tline, g:table_mode_escaped_separator_regex, special_replacement, 'g')
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, special_replacement, g:table_mode_separator, 'g')
let border = substitute(border, g:table_mode_separator, corner, 'g')
let border = substitute(border, '^' . corner . '\(.*\)' . corner . '$', corner_corner . '\1' . corner_corner, '')
" Incorporate header alignment chars
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 gcols = tablemode#align#Split(border, pat)
@@ -79,7 +92,7 @@ endfunction
function! tablemode#table#GetCommentStart() "{{{2
let cstring = &commentstring
if tablemode#utils#strlen(cstring) > 0
return substitute(split(cstring, '%s')[0], '[^()]', '\\\0', 'g')
return substitute(split(cstring, '%s')[0], '[^(%)]', '\\\0', 'g')
else
return ''
endif
@@ -162,6 +175,9 @@ function! tablemode#table#AddBorder(line) "{{{2
endfunction
function! tablemode#table#Realign(line) "{{{2
let current_fm = &foldmethod " save foldmethod to be restored
setlocal foldmethod=manual " manual foldmethod while table is being aligned
let line = tablemode#utils#line(a:line)
let lines = []
@@ -196,4 +212,7 @@ function! tablemode#table#Realign(line) "{{{2
for bline in blines
call tablemode#table#AddBorder(bline)
endfor
" restore foldmethod
execute "setlocal foldmethod=" . current_fm
endfunction

View File

@@ -47,3 +47,7 @@ function! tablemode#utils#StrDisplayWidth(string) "{{{2
return rv
endif
endfunction
function! tablemode#utils#get_buffer_or_global_option(table_option) "{{{2
return get(b:, a:table_option, get(g:, a:table_option))
endf

View File

@@ -184,6 +184,9 @@ g:table_mode_verbose *table-mode-verbose*
g:table_mode_corner *table-mode-corner*
Use this option to define the table corner character: >
let g:table_mode_corner = '+'
<
Or only in the current buffer: >
let b:table_mode_corner = '+'
<
g:table_mode_separator *table-mode-separator*
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
corners of the table border. >
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*
Use this option to define the character to be used for defining
@@ -299,6 +305,16 @@ g:table_mode_sort_map *table-mode-sort-map*
current column. >
let g:table_mode_sort_map = '<Leader>ts'
>
g:table_mode_tableize_map *table-mode-tableize-map*
Set this to configure the mapping for converting the visual selection
to a table. >
let g:table_mode_tableize_map = '<Leader>tt'
>
g:table_mode_tableize_d_map *table-mode-tableize-d-map*
Set this to configure the mapping for converting the visual selection
to a table, asking the user for a delimiter. >
let g:table_mode_tableize_d_map = '<Leader>T'
>
g:table_mode_syntax *table-mode-syntax*
Control whether table mode should define table syntax definitions or
not. >
@@ -456,13 +472,13 @@ COMMANDS *table-mode-commands*
CONTRIBUTING *table-mode-contributing*
If you want to take a stab at it, by all means, send me a pull request on
Github (http://github.com/dhruvasagar/table-mode) or get in touch with me
Github (http://github.com/dhruvasagar/vim-table-mode) or get in touch with me
directly via e-mail at dhruva 'dot' sagar 'at' gmail.com.
===============================================================================
REPORT ISSUES *table-mode-report-issues*
If you discover any issues, please report them at
http://github.com/dhruvasagar/table-mode/issues.
http://github.com/dhruvasagar/vim-table-mode/issues.
vim:tw=78:ts=8:ft=help:norl:ai:et

View File

@@ -0,0 +1 @@
let b:table_mode_corner = '|'

View File

@@ -0,0 +1,2 @@
let b:table_mode_corner_corner = '+'
let b:table_mode_header_fillchar = '='

View File

@@ -18,6 +18,7 @@ endfunction
call s:SetGlobalOptDefault('table_mode_corner', '+')
call s:SetGlobalOptDefault('table_mode_verbose', 1)
call s:SetGlobalOptDefault('table_mode_separator', '|')
call s:SetGlobalOptDefault('table_mode_escaped_separator_regex', '\(\\\)\@<!' . g:table_mode_separator)
call s:SetGlobalOptDefault('table_mode_fillchar', '-')
call s:SetGlobalOptDefault('table_mode_header_fillchar', '-')
call s:SetGlobalOptDefault('table_mode_map_prefix', '<Leader>t')
@@ -36,13 +37,15 @@ call s:SetGlobalOptDefault('table_mode_motion_right_map', ']<Bar>')
call s:SetGlobalOptDefault('table_mode_cell_text_object_a_map', 'a<Bar>')
call s:SetGlobalOptDefault('table_mode_cell_text_object_i_map', 'i<Bar>')
call s:SetGlobalOptDefault('table_mode_realign_map', '<Leader>tr')
call s:SetGlobalOptDefault('table_mode_delete_row_map', '<Leader>tdd')
call s:SetGlobalOptDefault('table_mode_delete_column_map', '<Leader>tdc')
call s:SetGlobalOptDefault('table_mode_add_formula_map', '<Leader>tfa')
call s:SetGlobalOptDefault('table_mode_eval_formula_map', '<Leader>tfe')
call s:SetGlobalOptDefault('table_mode_echo_cell_map', '<Leader>t?')
call s:SetGlobalOptDefault('table_mode_sort_map', '<Leader>ts')
call s:SetGlobalOptDefault('table_mode_realign_map', g:table_mode_map_prefix.'r')
call s:SetGlobalOptDefault('table_mode_delete_row_map', g:table_mode_map_prefix.'dd')
call s:SetGlobalOptDefault('table_mode_delete_column_map', g:table_mode_map_prefix.'dc')
call s:SetGlobalOptDefault('table_mode_add_formula_map', g:table_mode_map_prefix.'fa')
call s:SetGlobalOptDefault('table_mode_eval_formula_map', g:table_mode_map_prefix.'fe')
call s:SetGlobalOptDefault('table_mode_echo_cell_map', g:table_mode_map_prefix.'?')
call s:SetGlobalOptDefault('table_mode_sort_map', g:table_mode_map_prefix.'s')
call s:SetGlobalOptDefault('table_mode_tableize_map', g:table_mode_map_prefix.'t')
call s:SetGlobalOptDefault('table_mode_tableize_d_map', '<Leader>T')
call s:SetGlobalOptDefault('table_mode_syntax', 1)
call s:SetGlobalOptDefault('table_mode_auto_align', 1)
@@ -72,7 +75,7 @@ endif
" }}}2
command! -nargs=? -range Tableize <line1>,<line2>call tablemode#TableizeRange(<q-args>)
command! -nargs=? -bang TableSort call tablemode#spreadsheet#Sort(<bang>0, <q-args>)
command! -nargs=? -bang -range TableSort <line1>,<line2>call tablemode#spreadsheet#Sort(<bang>0, <q-args>)
command! TableAddFormula call tablemode#spreadsheet#formula#Add()
command! TableModeRealign call tablemode#table#Realign('.')
command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine()
@@ -97,8 +100,8 @@ onoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spr
xnoremap <silent> <Plug>(table-mode-cell-text-object-a) :<C-U>call tablemode#spreadsheet#cell#TextObject(0)<CR>
xnoremap <silent> <Plug>(table-mode-cell-text-object-i) :<C-U>call tablemode#spreadsheet#cell#TextObject(1)<CR>
nnoremap <silent> <Plug>(table-mode-delete-row) :call tablemode#spreadsheet#DeleteRow()<CR>
nnoremap <silent> <Plug>(table-mode-delete-column) :call tablemode#spreadsheet#DeleteColumn()<CR>
nnoremap <silent> <Plug>(table-mode-delete-row) :<C-U>call tablemode#spreadsheet#DeleteRow()<CR>
nnoremap <silent> <Plug>(table-mode-delete-column) :<C-U>call tablemode#spreadsheet#DeleteColumn()<CR>
nnoremap <silent> <Plug>(table-mode-add-formula) :call tablemode#spreadsheet#formula#Add()<CR>
nnoremap <silent> <Plug>(table-mode-eval-formula) :call tablemode#spreadsheet#formula#EvaluateFormulaLine()<CR>
@@ -108,12 +111,12 @@ nnoremap <silent> <Plug>(table-mode-echo-cell) :call <SID>TableEchoCell()<CR>
nnoremap <silent> <Plug>(table-mode-sort) :call tablemode#spreadsheet#Sort('')<CR>
if !hasmapto('<Plug>(table-mode-tableize)')
exec "nmap" g:table_mode_map_prefix . "t <Plug>(table-mode-tableize)"
exec "xmap" g:table_mode_map_prefix . "t <Plug>(table-mode-tableize)"
exec "nmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)"
exec "xmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)"
endif
if !hasmapto('<Plug>(table-mode-tableize-delimiter)')
xmap <Leader>T <Plug>(table-mode-tableize-delimiter)
exec "xmap" g:table_mode_tableize_d_map "<Plug>(table-mode-tableize-delimiter)"
endif
augroup TableMode "{{{1

View File

@@ -1,5 +1,6 @@
let g:table_mode_corner = '+'
let g:table_mode_separator = '|'
let g:table_mode_escaped_separator_regex = '\(\\\)\@<!|'
let g:table_mode_fillchar = '-'
let g:table_mode_header_fillchar = '-'
let g:table_mode_map_prefix = '<Leader>t'
@@ -25,6 +26,8 @@ let g:table_mode_add_formula_map = '<Leader>tfa'
let g:table_mode_eval_formula_map = '<Leader>tfe'
let g:table_mode_echo_cell_map = '<Leader>t?'
let g:table_mode_sort_map = '<Leader>ts'
let g:table_mode_tableize_map = '<Leader>tt'
let g:table_mode_tableize_d_map = '<Leader>T'
let g:table_mode_syntax = 1
let g:table_mode_auto_align = 1

View File

@@ -0,0 +1,7 @@
|---+---+---+---|
| 1 | 9 | a | z |
| 2 | 8 | b | y |
| 3 | 7 | c | x |
| 4 | 6 | d | w |
| 5 | 5 | e | v |
|---+---+---+---|

View File

@@ -102,4 +102,25 @@ describe 'spreadsheet'
Expect tablemode#spreadsheet#ColumnCount('.') == 1
end
end
describe 'Repeated Manipulations'
before
new
normal! ggdG
read t/fixtures/big_sample.txt
call cursor(2, 3)
end
it 'should delete multiple rows correctly'
Expect tablemode#spreadsheet#RowCount('.') == 5
.,.+1 call tablemode#spreadsheet#DeleteRow()
Expect tablemode#spreadsheet#RowCount('.') == 3
end
it 'should delete multiple columns correctly'
Expect tablemode#spreadsheet#ColumnCount('.') == 4
.,.+1 call tablemode#spreadsheet#DeleteColumn()
Expect tablemode#spreadsheet#ColumnCount('.') == 2
end
end
end