Compare commits

...

41 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
Dhruva Sagar
4e41af8e5f Remove Auto Align in insert mode #115
Since realigning doesn't work well in insert mode, I have removed auto
align feature for it. Auto align will now kick in once you have made
changes and get back to normal mode.
2017-04-20 10:08:18 +05:30
Dhruva Sagar
35b41e0822 Merge pull request #113 from lbischof/patch-1
Fix readme formatting
2017-04-03 10:11:58 +05:30
Lorenz Bischof
f5d4b4e46d Fix readme formatting 2017-04-02 18:17:55 +02:00
Dhruva Sagar
d4cb68e8e1 Fix for option g:table_mode_update_time 2017-03-10 06:51:47 +05:30
Dhruva Sagar
79bf3f9bb7 Add configuration option table_mode_update_time #73
This is for better experience with auto align, we override the
updatetime with the value of the configuration g:table_mode_update_time.

Once table mode is disabled prior defaults are restored.
2017-03-10 06:48:30 +05:30
18 changed files with 215 additions and 52 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 language: ruby
rvm: rvm:
- 2.3.0 - 2.5.3
script: rake ci script: rake ci

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
# VIM Table Mode v4.6.5 [![Build Status](https://travis-ci.org/dhruvasagar/vim-table-mode.png?branch=master)](https://travis-ci.org/dhruvasagar/vim-table-mode) # VIM Table Mode v4.6.7 [![Build Status](https://travis-ci.org/dhruvasagar/vim-table-mode.png?branch=master)](https://travis-ci.org/dhruvasagar/vim-table-mode)
An awesome automatic table creator & formatter allowing one to create neat An awesome automatic table creator & formatter allowing one to create neat
tables as you type. tables as you type.
@@ -17,10 +17,11 @@ There are several ways to do this
href="https://github.com/tpope/vim-pathogen">pathogen.vim</a>, then href="https://github.com/tpope/vim-pathogen">pathogen.vim</a>, then
add a git submodule for your plugin: add a git submodule for your plugin:
```sh ```sh
$ cd ~/.vim $ cd ~/.vim
$ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-mode $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-mode
``` ```
3. Copy all files under autoload/, plugin/, doc/ to respective 3. Copy all files under autoload/, plugin/, doc/ to respective
~/.vim/autoload/, ~/.vim/plugin and ~/.vim/doc under UNIX or ~/.vim/autoload/, ~/.vim/plugin and ~/.vim/doc under UNIX or
vimfiles/autoload/, vimfiles/plugin/ and vimfiles/doc under WINDOWS and vimfiles/autoload/, vimfiles/plugin/ and vimfiles/doc under WINDOWS and
@@ -112,11 +113,17 @@ 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
`g:table_mode_align_char` option. `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 ### Formatting existing content into a table
Table Mode wouldn't justify it's name if it didn't allow formatting Table Mode wouldn't justify it's name if it didn't allow formatting
@@ -265,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 Also a shout out to godlygeek who developed the incredible <a
href="http://github.com/godlygeek/tabular">Tabular</a> plugin. 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,20 @@ function! s:ToggleAutoAlign() "{{{2
augroup TableModeAutoAlign augroup TableModeAutoAlign
au! au!
autocmd CursorHold,CursorHoldI * 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 augroup END
else else
silent! augroup! TableModeAutoAlign autocmd! TableModeAutoAlign
endif
endfunction
function! s:ToggleOptions() "{{{2
if tablemode#IsActive()
let b:old_update_time = &updatetime
exec 'set updatetime='.g:table_mode_update_time
else
exec 'set updatetime='.get(b:, 'old_update_time', 4000)
endif endif
endfunction endfunction
@@ -110,6 +120,7 @@ function! s:SetActive(bool) "{{{2
call s:ToggleSyntax() call s:ToggleSyntax()
call s:ToggleMapping() call s:ToggleMapping()
call s:ToggleAutoAlign() call s:ToggleAutoAlign()
call s:ToggleOptions()
if tablemode#IsActive() if tablemode#IsActive()
doautocmd User TableModeEnabled doautocmd User TableModeEnabled
else else
@@ -158,15 +169,17 @@ function! tablemode#IsActive() "{{{2
endfunction endfunction
function! tablemode#TableizeInsertMode() "{{{2 function! tablemode#TableizeInsertMode() "{{{2
if tablemode#IsActive() && getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator . g:table_mode_separator) if tablemode#IsActive()
call tablemode#table#AddBorder('.') if getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator . g:table_mode_separator . tablemode#table#EndExpr())
normal! A call tablemode#table#AddBorder('.')
elseif tablemode#IsActive() && getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator) normal! A
let column = tablemode#utils#strlen(substitute(getline('.')[0:col('.')], '[^' . g:table_mode_separator . ']', '', 'g')) elseif getline('.') =~# (tablemode#table#StartExpr() . g:table_mode_separator)
let position = tablemode#utils#strlen(matchstr(getline('.')[0:col('.')], '.*' . g:table_mode_separator . '\s*\zs.*')) let column = tablemode#utils#strlen(substitute(getline('.')[0:col('.')], '[^' . g:table_mode_separator . ']', '', 'g'))
call tablemode#table#Realign('.') let position = tablemode#utils#strlen(matchstr(getline('.')[0:col('.')], '.*' . g:table_mode_separator . '\s*\zs.*'))
normal! 0 call tablemode#table#Realign('.')
call search(repeat('[^' . g:table_mode_separator . ']*' . g:table_mode_separator, column) . '\s\{-\}' . repeat('.', position), 'ce', line('.')) normal! 0
call search(repeat('[^' . g:table_mode_separator . ']*' . g:table_mode_separator, column) . '\s\{-\}' . repeat('.', position), 'ce', line('.'))
endif
endif endif
endfunction endfunction

View File

@@ -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')
@@ -84,7 +86,7 @@ endfunction
function! tablemode#align#Align(lines) "{{{2 function! tablemode#align#Align(lines) "{{{2
if empty(a:lines) | return [] | endif 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 for line in lines
let stext = line.text 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)) return s:Average(call('tablemode#spreadsheet#cell#GetCellRange', args))
endfunction 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 opts = a:0 ? a:1 : ''
let bang = a:bang ? '!' : '' 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() call tablemode#spreadsheet#MoveToStartOfCell()
exec ':'.firstRow.','.lastRow . 'sort'.bang opts '/.*\%'.col('.').'v/' exec ':undojoin | '.firstRow.','.lastRow . 'sort'.bang opts '/.*\%'.col.'v/'
endfunction 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') let expr = substitute(expr, 'Average(\([^)]*\))', 'tablemode#spreadsheet#Average("\1",'.line.','.colm.')', 'g')
endif endif
if expr =~# '\$\d\+,\d\+' if expr =~# '\$\-\?\d\+,\-\?\d\+'
let expr = substitute(expr, '\$\(\d\+\),\(\d\+\)', let expr = substitute(expr, '\$\(\-\?\d\+\),\(\-\?\d\+\)',
\ '\=str2float(tablemode#spreadsheet#cell#GetCells(line, submatch(1), submatch(2)))', 'g') \ '\=str2float(tablemode#spreadsheet#cell#GetCells(line, submatch(1), submatch(2)))', 'g')
endif endif

View File

@@ -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,16 +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 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 special_replacement = '___'
let border = substitute(border, g:table_mode_separator, g:table_mode_corner, 'g') let border = substitute(tline, g:table_mode_escaped_separator_regex, special_replacement, '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 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 " 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)
@@ -79,7 +92,7 @@ endfunction
function! tablemode#table#GetCommentStart() "{{{2 function! tablemode#table#GetCommentStart() "{{{2
let cstring = &commentstring let cstring = &commentstring
if tablemode#utils#strlen(cstring) > 0 if tablemode#utils#strlen(cstring) > 0
return substitute(split(cstring, '%s')[0], '[^()]', '\\\0', 'g') return substitute(split(cstring, '%s')[0], '[^(%)]', '\\\0', 'g')
else else
return '' return ''
endif endif
@@ -162,6 +175,9 @@ function! tablemode#table#AddBorder(line) "{{{2
endfunction endfunction
function! tablemode#table#Realign(line) "{{{2 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 line = tablemode#utils#line(a:line)
let lines = [] let lines = []
@@ -196,4 +212,7 @@ function! tablemode#table#Realign(line) "{{{2
for bline in blines for bline in blines
call tablemode#table#AddBorder(bline) call tablemode#table#AddBorder(bline)
endfor endfor
" restore foldmethod
execute "setlocal foldmethod=" . current_fm
endfunction endfunction

View File

@@ -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) "{{{2
return get(b:, a:table_option, get(g:, a:table_option))
endf

View File

@@ -1,7 +1,7 @@
*table-mode.txt* Table Mode for easy table formatting *table-mode.txt* Table Mode for easy table formatting
=============================================================================== ===============================================================================
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 4.6.5 VERSION 4.6.7
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/>
@@ -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
@@ -299,6 +305,16 @@ g:table_mode_sort_map *table-mode-sort-map*
current column. > current column. >
let g:table_mode_sort_map = '<Leader>ts' 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* g:table_mode_syntax *table-mode-syntax*
Control whether table mode should define table syntax definitions or Control whether table mode should define table syntax definitions or
not. > not. >
@@ -310,6 +326,12 @@ g:table_mode_auto_align *table-mode-auto-align*
let g:table_mode_auto_align = 1 let g:table_mode_auto_align = 1
< <
g:table_mode_update_time *table-mode-update-time*
Set the value of updatetime to be used when table mode is active,
used in combination with |table-mode-auto-align|. >
let g:table_mode_update_time = 500
<
=============================================================================== ===============================================================================
MAPPINGS *table-mode-mappings* MAPPINGS *table-mode-mappings*
@@ -373,7 +395,7 @@ MAPPINGS *table-mode-mappings*
|| Expands to a header border. You can change this by changing || Expands to a header border. You can change this by changing
|table-mode-separator| option. You can change the character to |table-mode-separator| option. You can change the character to
be used for te extreme corners of the border by changing be used for the extreme corners of the border by changing
|table-mode-corner-corner| option. |table-mode-corner-corner| option.
=============================================================================== ===============================================================================
@@ -450,13 +472,13 @@ COMMANDS *table-mode-commands*
CONTRIBUTING *table-mode-contributing* CONTRIBUTING *table-mode-contributing*
If you want to take a stab at it, by all means, send me a pull request on 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. directly via e-mail at dhruva 'dot' sagar 'at' gmail.com.
=============================================================================== ===============================================================================
REPORT ISSUES *table-mode-report-issues* REPORT ISSUES *table-mode-report-issues*
If you discover any issues, please report them at 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 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_corner', '+')
call s:SetGlobalOptDefault('table_mode_verbose', 1) call s:SetGlobalOptDefault('table_mode_verbose', 1)
call s:SetGlobalOptDefault('table_mode_separator', '|') 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_fillchar', '-')
call s:SetGlobalOptDefault('table_mode_header_fillchar', '-') call s:SetGlobalOptDefault('table_mode_header_fillchar', '-')
call s:SetGlobalOptDefault('table_mode_map_prefix', '<Leader>t') call s:SetGlobalOptDefault('table_mode_map_prefix', '<Leader>t')
@@ -36,16 +37,19 @@ 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_a_map', 'a<Bar>')
call s:SetGlobalOptDefault('table_mode_cell_text_object_i_map', 'i<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_realign_map', g:table_mode_map_prefix.'r')
call s:SetGlobalOptDefault('table_mode_delete_row_map', '<Leader>tdd') call s:SetGlobalOptDefault('table_mode_delete_row_map', g:table_mode_map_prefix.'dd')
call s:SetGlobalOptDefault('table_mode_delete_column_map', '<Leader>tdc') call s:SetGlobalOptDefault('table_mode_delete_column_map', g:table_mode_map_prefix.'dc')
call s:SetGlobalOptDefault('table_mode_add_formula_map', '<Leader>tfa') call s:SetGlobalOptDefault('table_mode_add_formula_map', g:table_mode_map_prefix.'fa')
call s:SetGlobalOptDefault('table_mode_eval_formula_map', '<Leader>tfe') call s:SetGlobalOptDefault('table_mode_eval_formula_map', g:table_mode_map_prefix.'fe')
call s:SetGlobalOptDefault('table_mode_echo_cell_map', '<Leader>t?') call s:SetGlobalOptDefault('table_mode_echo_cell_map', g:table_mode_map_prefix.'?')
call s:SetGlobalOptDefault('table_mode_sort_map', '<Leader>ts') 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_syntax', 1)
call s:SetGlobalOptDefault('table_mode_auto_align', 1) call s:SetGlobalOptDefault('table_mode_auto_align', 1)
call s:SetGlobalOptDefault('table_mode_update_time', 500)
function! s:TableEchoCell() "{{{1 function! s:TableEchoCell() "{{{1
if tablemode#table#IsRow('.') if tablemode#table#IsRow('.')
@@ -71,7 +75,7 @@ endif
" }}}2 " }}}2
command! -nargs=? -range Tableize <line1>,<line2>call tablemode#TableizeRange(<q-args>) 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! TableAddFormula call tablemode#spreadsheet#formula#Add()
command! TableModeRealign call tablemode#table#Realign('.') command! TableModeRealign call tablemode#table#Realign('.')
command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine() command! TableEvalFormulaLine call tablemode#spreadsheet#formula#EvaluateFormulaLine()
@@ -96,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-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> 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-row) :<C-U>call tablemode#spreadsheet#DeleteRow()<CR>
nnoremap <silent> <Plug>(table-mode-delete-column) :call tablemode#spreadsheet#DeleteColumn()<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-add-formula) :call tablemode#spreadsheet#formula#Add()<CR>
nnoremap <silent> <Plug>(table-mode-eval-formula) :call tablemode#spreadsheet#formula#EvaluateFormulaLine()<CR> nnoremap <silent> <Plug>(table-mode-eval-formula) :call tablemode#spreadsheet#formula#EvaluateFormulaLine()<CR>
@@ -107,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> nnoremap <silent> <Plug>(table-mode-sort) :call tablemode#spreadsheet#Sort('')<CR>
if !hasmapto('<Plug>(table-mode-tableize)') if !hasmapto('<Plug>(table-mode-tableize)')
exec "nmap" 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_map_prefix . "t <Plug>(table-mode-tableize)" exec "xmap" g:table_mode_tableize_map "<Plug>(table-mode-tableize)"
endif endif
if !hasmapto('<Plug>(table-mode-tableize-delimiter)') 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 endif
augroup TableMode "{{{1 augroup TableMode "{{{1

View File

@@ -1,5 +1,6 @@
let g:table_mode_corner = '+' let g:table_mode_corner = '+'
let g:table_mode_separator = '|' let g:table_mode_separator = '|'
let g:table_mode_escaped_separator_regex = '\(\\\)\@<!|'
let g:table_mode_fillchar = '-' let g:table_mode_fillchar = '-'
let g:table_mode_header_fillchar = '-' let g:table_mode_header_fillchar = '-'
let g:table_mode_map_prefix = '<Leader>t' let g:table_mode_map_prefix = '<Leader>t'
@@ -25,6 +26,9 @@ let g:table_mode_add_formula_map = '<Leader>tfa'
let g:table_mode_eval_formula_map = '<Leader>tfe' let g:table_mode_eval_formula_map = '<Leader>tfe'
let g:table_mode_echo_cell_map = '<Leader>t?' let g:table_mode_echo_cell_map = '<Leader>t?'
let g:table_mode_sort_map = '<Leader>ts' 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_syntax = 1
let g:table_mode_auto_align = 1 let g:table_mode_auto_align = 1
let g:table_mode_update_time = 500

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 Expect tablemode#spreadsheet#ColumnCount('.') == 1
end end
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 end