mirror of
https://github.com/dhruvasagar/vim-table-mode.git
synced 2025-11-08 11:03:47 -05:00
Added support for negative indices
When defining formulas you can now use negative indices for target / cells to refer to them relative to the last. -1 being the last and so on.
This commit is contained in:
@@ -81,6 +81,7 @@ function! tablemode#spreadsheet#cell#GetCells(line, ...) abort
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let first_row = tablemode#spreadsheet#GetFirstRow(line)
|
let first_row = tablemode#spreadsheet#GetFirstRow(line)
|
||||||
|
let last_row = tablemode#spreadsheet#GetLastRow(line)
|
||||||
if row == 0
|
if row == 0
|
||||||
let values = []
|
let values = []
|
||||||
let line = first_row
|
let line = first_row
|
||||||
@@ -94,13 +95,14 @@ function! tablemode#spreadsheet#cell#GetCells(line, ...) abort
|
|||||||
return values
|
return values
|
||||||
else
|
else
|
||||||
let row_nr = 0
|
let row_nr = 0
|
||||||
let line = first_row
|
let row_diff = row > 0 ? 1 : -1
|
||||||
|
let line = row > 0 ? first_row : last_row
|
||||||
while tablemode#table#IsRow(line) || tablemode#table#IsHeader(line)
|
while tablemode#table#IsRow(line) || tablemode#table#IsHeader(line)
|
||||||
if tablemode#table#IsRow(line)
|
if tablemode#table#IsRow(line)
|
||||||
let row_nr += 1
|
let row_nr += row_diff
|
||||||
if row ==# row_nr | break | endif
|
if row ==# row_nr | break | endif
|
||||||
endif
|
endif
|
||||||
let line += 1
|
let line += row_diff
|
||||||
endwhile
|
endwhile
|
||||||
|
|
||||||
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
|
let row_line = getline(line)[stridx(getline(line), g:table_mode_separator):strridx(getline(line), g:table_mode_separator)]
|
||||||
@@ -193,6 +195,10 @@ function! tablemode#spreadsheet#cell#SetCell(val, ...) "{{{2
|
|||||||
let [line, row, colm] = a:000
|
let [line, row, colm] = a:000
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Account for negative values to reference from relatively from the last
|
||||||
|
if row < 0 | let row = tablemode#spreadsheet#RowCount(line) + row + 1 | endif
|
||||||
|
if colm < 0 | let colm = tablemode#spreadsheet#ColumnCount(line) + colm + 1 | endif
|
||||||
|
|
||||||
if tablemode#table#IsRow(line)
|
if tablemode#table#IsRow(line)
|
||||||
let line = tablemode#utils#line(line) + (row - tablemode#spreadsheet#RowNr(line)) * 1
|
let line = tablemode#utils#line(line) + (row - tablemode#spreadsheet#RowNr(line)) * 1
|
||||||
let line_val = getline(line)
|
let line_val = getline(line)
|
||||||
|
|||||||
Reference in New Issue
Block a user