@@ -79,7 +79,7 @@ def __init__(self, session, channel_id, metadata, types,
79
79
self .vars = RemoteMap (self , 'vim_get_var' , 'vim_set_var' )
80
80
self .vvars = RemoteMap (self , 'vim_get_vvar' , None )
81
81
self .options = RemoteMap (self , 'vim_get_option' , 'vim_set_option' )
82
- self .buffers = RemoteSequence (self , 'vim_get_buffers' )
82
+ self .buffers = Buffers (self )
83
83
self .windows = RemoteSequence (self , 'vim_get_windows' )
84
84
self .tabpages = RemoteSequence (self , 'vim_get_tabpages' )
85
85
self .current = Current (self )
@@ -331,6 +331,41 @@ def handler():
331
331
self ._session .threadsafe_call (handler )
332
332
333
333
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
+
334
369
class CompatibilitySession (object ):
335
370
336
371
"""Helper class for API compatibility."""
0 commit comments