Compare commits

..

1 Commits
v3.3.2 ... v3.1

Author SHA1 Message Date
Dhruva Sagar
2e909c0668 Releasing Table Mode v3.1
* Removed table border and related options. You can now optionally have
  a header instead, simply add a table header and add a border to it
  triggered by the vim iabbrev '+-' on the line immidiately after the
  header and it will expand to the correct border. It will auto update
  as the table realigns with changes. Similar approach as followed by
  tables in org-mode.
* Fixed bug of incorrect indentation of a newly added formula line.
* Fixed bug in ConvertDelimiterToSeparator causing incorrect
  tableization of commented blocks of delimited content.
2013-09-19 02:06:22 +05:30
12 changed files with 97 additions and 498 deletions

1
.gitignore vendored
View File

@@ -1,2 +1 @@
tags
.vim-flavor/

View File

@@ -1,4 +0,0 @@
language: ruby
rvm:
- 1.9.3
script: rake ci

View File

@@ -1,27 +1,4 @@
# Change Log
## Version 3.3.1
* Improved logic to ignore table borders (add as many as you'd like), the
first row is not treated special, it is row # 1. Keep that in mind while
defining Formulas
* Improved test coverage
## Version 3.3
* Dropped +- mapping to create table border instead now using ||
* You can now have a top table border (before header) as well as a bottom
table border.
## Version 3.2
* Added tests to test various use cases using <a
href='https://github.com/kana/vim-vspec'>Vspec</a>..
* Added travis integration for automated tests.
## Version 3.1
* Removed borders. You can now optionally create a table header by simply
adding a header border immidiately after the header line by using the
iabbrev trigger '+-'. Just type that on the line immidiately after the
header and press space / \<CR\> to complete the header border.
* Some Bug Fixes
## Version 3.0
* Removed dependence on Tabular and added code borrowed from Tabular for
aligning the table rows.

View File

@@ -1,4 +0,0 @@
source 'https://rubygems.org'
gem 'rake'
gem 'vim-flavor', '~> 1.1'

View File

@@ -1,18 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
blankslate (2.1.2.4)
parslet (1.5.0)
blankslate (~> 2.0)
rake (10.1.0)
thor (0.18.1)
vim-flavor (1.1.3)
parslet (~> 1.0)
thor (~> 0.14)
PLATFORMS
ruby
DEPENDENCIES
rake
vim-flavor (~> 1.1)

View File

@@ -1,4 +1,4 @@
# VIM Table Mode [![Build Status](https://travis-ci.org/dhruvasagar/vim-table-mode.png?branch=master)](https://travis-ci.org/dhruvasagar/vim-table-mode)
# VIM Table Mode
An awesome automatic table creator & formatter allowing one to create neat
tables as you type.
@@ -11,21 +11,17 @@ CHANGELOG.md </a>
## Getting Started
### Installation
There are several ways to do this
There are 2 ways to do this
1. I recommend installing <a
href="https://github.com/Shougo/neobundle.vim">NeoBundle</a> and then just
add `NeoBundle 'dhruvasagar/vim-table-mode'` to your ~/.vimrc
2. If you are using <a
href="https://github.com/tpope/vim-pathogen">pathogen.vim</a>, then
add a git submodule for your plugin:
href="https://github.com/tpope/vim-pathogen">pathogen.vim</a> and then
adding a git submodule for your plugin:
```sh
$ cd ~/.vim
$ git submodule add git@github.com:dhruvasagar/vim-table-mode.git bundle/table-mode
```
3. Copy autoload/todomode.vim, plugin/todo-mode.vim, doc/todo-mode.txt to
2. Copy autoload/todomode.vim, plugin/todo-mode.vim, doc/todo-mode.txt to
respective ~/.vim/autoload/, ~/.vim/plugin and ~/.vim/doc under UNIX or
vimfiles/autoload/, vimfiles/plugin/ and vimfiles/doc under WINDOWS and
restart VIM

View File

@@ -1,13 +0,0 @@
#!/usr/bin/env rake
task :ci => [:dump, :test]
task :dump do
sh 'vim --version'
end
task :test do
sh 'bundle exec vim-flavor test'
end
task :default => :test

View File

@@ -1 +0,0 @@
kana/vim-vspec (1.1.2)

View File

@@ -4,9 +4,10 @@
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: http://github.com/dhruvasagar/vim-table-mode
" Version: 3.3.2
" Version: 3.1
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
" (https://gist.github.com/tpope/287147) plugin by Tim Pope and
" uses a small amount of code from it.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
@@ -66,11 +67,11 @@ function! s:Sum(list) "{{{2
let result = 0.0
for item in a:list
if type(item) == type(1) || type(item) == type(1.0)
let result += item
let result = result + item
elseif type(item) == type('')
let result += str2float(item)
let result = result + str2float(item)
elseif type(item) == type([])
let result += s:Sum(item)
let result = result + s:Sum(item)
endif
endfor
return result
@@ -112,6 +113,9 @@ function! s:StartExpr() "{{{2
endif
endfunction
function! s:HeaderBorderExpr() "{{{2
return '^\s*' . g:table_mode_corner . '[' . g:table_mode_fillchar . g:table_mode_corner . ']*' . g:table_mode_corner . '$'
endfunction
function! s:EndExpr() "{{{2
let cend = s:GetCommentEnd()
@@ -122,14 +126,6 @@ function! s:EndExpr() "{{{2
endif
endfunction
function! s:HeaderBorderExpr() "{{{2
return s:StartExpr() .
\ '[' . g:table_mode_corner . g:table_mode_separator . ']' .
\ '[' . g:table_mode_fillchar . g:table_mode_corner . ']*' .
\ '[' . g:table_mode_corner . g:table_mode_separator . ']' .
\ s:EndExpr()
endfunction
function! s:StartCommentExpr() "{{{2
let cstartexpr = s:GetCommentStart()
if s:Strlen(cstartexpr) > 0
@@ -168,8 +164,13 @@ function! s:ToggleMapping() "{{{2
execute "inoremap <silent> <buffer> " . b:table_mode_separator_map . ' ' .
\ b:table_mode_separator_map . "<Esc>:call tablemode#TableizeInsertMode()<CR>a"
execute "inoreabbrev <silent> <buffer> " . g:table_mode_corner .
\ g:table_mode_fillchar . "<Esc>:call tablemode#AddHeaderBorder('.')<CR>A"
else
execute "iunmap <silent> <buffer> " . b:table_mode_separator_map
execute "iunabbrev <silent> <buffer> " . g:table_mode_corner . g:table_mode_fillchar
endif
endfunction
@@ -178,28 +179,12 @@ function! s:SetActive(bool) "{{{2
call s:ToggleMapping()
endfunction
function! s:DefaultHeaderBorder() "{{{2
if s:IsTableModeActive()
return g:table_mode_separator . g:table_mode_fillchar . g:table_mode_corner . g:table_mode_fillchar . g:table_mode_separator
else
return ''
endif
endfunction
function! s:GenerateHeaderBorder(line) "{{{2
let line = s:Line(a:line)
if tablemode#IsATableRow(line - s:RowGap()) || tablemode#IsATableRow(line + s:RowGap())
let line_val = ''
if tablemode#IsATableRow(line + s:RowGap())
let line_val = getline(line + s:RowGap())
endif
if tablemode#IsATableRow(line - s:RowGap()) && s:Strlen(line_val) < s:Strlen(getline(line - s:RowGap()))
let line_val = getline(line - s:RowGap())
endif
if s:Strlen(line_val) <= 1 | return s:DefaultHeaderBorder() | endif
if tablemode#IsATableRow(line - s:RowGap())
let line_val = getline(line - s:RowGap())
let border = substitute(line_val[stridx(line_val, g:table_mode_separator):strridx(line_val, g:table_mode_separator)], g:table_mode_separator, g:table_mode_corner, 'g')
let border = substitute(border, '[^' . g:table_mode_corner . ']', g:table_mode_fillchar, 'g')
let border = substitute(border, '^' . g:table_mode_corner . '\(.*\)' . g:table_mode_corner . '$', g:table_mode_separator . '\1' . g:table_mode_separator , '')
let cstartexpr = s:StartCommentExpr()
if s:Strlen(cstartexpr) > 0 && getline(line) =~# cstartexpr
@@ -212,8 +197,6 @@ function! s:GenerateHeaderBorder(line) "{{{2
else
return border
endif
else
return s:DefaultHeaderBorder()
endif
endfunction
@@ -256,10 +239,9 @@ function! s:GetFirstRow(line) "{{{2
if tablemode#IsATableRow(a:line)
let line = s:Line(a:line)
while tablemode#IsATableRow(line - s:RowGap()) || tablemode#IsATableHeader(line - s:RowGap())
let line -= s:RowGap()
while tablemode#IsATableRow(line - s:RowGap())
let line = line - s:RowGap()
endwhile
if tablemode#IsATableHeader(line) | let line += s:RowGap() | endif
return line
endif
@@ -275,10 +257,9 @@ function! s:GetLastRow(line) "{{{2
if tablemode#IsATableRow(a:line)
let line = s:Line(a:line)
while tablemode#IsATableRow(line + s:RowGap()) || tablemode#IsATableHeader(line + s:RowGap())
let line += s:RowGap()
while tablemode#IsATableRow(line+ s:RowGap())
let line = line + s:RowGap()
endwhile
if tablemode#IsATableHeader(line) | let line -= s:RowGap() | endif
return line
endif
@@ -290,23 +271,6 @@ function! s:MoveToLastRow() "{{{2
endif
endfunction
function! s:LineNr(row) "{{{2
if tablemode#IsATableRow('.')
let line = s:GetFirstRow('.')
let row_nr = 0
while tablemode#IsATableRow(line + s:RowGap()) || tablemode#IsATableHeader(line + s:RowGap())
if tablemode#IsATableRow(line)
let row_nr += 1
if row ==# row_nr | break | endif
endif
let line += s:RowGap()
endwhile
return line
endif
endfunction
function! s:MoveToStartOfCell() "{{{2
if getline('.')[col('.')-1] ==# g:table_mode_separator && !s:IsLastCell()
normal! 2l
@@ -331,28 +295,21 @@ function! s:GetCells(line, ...) abort
let [row, colm] = a:000
endif
let first_row = s:GetFirstRow(line)
if row == 0
let values = []
let line = first_row
while tablemode#IsATableRow(line) || tablemode#IsATableHeader(line)
if tablemode#IsATableRow(line)
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
call add(values, s:Strip(get(split(row_line, g:table_mode_separator), colm>0?colm-1:colm, '')))
endif
let line += s:RowGap()
let line = s:GetFirstRow(line)
while tablemode#IsATableRow(line)
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
call add(values, s:Strip(get(split(row_line, g:table_mode_separator), colm>0?colm-1:colm, '')))
let line = line + s:RowGap()
endwhile
return values
else
let row_nr = 0
let line = first_row
while tablemode#IsATableRow(line) || tablemode#IsATableHeader(line)
if tablemode#IsATableRow(line)
let row_nr += 1
if row ==# row_nr | break | endif
endif
let line += s:RowGap()
endwhile
if row > 0
let line = line + (row - tablemode#RowNr(line)) * s:RowGap()
else
let line = line + row * s:RowGap()
endif
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
if colm == 0
@@ -451,7 +408,7 @@ function! s:ParseRange(range, ...) "{{{2
else
let [row2, col2] = [rcs2[0], default_col]
endif
return [row1, col1, row2, col2]
endfunction
@@ -610,17 +567,10 @@ function! s:Align(lines) "{{{3
return lines
endfunction
" Public API {{{1
function! tablemode#sid() "{{{2
return maparg('<SID>', 'n')
endfunction
nnoremap <SID> <SID>
function! tablemode#scope() "{{{2
return s:
endfunction
function! tablemode#GetLastRow(line) "{{{2
return s:GetLastRow(a:line)
endfunction
@@ -661,7 +611,7 @@ function! tablemode#TableizeRange(...) range "{{{2
while lnum < (a:firstline + (a:lastline - a:firstline + 1)*s:RowGap())
call s:Tableizeline(lnum, a:1)
undojoin
let lnum += s:RowGap()
let lnum = lnum + s:RowGap()
endwhile
call tablemode#TableRealign(lnum - s:RowGap())
@@ -684,29 +634,34 @@ function! tablemode#TableRealign(line) "{{{2
let line = s:Line(a:line)
let [lnums, lines] = [[], []]
let [tline, blines] = [line, []]
while tablemode#IsATableRow(tline) || tablemode#IsATableHeader(tline)
if tablemode#IsATableHeader(tline)
call insert(blines, tline)
let tline -= s:RowGap()
continue
endif
let [bline, tline] = [0, line]
while tablemode#IsATableRow(tline)
call insert(lnums, tline)
call insert(lines, getline(tline))
let tline -= s:RowGap()
let tline = tline - s:RowGap()
endwhile
" If we reached header walking upwards
if getline(tline) =~# s:HeaderBorderExpr() && tablemode#IsATableRow(tline - s:RowGap())
let bline = tline
let tline = tline - s:RowGap()
" Insert the header line
call insert(lnums, tline)
call insert(lines, getline(tline))
endif
let tline = line + s:RowGap()
while tablemode#IsATableRow(tline) || tablemode#IsATableHeader(tline)
if tablemode#IsATableHeader(tline)
call insert(blines, tline)
let tline += s:RowGap()
continue
endif
" If we start at header
if !bline && getline(tline) =~# s:HeaderBorderExpr()
let bline = tline
let tline = tline + s:RowGap()
endif
while tablemode#IsATableRow(tline)
call add(lnums, tline)
call add(lines, getline(tline))
let tline += s:RowGap()
let tline = tline + s:RowGap()
endwhile
let lines = s:Align(lines)
@@ -716,37 +671,28 @@ function! tablemode#TableRealign(line) "{{{2
call setline(lnum, lines[index])
endfor
for bline in blines
if bline
call tablemode#AddHeaderBorder(bline)
endfor
endif
endfunction
function! tablemode#IsATableRow(line) "{{{2
return getline(a:line) =~# (s:StartExpr() . g:table_mode_separator . '[^' .
\ g:table_mode_fillchar . ']*[^' . g:table_mode_corner . ']*$')
endfunction
function! tablemode#IsATableHeader(line) "{{{2
return getline(a:line) =~# s:HeaderBorderExpr()
endfunction
function! tablemode#LineNr(row) "{{{2
return s:LineNr(row)
return getline(a:line) =~# (s:StartExpr() . g:table_mode_separator)
endfunction
function! tablemode#RowCount(line) "{{{2
let line = s:Line(a:line)
let [tline, totalRowCount] = [line, 0]
while tablemode#IsATableRow(tline) || tablemode#IsATableHeader(tline)
if tablemode#IsATableRow(tline) | let totalRowCount += 1 | endif
let tline -= s:RowGap()
while tablemode#IsATableRow(tline)
let totalRowCount += 1
let tline = tline - s:RowGap()
endwhile
let tline = line + s:RowGap()
while tablemode#IsATableRow(tline) || tablemode#IsATableHeader(tline)
if tablemode#IsATableRow(tline) | let totalRowCount += 1 | endif
let tline += s:RowGap()
while tablemode#IsATableRow(tline)
let totalRowCount += 1
let tline = tline + s:RowGap()
endwhile
return totalRowCount
@@ -756,9 +702,9 @@ function! tablemode#RowNr(line) "{{{2
let line = s:Line(a:line)
let rowNr = 0
while tablemode#IsATableRow(line) || tablemode#IsATableHeader(line)
if tablemode#IsATableRow(line) | let rowNr += 1 | endif
let line -= s:RowGap()
while tablemode#IsATableRow(line)
let rowNr += 1
let line = line - s:RowGap()
endwhile
return rowNr
@@ -787,9 +733,7 @@ function! tablemode#TableMotion(direction) "{{{2
if tablemode#IsATableRow('.')
if a:direction ==# 'l'
if s:IsLastCell()
if !tablemode#IsATableRow(line('.') + s:RowGap()) || (tablemode#IsATableHeader(line('.') + s:RowGap()) && tablemode#IsATableRow(line('.') + 2 * s:RowGap()))
return
endif
if !tablemode#IsATableRow(line('.') + s:RowGap()) | return | endif
call tablemode#TableMotion('j')
normal! 0
endif
@@ -802,9 +746,7 @@ function! tablemode#TableMotion(direction) "{{{2
endif
elseif a:direction ==# 'h'
if s:IsFirstCell()
if !tablemode#IsATableRow(line('.') - s:RowGap()) || (tablemode#IsATableHeader(line('.') - s:RowGap()) && tablemode#IsATableRow(line('.') - 2 * s:RowGap()))
return
endif
if !tablemode#IsATableRow(line('.') - s:RowGap()) | return | endif
call tablemode#TableMotion('k')
normal! $
endif
@@ -816,17 +758,9 @@ function! tablemode#TableMotion(direction) "{{{2
execute 'normal! 2F' . g:table_mode_separator . '2l'
endif
elseif a:direction ==# 'j'
if tablemode#IsATableRow(line('.') + s:RowGap())
execute 'normal! ' . s:RowGap() . 'j'
elseif tablemode#IsATableHeader(line('.') + s:RowGap()) && tablemode#IsATableRow(line('.') + 2 * s:RowGap())
execute 'normal! ' . (s:RowGap() + 1) . 'j'
endif
if tablemode#IsATableRow(line('.') + s:RowGap()) | execute 'normal ' . s:RowGap() . 'j' | endif
elseif a:direction ==# 'k'
if tablemode#IsATableRow(line('.') - s:RowGap())
execute 'normal! ' . s:RowGap() . 'k'
elseif tablemode#IsATableHeader(line('.') - s:RowGap()) && tablemode#IsATableRow(line('.') - 2 * s:RowGap())
execute 'normal! ' . (s:RowGap() + 1) . 'k'
endif
if tablemode#IsATableRow(line('.') - s:RowGap()) | execute 'normal ' . s:RowGap() . 'k' | endif
endif
endif
endfunction
@@ -847,8 +781,8 @@ endfunction
function! tablemode#DeleteColumn() "{{{2
if tablemode#IsATableRow('.')
for i in range(v:count1)
call s:MoveToStartOfCell()
call s:MoveToFirstRow()
call s:MoveToStartOfCell()
silent! execute "normal! h\<C-V>f" . g:table_mode_separator
call s:MoveToLastRow()
normal! d
@@ -861,11 +795,15 @@ endfunction
function! tablemode#DeleteRow() "{{{2
if tablemode#IsATableRow('.')
for i in range(v:count1)
if tablemode#IsATableRow('.')
normal! dd
if tablemode#RowCount('.') ==# 1
normal! kVjjd
else
normal! kVjd
endif
if !tablemode#IsATableRow('.')
if tablemode#IsATableRow(line('.')+1)
normal! j
else
normal! k
endif
endfor
@@ -914,7 +852,6 @@ function! tablemode#AddFormula() "{{{2
if fr !=# ''
let fr = '$' . row . ',' . colm . '=' . fr
let fline = tablemode#GetLastRow('.') + s:RowGap()
if tablemode#IsATableHeader(fline) | let fline += s:RowGap() | endif
let cursor_pos = [line('.'), col('.')]
if getline(fline) =~# 'tmf: '
" Comment line correctly
@@ -1003,14 +940,11 @@ function! tablemode#EvaluateFormulaLine() abort "{{{2
endif
if tablemode#IsATableRow('.') " We're inside the table
let line = s:GetLastRow('.')
let fline = line + s:RowGap()
if tablemode#IsATableHeader(fline) | let fline += s:RowGap() | endif
if getline(fline) =~# 'tmf: '
let exprs = split(matchstr(getline(fline), matchexpr), ';')
if getline(line + s:RowGap()) =~# 'tmf: '
let exprs = split(matchstr(getline(line + s:RowGap()), matchexpr), ';')
endif
elseif getline('.') =~# 'tmf: ' " We're on the formula line
let line = line('.') - s:RowGap()
if tablemode#IsATableHeader(line) | let line -= s:RowGap() | endif
if tablemode#IsATableRow(line)
let exprs = split(matchstr(getline('.'), matchexpr), ';')
endif

View File

@@ -1,7 +1,7 @@
*table-mode.txt* Table Mode for easy table formatting. v3.3.2
*table-mode.txt* Table Mode for easy table formatting. v3.1
===============================================================================
Table Mode, THE AWESOME AUTOMATIC TABLE CREATOR & FORMATTER
VERSION 3.3.2
VERSION 3.1
Author: Dhruva Sagar <http://dhruvasagar.com/>
License: MIT <http://opensource.org/licenses/MIT/>
@@ -29,7 +29,7 @@ GETTING STARTED *table-mode-getting-started*
Create Table on the fly:
Using Table Mode is dead simple. You simply start typing on a new line
with the table separator - |table-mode-separator|, and you just type
with the table separator - |g:table-mode-separator|, and you just type
away! The plugin does the rest automatically for you as you type. With
each additional separator you add, it aligns the table properly,
without having to do anything else.
@@ -272,12 +272,6 @@ g:table_mode_eval_expr_map *table-mode-eval-expr-map*
NOTE you will need to use the |table-mode-map-prefix| before this to
get the desired effect.
g:table_mode_echo_cell_map *table-mode-echo-cell-map*
Use this option to define the mapping for echoing current cells
representation for defining formulas. >
let g:table_mode_echo_cell_map = '?'
<
===============================================================================
MAPPINGS *table-mode-mappings*
@@ -306,9 +300,6 @@ MAPPINGS *table-mode-mappings*
*table-mode-mappings-realign*
<Leader>tr Realigns table columns
<Leader>t? Echo the current table cells representation for defining
formulas.
*table-mode-mappings-motions*
<Leader>t[hjkl] Move to previous | below | above | right cell in the table.
@@ -332,9 +323,11 @@ MAPPINGS *table-mode-mappings*
would evaluate the formula line and update the table
accordingly. This invokes the |TableEvalFormulaLine| command.
|| Expands to a header border, the line immidiately above or
below this will be considered as the table header. You can
change this by changing |table-mode-separator| options.
+- Expands to a header border, the line immidiately above this
will be considered as the table header. You can change this by
changing |table-mode-corner| and |table-mode-fillchar|
options. This is an iabbrev so is triggered when you press
space or <CR> after typing the mapping.
===============================================================================
COMMANDS *table-mode-commands*
@@ -406,4 +399,4 @@ REPORT ISSUES *table-mode-report-issues*
If you discover any issues, please report them at
http://github.com/dhruvasagar/table-mode/issues.
vim:tw=78:ts=8:ft=help:norl:ai:et
vim:tw=78:ts=8:ft=help:norl:ai

View File

@@ -4,9 +4,10 @@
" Author: Dhruva Sagar <http://dhruvasagar.com/>
" License: MIT (http://www.opensource.org/licenses/MIT)
" Website: http://github.com/dhruvasagar/vim-table-mode
" Version: 3.3.2
" Version: 3.1
" Note: This plugin was heavily inspired by the 'CucumberTables.vim'
" (https://gist.github.com/tpope/287147) plugin by Tim Pope.
" (https://gist.github.com/tpope/287147) plugin by Tim Pope and
" uses a small amount of code from it.
"
" Copyright Notice:
" Permission is hereby granted to use and distribute this code,
@@ -50,7 +51,6 @@ call s:SetGlobalOptDefault('table_mode_delete_row_map', 'dd')
call s:SetGlobalOptDefault('table_mode_delete_column_map', 'dc')
call s:SetGlobalOptDefault('table_mode_add_formula_map', 'fa')
call s:SetGlobalOptDefault('table_mode_eval_expr_map', 'fe')
call s:SetGlobalOptDefault('table_mode_echo_cell_map', '?')
function! s:TableMotion() "{{{1
let direction = nr2char(getchar())
@@ -59,12 +59,6 @@ function! s:TableMotion() "{{{1
endfor
endfunction
function! s:TableEchoCell() "{{{1
if tablemode#IsATableRow('.')
echomsg '$' . tablemode#RowNr('.') . ',' . tablemode#ColumnNr('.')
endif
endfunction
" Define Commands & Mappings {{{1
if !g:table_mode_always_active "{{{2
exec "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_toggle_map .
@@ -108,8 +102,6 @@ execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_add_formul
\ " :TableAddFormula<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_eval_expr_map .
\ " :TableEvalFormulaLine<CR>"
execute "nnoremap <silent> " . g:table_mode_map_prefix . g:table_mode_echo_cell_map .
\ " :call <SID>TableEchoCell()<CR>"
" Avoiding side effects {{{1
let &cpo = s:save_cpo

View File

@@ -1,252 +0,0 @@
" vim: fdm=indent
let g:table_mode_corner = '+'
let g:table_mode_separator = '|'
let g:table_mode_fillchar = '-'
let g:table_mode_map_prefix = '<Leader>t'
let g:table_mode_toggle_map = 'm'
let g:table_mode_always_active = 0
let g:table_mode_delimiter = ','
let g:table_mode_tableize_map = 't'
let g:table_mode_tableize_op_map = '<Leader>T'
let g:table_mode_realign_map = 'r'
let g:table_mode_cell_text_object = 'tc'
let g:table_mode_delete_row_map = 'dd'
let g:table_mode_delete_column_map = 'dc'
let g:table_mode_add_formula_map = 'fa'
let g:table_mode_eval_expr_map = 'fe'
call vspec#hint({'scope': 'tablemode#scope()', 'sid': 'tablemode#sid()'})
describe 'tablemode'
describe 'Activation'
describe 'tablemode#TableModeEnable()'
before
call tablemode#TableModeEnable()
end
it 'should enable table mode'
Expect b:table_mode_active to_be_true
end
end
describe 'tablemode#TableModeDisable()'
before
call tablemode#TableModeDisable()
end
it 'should disable table mode'
Expect b:table_mode_active to_be_false
end
end
describe 'tablemode#TableModeToggle()'
it 'should toggle table mode'
call tablemode#TableModeToggle()
Expect b:table_mode_active to_be_true
call tablemode#TableModeToggle()
Expect b:table_mode_active to_be_false
end
end
end
describe 'API'
before
new
normal! ggdG
call tablemode#TableModeEnable()
normal i
|test11|test12|
|test21|test22|
end
it 'should return true when inside a table'
Expect tablemode#IsATableRow(2) to_be_true
end
it 'should return false when outside a table'
Expect tablemode#IsATableRow(4) to_be_false
end
it 'should return the row count'
Expect tablemode#RowCount(2) == 2
Expect tablemode#RowCount(3) == 2
end
it 'should return the row number'
Expect tablemode#RowNr(2) == 1
Expect tablemode#RowNr(3) == 2
end
it 'should return the column count'
Expect tablemode#ColumnCount(2) == 2
Expect tablemode#ColumnCount(3) == 2
end
it 'should return the line number of the first row'
Expect tablemode#GetFirstRow(2) == 2
Expect tablemode#GetFirstRow(3) == 2
end
it 'should return the line nuber of the last row'
Expect tablemode#GetLastRow(2) == 3
Expect tablemode#GetLastRow(3) == 3
end
it 'should return the cells'
Expect Call('s:GetCells', 2, 1, 1) ==# 'test11'
" Get Rows
Expect Call('s:GetCells', 2, 1) == ['test11', 'test12']
Expect Call('s:GetCells', 2, 2) == ['test21', 'test22']
" Get Columns
Expect Call('s:GetCells', 2, 0, 1) == ['test11', 'test21']
Expect Call('s:GetCells', 2, 0, 2) == ['test12', 'test22']
end
it 'should return the cells in a range'
" Entire table as range
Expect Call('s:GetCellRange', '1,1:2,2', 2, 1) == [['test11', 'test21'], ['test12', 'test22']]
" Get Rows given different seed lines and columns
Expect Call('s:GetCellRange', '1,1:1,2', 2, 1) == ['test11', 'test12']
Expect Call('s:GetCellRange', '1,1:1,2', 2, 2) == ['test11', 'test12']
Expect Call('s:GetCellRange', '1,1:1,2', 3, 1) == ['test11', 'test12']
Expect Call('s:GetCellRange', '1,1:1,2', 3, 2) == ['test11', 'test12']
Expect Call('s:GetCellRange', '2,1:2,2', 2, 1) == ['test21', 'test22']
Expect Call('s:GetCellRange', '2,1:2,2', 2, 2) == ['test21', 'test22']
Expect Call('s:GetCellRange', '2,1:2,2', 3, 1) == ['test21', 'test22']
Expect Call('s:GetCellRange', '2,1:2,2', 3, 2) == ['test21', 'test22']
" Get Columns given different seed lines and column
Expect Call('s:GetCellRange', '1:2', 2, 1) == ['test11', 'test21']
Expect Call('s:GetCellRange', '1:2', 2, 2) == ['test12', 'test22']
Expect Call('s:GetCellRange', '1:2', 3, 1) == ['test11', 'test21']
Expect Call('s:GetCellRange', '1:2', 3, 2) == ['test12', 'test22']
" Get Column given negative values in range for representing rows from
" the end, -1 being the second last row.
Expect Call('s:GetCellRange', '1:-1', 2, 1) == ['test11']
Expect Call('s:GetCellRange', '1:-1', 3, 1) == ['test11']
Expect Call('s:GetCellRange', '1:-1', 2, 2) == ['test12']
Expect Call('s:GetCellRange', '1:-1', 3, 2) == ['test12']
end
end
describe 'Tableize'
before
new
normal! ggdG
normal i
asd,asd;asd,asd
asd,asd;asd,asd
end
it 'should tableize with default delimiter'
:2,3call tablemode#TableizeRange('')
Expect tablemode#IsATableRow(2) to_be_true
Expect tablemode#RowCount(2) == 2
Expect tablemode#ColumnCount(2) == 3
end
it 'should tableize with given delimiter'
:2,3call tablemode#TableizeRange('/;')
Expect tablemode#IsATableRow(2) to_be_true
Expect tablemode#RowCount(2) == 2
Expect tablemode#ColumnCount(2) == 2
end
end
describe 'Motions'
describe 'left or right'
before
new
normal! ggdG
call tablemode#TableModeEnable()
normal i|test11|test12|
|test21|test22|
call cursor(1, 3)
end
it 'should move left when not on first column'
call cursor(1, 12)
Expect tablemode#ColumnNr('.') == 2
call tablemode#TableMotion('h')
Expect tablemode#ColumnNr('.') == 1
end
it 'should move to the previous row last column if it exists when on first column'
call cursor(2, 3)
Expect tablemode#RowNr('.') == 2
Expect tablemode#ColumnNr('.') == 1
call tablemode#TableMotion('h')
Expect tablemode#RowNr('.') == 1
Expect tablemode#ColumnNr('.') == 2
end
it 'should move right when not on last column'
Expect tablemode#ColumnNr('.') == 1
call tablemode#TableMotion('l')
Expect tablemode#ColumnNr('.') == 2
end
it 'should move to the next row first column if it exists when on last column'
call cursor(1, 12)
Expect tablemode#RowNr('.') == 1
Expect tablemode#ColumnNr('.') == 2
call tablemode#TableMotion('l')
Expect tablemode#RowNr('.') == 2
Expect tablemode#ColumnNr('.') == 1
end
end
describe 'up or down'
before
new
normal! ggdG
call tablemode#TableModeEnable()
normal i|test11|test12|
|test21|test22|
call cursor(1, 3)
end
it 'should move a row up unless on first row'
call cursor(2, 3)
Expect tablemode#RowNr('.') == 2
call tablemode#TableMotion('k')
Expect tablemode#RowNr('.') == 1
end
it 'should remain on first row when trying to move up'
Expect tablemode#RowNr('.') == 1
call tablemode#TableMotion('k')
Expect tablemode#RowNr('.') == 1
end
it 'should move a row down unless on last row'
Expect tablemode#RowNr('.') == 1
call tablemode#TableMotion('j')
Expect tablemode#RowNr('.') == 2
end
it 'should remain on last row when trying to move down'
Expect tablemode#RowNr('.') == 1
call tablemode#TableMotion('k')
Expect tablemode#RowNr('.') == 1
end
end
end
describe 'Manipulations'
before
new
normal! ggdG
normal i|test11|test12|
|test21|test22|
call cursor(1, 3)
end
it 'should delete a row successfully'
Expect tablemode#RowCount('.') == 2
call tablemode#DeleteRow()
Expect tablemode#RowCount('.') == 1
end