@@ -79,7 +79,7 @@ def __init__(self, session, channel_id, metadata, types,
7979 self .vars = RemoteMap (self , 'vim_get_var' , 'vim_set_var' )
8080 self .vvars = RemoteMap (self , 'vim_get_vvar' , None )
8181 self .options = RemoteMap (self , 'vim_get_option' , 'vim_set_option' )
82- self .buffers = RemoteSequence (self , 'vim_get_buffers' )
82+ self .buffers = Buffers (self )
8383 self .windows = RemoteSequence (self , 'vim_get_windows' )
8484 self .tabpages = RemoteSequence (self , 'vim_get_tabpages' )
8585 self .current = Current (self )
@@ -331,6 +331,41 @@ def handler():
331331 self ._session .threadsafe_call (handler )
332332
333333
334+ class Buffers (object ):
335+
336+ """Remote NVim buffers.
337+
338+ Currently the interface for interacting with remote NVim buffers is the
339+ `vim_get_buffers` msgpack-rpc function. Most methods fetch the list of
340+ buffers from NVim.
341+
342+ Conforms to *python-buffers*.
343+ """
344+
345+ def __init__ (self , nvim ):
346+ """Initialize a Buffers object with Nvim object `nvim`."""
347+ self ._fetch_buffers = nvim .api .get_buffers
348+
349+ def __len__ (self ):
350+ """Return the count of buffers."""
351+ return len (self ._fetch_buffers ())
352+
353+ def __getitem__ (self , number ):
354+ """Return the Buffer object matching buffer number `number`."""
355+ for b in self ._fetch_buffers ():
356+ if b .number == number :
357+ return b
358+ raise KeyError (number )
359+
360+ def __contains__ (self , b ):
361+ """Return whether Buffer `b` is a known valid buffer."""
362+ return isinstance (b , Buffer ) and b .valid
363+
364+ def __iter__ (self ):
365+ """Return an iterator over the list of buffers."""
366+ return iter (self ._fetch_buffers ())
367+
368+
334369class CompatibilitySession (object ):
335370
336371 """Helper class for API compatibility."""
0 commit comments