Compare commits

..

67 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
Dhruva Sagar
ef66b3ec2f Revert "Also auto realign on InsertLeave #73"
This reverts commit 6584cee4a4.
2017-03-09 15:02:42 +05:30
Dhruva Sagar
6584cee4a4 Also auto realign on InsertLeave #73 2017-03-09 14:24:15 +05:30
Dhruva Sagar
1eef73fc5b Add option to auto align table while editing #73 2017-03-09 11:00:19 +05:30
Dhruva Sagar
d3b70df0a6 Merge pull request #112 from polyzen/patch-1
readme: Fix minor Vint (Vim linter) warnings
2017-03-08 16:25:11 +05:30
Daniel M. Capella
096165718e readme: Fix minor Vint (Vim linter) warnings 2017-03-08 06:59:39 +00:00
Dhruva Sagar
30a3eba816 Fix #103 : Refactored border creation
Border creation should not conflict with the contents of the row
2017-01-05 11:42:10 +05:30
Dhruva Sagar
cc0055f329 Fixed align unicode fixture
The before fixture should not have any unnecessary spaces
2017-01-04 16:15:46 +05:30
Dhruva Sagar
8d3affcf5f Minor refactor for table syntax 2017-01-04 16:03:24 +05:30
Dhruva Sagar
9edd6d7d20 Add config to disable table mode syntax
Since table mode syntax can hamper performance, it is now possible to
disable it with a global config
2017-01-04 15:49:35 +05:30
Dhruva Sagar
441c30c35a Merge pull request #98 from harriott/master
enabling toggle notification by default
2016-09-28 19:27:31 +05:30
Joseph Harriott
ebd16eef19 Merge remote-tracking branch 'gh/master' 2016-09-28 15:39:23 +02:00
Joseph Harriott
141efc3edd corrected spurious loaded_table_verbose 2016-09-28 15:29:07 +02:00
Joseph Harriott
c82bc292c5 deleted tags, as requested 2016-09-27 23:30:29 +02:00
Dhruva Sagar
8209b59215 Bumped the version 2016-09-21 14:07:59 +05:30
Dhruva Sagar
5b3b2f7c05 Updated the README
Fixed the tip
2016-09-21 14:05:56 +05:30
harriott
47f60d2972 doc adjusted for default verbose 2016-09-09 11:03:00 +02:00
harriott
0f680bfd1b 'table_mode_verbose', 1 2016-09-09 10:53:18 +02:00
harriott
19f2f5c26f reset gitignore tags 2016-09-09 10:50:30 +02:00
harriott
e07c240940 fixed logger.vim and announce g:table_mode_verbose 2016-09-09 10:39:01 +02:00
Dhruva Sagar
8bacd0ba66 Bumped ruby version for travis 2016-08-23 09:29:00 +05:30
Dhruva Sagar
8309a33aa7 Fix #90
Allow for multiple formula lines
2016-08-23 09:26:24 +05:30
Dhruva Sagar
293c847cdf Bumped ruby version for tests 2016-08-23 09:25:56 +05:30
Dhruva Sagar
96236638a8 Fix #92
Improved mappings for table mode
2016-07-11 13:39:28 +05:30
Dhruva Sagar
1d14a027a8 Merge branch 'master' of github.com:dhruvasagar/vim-table-mode 2016-07-11 13:24:27 +05:30
Dhruva Sagar
e490373435 Fix #88
Added the iabbrevs to README
2016-07-11 13:23:37 +05:30
Dhruva Sagar
b420dedbf5 Fix #88
Added the iabbrevs to README
2016-07-11 13:22:12 +05:30
20 changed files with 313 additions and 90 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.2.0
- 2.5.3
script: rake ci

View File

@@ -1,5 +1,5 @@
source 'https://rubygems.org'
ruby '2.2.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

