bairui

BufferList object

Sep 23rd, 2011
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VIM 1.91 KB | None | 0 0
  1. " BufferList object
  2. " ARB
  3. " version 0.3
  4.  
  5. function! BufferList()
  6.   let list = {}
  7.   let list.list = {}
  8.   let list.current = 0
  9.   let list.alternate = 0
  10.  
  11.   " public interface
  12.  
  13.   func list.update() dict
  14.     redir => bufliststr
  15.     silent! ls
  16.     redir END
  17.  
  18.     let bufferlist = map(
  19.           \ map(split(bufliststr, '\n'), 'split(v:val, "\\s\\+")'),
  20.           \ '{"number": v:val[0],'
  21.           \  . '"line": v:val[4],'
  22.           \  . '"name": v:val[2],'
  23.           \  . '"current": v:val[1] =~ "%",'
  24.           \  . '"alternate": v:val[1] =~ "#",'
  25.           \  . '"active": v:val[1] =~ "a",'
  26.           \  . '"hidden": v:val[1] =~ "h"}')
  27.  
  28.     let self.list = bufferlist
  29.     let self.current = sort(copy(bufferlist), 'SortByCurrent')[0]['number']
  30.     let self.alternate = sort(copy(bufferlist), 'SortByAlternate')[0]['number']
  31.   endfun
  32.  
  33.   func list.to_s() dict
  34.     let str = ''
  35.     for bfr in self.list
  36.       let str .= printf("%3d %c%c \"%s\" line %d\n",
  37.             \ bfr['number'], self.buffer_type(bfr),
  38.             \ self.buffer_status(bfr), bfr['name'], bfr['line'])
  39.     endfor
  40.     return str
  41.   endfunc
  42.  
  43.   " Private functions - don't need 'dict' modifier
  44.  
  45.   func list.buffer_status(b)
  46.     return a:b['active'] == 1 ? 'a' : a:b['hidden'] == 1 ? 'h' : '!'
  47.   endfunc
  48.   func list.buffer_type(b)
  49.     return a:b['current'] == 1 ? '%' : a:b['alternate'] == 1 ? '#' : ' '
  50.   endfunc
  51.  
  52.   func list.SortByCurrent(b1, b2)
  53.     return a:b1['current'] == a:b2['current'] ? 0 : a:b1['current'] < a:b2['current'] ? 1 : -1
  54.   endfunc
  55.  
  56.   func list.SortByAlternate(b1, b2)
  57.     return a:b1['alternate'] == a:b2['alternate'] ? 0 : a:b1['alternate'] < a:b2['alternate'] ? 1 : -1
  58.   endfunc
  59.  
  60.   " constructor
  61.  
  62.   call list.update()
  63.   return list
  64. endfunction
  65.  
  66. let bl = BufferList()
  67. call bl.update()      " not necessary here, just showing it's callable
  68. echo bl.list
  69. echo bl.current
  70. echo bl.alternate
  71. echo bl.to_s()
Advertisement
Add Comment
Please, Sign In to add comment