Skip to content

Commit

Permalink
LedgerAlign: correct when account name is too long
Browse files Browse the repository at this point in the history
When account names are too long, LedgerAlign was currupting the aligned
lines. This commit ensures that:

- In any case, if the account name is longer than the aligning column,
  the line is not corrupted and the amount is put at the end of the line
  (instead of putting it in the middle of the account name)

- In any case, it ensures that there is a minimum of 2 spaces between
  the account name and the amount.
  • Loading branch information
Mildred Ki'Lya committed Mar 14, 2019
1 parent 11a27b4 commit 4d1dcb9
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions autoload/ledger.vim
Original file line number Diff line number Diff line change
Expand Up @@ -333,9 +333,11 @@ function! s:findall(text, rx)
endf

" Move the cursor to the specified column, filling the line with spaces if necessary.
function! s:goto_col(pos)
exec "normal!" a:pos . "|"
let diff = a:pos - virtcol('.')
" Ensure that at least min_spaces are added, and go to the end of the line if
" the line is already too long
function! s:goto_col(pos, min_spaces)
exec "normal!" "$"
let diff = max([a:min_spaces, a:pos - virtcol('.')])
if diff > 0 | exec "normal!" diff . "a " | endif
endf

Expand Down Expand Up @@ -384,11 +386,10 @@ function! ledger#align_commodity()
endif
" Go to the column that allows us to align the decimal separator at g:ledger_align_at:
if pos > 0
call s:goto_col(g:ledger_align_at - pos - 1)
call s:goto_col(g:ledger_align_at - pos - 1, 2)
else
call s:goto_col(g:ledger_align_at - strdisplaywidth(rhs) - 2)
endif
" Append the part of the line that was previously removed:
call s:goto_col(g:ledger_align_at - strdisplaywidth(rhs) - 2, 2)
endif " Append the part of the line that was previously removed:
exe 'normal! a' . rhs
endif
endf!
Expand All @@ -404,11 +405,11 @@ function! ledger#align_amount_at_cursor()
endif
" Paste text at the correct column and append/prepend default commodity:
if g:ledger_commodity_before
call s:goto_col(g:ledger_align_at - pos - len(g:ledger_default_commodity) - len(g:ledger_commodity_sep) - 1)
call s:goto_col(g:ledger_align_at - pos - len(g:ledger_default_commodity) - len(g:ledger_commodity_sep) - 1, 2)
exe 'normal! a' . g:ledger_default_commodity . g:ledger_commodity_sep
normal! p
else
call s:goto_col(g:ledger_align_at - pos - 1)
call s:goto_col(g:ledger_align_at - pos - 1, 2)
exe 'normal! pa' . g:ledger_commodity_sep . g:ledger_default_commodity
endif
endf!
Expand Down

0 comments on commit 4d1dcb9

Please sign in to comment.