@@ -1,4 +1,4 @@
# VIM Table Mode v4.6.4.1 [![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
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
add a git submodule for your plugin:
```sh
```sh
$ cd ~/.vim
$ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-mode
```
```
3. Copy all files under autoload/, plugin/, doc/ to respective
~/.vim/autoload/, ~/.vim/plugin and ~/.vim/doc under UNIX or
vimfiles/autoload/, vimfiles/plugin/ and vimfiles/doc under WINDOWS and
@@ -28,7 +29,26 @@ $ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-m
### Creating table on-the-fly
To start using the plugin in the on-the-fly mode use `:TableModeToggle` mapped to <kbd>\<Leader\>tm</kbd> by default (which means <kbd>\\</kbd> <kbd>t</kbd> <kbd>m</kbd> if you didn't override the <Leader> by `:let mapleader = ","` to have <kbd>,</kbd> <kbd>t</kbd> <kbd>m</kbd>).
To start using the plugin in the on-the-fly mode use `:TableModeToggle` mapped to <kbd>\<Leader\>tm</kbd> by default (which means <kbd>\\</kbd> <kbd>t</kbd> <kbd>m</kbd> if you didn't override the <Leader> by `:let mapleader = ','` to have <kbd>,</kbd> <kbd>t</kbd> <kbd>m</kbd>).
> Tip :
> You can use the following to quickly enable / disable table mode in insert
> mode by using `||` or `__` :
> ```vim
> function! s:isAtStartOfLine(mapping)
> let text_before_cursor = getline('.')[0 : col('.')-1]
> let mapping_pattern = '\V' . escape(a:mapping, '\')
> let comment_pattern = '\V' . escape(substitute(&l:commentstring, '%s.*$', '', ''), '\')
> return (text_before_cursor =~? '^' . ('\v(' . comment_pattern . '\v)?') . '\s*\v' . mapping_pattern . '\v$')
> endfunction
>
> inoreabbrev <expr> <bar><bar>
> \ <SID>isAtStartOfLine('\|\|') ?
> \ '<c-o>:TableModeEnable<cr><bar><space><bar><left><left>' : '<bar><bar>'
> inoreabbrev <expr> __
> \ <SID>isAtStartOfLine('__') ?
> \ '<c-o>:silent! TableModeDisable<cr>' : '__'
> ```
Enter the first line, delimiting columns by the `|` symbol. The plugin reacts by inserting spaces between the text and the separator if you omit them:
@@ -68,7 +88,7 @@ Corner separators are adjustable:
For Markdown-compatible tables use
let g:table_mode_corner="|"
let g:table_mode_corner='|'
|-----------------|--------------------------|------------|
@@ -81,8 +101,8 @@ For Markdown-compatible tables use
To get ReST-compatible tables use
let g:table_mode_corner_corner="+"
let g:table_mode_header_fillchar="="
let g:table_mode_corner_corner='+'
let g:table_mode_header_fillchar='='
+-----------------+--------------------------+------------+
@@ -93,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
@@ -246,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

@@ -65,22 +65,20 @@ function! s:ToggleMapping() "{{{2
endif
endfunction
function! tablemode#SyntaxEnable()
exec 'syntax match Table'
\ '/' . tablemode#table#StartExpr() . '\zs|.\+|\ze' . tablemode#table#EndExpr() . '/'
\ 'contains=TableBorder,TableSeparator,TableColumnAlign containedin=ALL'
syntax match TableSeparator /|/ contained
syntax match TableColumnAlign /:/ contained
syntax match TableBorder /[\-+]\+/ contained
function! s:ToggleSyntax() "{{{2
if !g:table_mode_syntax | return | endif
hi! link TableBorder Delimiter
hi! link TableSeparator Delimiter
hi! link TableColumnAlign Type
endfunction
function! s:ToggleSyntax()
if tablemode#IsActive()
call tablemode#SyntaxEnable()
exec 'syntax match Table'
\ '/' . tablemode#table#StartExpr() . '\zs|.\+|\ze' . tablemode#table#EndExpr() . '/'
\ 'contains=TableBorder,TableSeparator,TableColumnAlign containedin=ALL'
syntax match TableSeparator /|/ contained
syntax match TableColumnAlign /:/ contained
syntax match TableBorder /[\-+]\+/ contained
hi! link TableBorder Delimiter
hi! link TableSeparator Delimiter
hi! link TableColumnAlign Type
else
syntax clear Table
syntax clear TableBorder
@@ -93,10 +91,36 @@ function! s:ToggleSyntax()
endif
endfunction
function! s:ToggleAutoAlign() "{{{2
if !g:table_mode_auto_align | return | endif
if tablemode#IsActive()
augroup TableModeAutoAlign
au!
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
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
endfunction
function! s:SetActive(bool) "{{{2
let b:table_mode_active = a:bool
call s:ToggleSyntax()
call s:ToggleMapping()
call s:ToggleAutoAlign()
call s:ToggleOptions()
if tablemode#IsActive()
doautocmd User TableModeEnabled
else
@@ -145,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

@@ -1,5 +1,5 @@
function! tablemode#logger#log(message)
if g:table_mode_verbose
echom message
echom a:message
endif
endfunction

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

@@ -1,4 +1,7 @@
" Private Functions {{{1
function! s:IsFormulaLine(line) "{{{2
return getline(a:line) =~# 'tmf: '
endfunction
" Public Functions {{{1
function! tablemode#spreadsheet#formula#Add(...) "{{{2
@@ -60,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
@@ -105,14 +108,21 @@ function! tablemode#spreadsheet#formula#EvaluateFormulaLine() abort "{{{2
let line = tablemode#spreadsheet#GetLastRow('.')
let fline = line + 1
if tablemode#table#IsBorder(fline) | let fline += 1 | endif
if getline(fline) =~# 'tmf: '
let exprs = split(matchstr(getline(fline), matchexpr), ';')
endif
elseif getline('.') =~# 'tmf: ' " We're on the formula line
while s:IsFormulaLine(fline)
let exprs += split(matchstr(getline(fline), matchexpr), ';')
let fline += 1
endwhile
elseif s:IsFormulaLine('.')
let fline = line('.')
let line = line('.') - 1
while s:IsFormulaLine(line) | let fline = line | let line -= 1 | endwhile
if tablemode#table#IsBorder(line) | let line -= 1 | endif
if tablemode#table#IsRow(line)
let exprs = split(matchstr(getline('.'), matchexpr), ';')
" let exprs = split(matchstr(getline('.'), matchexpr), ';')
while s:IsFormulaLine(fline)
let exprs += split(matchstr(getline(fline), matchexpr), ';')
let fline += 1
endwhile
endif
endif

View File

@@ -1,15 +1,24 @@
" Private Functions {{{1
function! s:blank(string) "{{{2
return a:string =~# '^\s*$'
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
@@ -27,19 +36,24 @@ function! s:GenerateHeaderBorder(line) "{{{2
endif
if tablemode#utils#strlen(line_val) <= 1 | return s:DefaultBorder() | 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')
" To accurately deal with unicode double width characters
if tablemode#table#IsHeader(line - 1)
let fill_columns = map(split(border, g:table_mode_corner), 'repeat(g:table_mode_header_fillchar, tablemode#utils#StrDisplayWidth(v:val))')
else
let fill_columns = map(split(border, g:table_mode_corner), 'repeat(g:table_mode_fillchar, tablemode#utils#StrDisplayWidth(v:val))')
endif
let border = g:table_mode_corner . join(fill_columns, g:table_mode_corner) . g:table_mode_corner
let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_corner_corner . '\1' . 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 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) ? 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)
@@ -78,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
@@ -135,7 +149,7 @@ function! tablemode#table#EndExpr() "{{{2
endfunction
function! tablemode#table#IsBorder(line) "{{{2
return !empty(getline(a:line)) && getline(a:line) =~# s:BorderExpr()
return !s:blank(getline(a:line)) && getline(a:line) =~# s:BorderExpr()
endfunction
function! tablemode#table#IsHeader(line) "{{{2
@@ -161,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 = []
@@ -195,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

