Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Use strdisplaywidth where available

In vim 7.3, the strdisplaywidth function was added to give an accurate
count of the number of screen columns that will be taken up by a given
string.  Tabular was written before vim 7.3, and was implementing this
functionality itself (at least for tabs; it wasn't trying to handle
doublewide characters).

This changeset allows us to take advantage of strdisplaywidth where it
exists.
  • Loading branch information...
commit 7f6f1723a27fe3948ea7d2bb8465e3bf28f63f56 1 parent d3acca3
@godlygeek authored
Showing with 23 additions and 15 deletions.
  1. +23 −15 autoload/tabular.vim
View
38 autoload/tabular.vim
@@ -46,22 +46,30 @@ set cpo&vim
" Return the number of bytes in a string after expanding tabs to spaces. {{{2
" This expansion is done based on the current value of 'tabstop'
-function! s:Strlen(string)
- let rv = 0
- let i = 0
-
- for char in split(a:string, '\zs')
- if char == "\t"
- let rv += &ts - i
- let i = 0
- else
- let rv += 1
- let i = (i + 1) % &ts
- endif
- endfor
+if exists('*strdisplaywidth')
+ " Needs vim 7.3
+ let s:Strlen = function("strdisplaywidth")
+else
+ function! s:Strlen(string)
+ " Implement the tab handling part of strdisplaywidth for vim 7.2 and
+ " earlier - not much that can be done about handling doublewidth
+ " characters.
+ let rv = 0
+ let i = 0
+
+ for char in split(a:string, '\zs')
+ if char == "\t"
+ let rv += &ts - i
+ let i = 0
+ else
+ let rv += 1
+ let i = (i + 1) % &ts
+ endif
+ endfor
- return rv
-endfunction
+ return rv
+ endfunction
+endif
" Align a string within a field {{{2
" These functions do not trim leading and trailing spaces.
Please sign in to comment.
Something went wrong with that request. Please try again.