@@ -1,7 +1,7 @@
*table-mode.txt* Table Mode for easy table formatting
===============================================================================
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 4.6.4.1
VERSION 4.6.7
Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/>
@@ -138,6 +138,7 @@ OPTIONS *table-mode-options*
Overview:
|table-mode-loaded| ............. Disable the plugin.
|table-mode-verbose| ............ Notify when Enabled/Disabled.
|table-mode-corner| ............. Set corner character.
|table-mode-separator| .......... Set separator character.
|table-mode-fillchar| ........... Set table fillchar character.
@@ -168,14 +169,24 @@ Overview:
|table-mode-eval-formula-map| ... Set the eval formula mapping
|table-mode-echo-cell-map| ...... Set the echo cell mapping
|table-mode-sort-map| ........... Set the table sort mapping
|table-mode-syntax| ............. Control table mode syntax
|table-mode-auto-align| ......... Set if the table mode should auto
align as you type
g:loaded_table_mode *table-mode-loaded*
Use this option to disable the plugin: >
let g:loaded_table_mode = 1
<
g:table_mode_verbose *table-mode-verbose*
Use this option to disable notifications: >
let g:table_mode_verbose = 0
<
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: >
@@ -224,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
@@ -291,6 +305,32 @@ 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. >
let g:table_mode_syntax = 1
<
g:table_mode_auto_align *table-mode-auto-align*
Set if the table mode should auto align as you type when table mode is
active. >
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*
@@ -355,7 +395,7 @@ MAPPINGS *table-mode-mappings*
|| Expands to a header border. You can change this by changing
|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.
===============================================================================
@@ -432,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

@@ -16,8 +16,9 @@ endfunction
" Set Global Defaults {{{1
call s:SetGlobalOptDefault('table_mode_corner', '+')
call s:SetGlobalOptDefault('table_mode_verbose', 0)
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,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_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)
call s:SetGlobalOptDefault('table_mode_update_time', 500)
function! s:TableEchoCell() "{{{1
if tablemode#table#IsRow('.')
@@ -50,16 +57,9 @@ function! s:TableEchoCell() "{{{1
endif
endfunction
augroup TableMode
au!
autocmd Syntax * if tablemode#IsActive() | call tablemode#SyntaxEnable() | endif
augroup END
" Define Commands & Mappings {{{1
if !g:table_mode_always_active "{{{2
exec "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_toggle_map .
\ " <Esc>:call tablemode#Toggle()<CR>"
exec "nnoremap <silent>" g:table_mode_map_prefix . g:table_mode_toggle_map ":<C-U>call tablemode#Toggle()<CR>"
command! -nargs=0 TableModeToggle call tablemode#Toggle()
command! -nargs=0 TableModeEnable call tablemode#Enable()
command! -nargs=0 TableModeDisable call tablemode#Disable()
@@ -75,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()
@@ -100,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>
@@ -111,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,3 +26,9 @@ 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
let g:table_mode_update_time = 500

View File

@@ -1,2 +1,2 @@
| This | is 測試 | table |
| This | is also | a table |
|This|is 測試|table|
|This|is also|a table|

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