10
10
basestring = str
11
11
12
12
13
+ def adjust_index (idx , default = None ):
14
+ """Convert from python indexing convention to nvim indexing convention."""
15
+ if idx is None :
16
+ return default
17
+ elif idx < 0 :
18
+ return idx - 1
19
+ else :
20
+ return idx
21
+
22
+
13
23
class Buffer (Remote ):
14
24
15
25
"""A remote Nvim buffer."""
@@ -31,19 +41,13 @@ def __getitem__(self, idx):
31
41
the whole buffer.
32
42
"""
33
43
if not isinstance (idx , slice ):
34
- return self ._session .request ('buffer_get_line' , self , idx )
35
- include_end = False
36
- start = idx .start
37
- end = idx .stop
38
- if start is None :
39
- start = 0
40
- if end is None :
41
- end = - 1
42
- include_end = True
43
- return self ._session .request ('buffer_get_line_slice' , self , start , end ,
44
- True , include_end )
44
+ i = adjust_index (idx )
45
+ return self .request ('buffer_get_lines' , i , i + 1 , True )[0 ]
46
+ start = adjust_index (idx .start , 0 )
47
+ end = adjust_index (idx .stop , - 1 )
48
+ return self .request ('buffer_get_lines' , start , end , False )
45
49
46
- def __setitem__ (self , idx , lines ):
50
+ def __setitem__ (self , idx , item ):
47
51
"""Replace a buffer line or slice by integer index.
48
52
49
53
Like with `__getitem__`, indexes may be negative.
@@ -52,23 +56,13 @@ def __setitem__(self, idx, lines):
52
56
the whole buffer.
53
57
"""
54
58
if not isinstance (idx , slice ):
55
- if lines is None :
56
- return self ._session .request ('buffer_del_line' , self , idx )
57
- else :
58
- return self ._session .request ('buffer_set_line' , self , idx ,
59
- lines )
60
- if lines is None :
61
- lines = []
62
- include_end = False
63
- start = idx .start
64
- end = idx .stop
65
- if start is None :
66
- start = 0
67
- if end is None :
68
- end = - 1
69
- include_end = True
70
- return self ._session .request ('buffer_set_line_slice' , self , start , end ,
71
- True , include_end , lines )
59
+ i = adjust_index (idx )
60
+ lines = [item ] if item is not None else []
61
+ return self .request ('buffer_set_lines' , i , i + 1 , True , lines )
62
+ lines = item if item is not None else []
63
+ start = adjust_index (idx .start , 0 )
64
+ end = adjust_index (idx .stop , - 1 )
65
+ return self .request ('buffer_set_lines' , start , end , False , lines )
72
66
73
67
def __iter__ (self ):
74
68
"""Iterate lines of a buffer.
@@ -87,26 +81,13 @@ def __delitem__(self, idx):
87
81
88
82
This is the same as __setitem__(idx, [])
89
83
"""
90
- if not isinstance (idx , slice ):
91
- self .__setitem__ (idx , None )
92
- else :
93
- self .__setitem__ (idx , [])
94
-
95
- def get_line_slice (self , start , stop , start_incl , end_incl ):
96
- """More flexible wrapper for retrieving slices."""
97
- return self ._session .request ('buffer_get_line_slice' , self , start ,
98
- stop , start_incl , end_incl )
99
-
100
- def set_line_slice (self , start , stop , start_incl , end_incl , lines ):
101
- """More flexible wrapper for replacing slices."""
102
- return self ._session .request ('buffer_set_line_slice' , self , start ,
103
- stop , start_incl , end_incl , lines )
84
+ self .__setitem__ (idx , None )
104
85
105
86
def append (self , lines , index = - 1 ):
106
87
"""Append a string or list of lines to the buffer."""
107
88
if isinstance (lines , (basestring , bytes )):
108
89
lines = [lines ]
109
- return self ._session . request ('buffer_insert ' , self , index , lines )
90
+ return self .request ('buffer_set_lines ' , index , index , True , lines )
110
91
111
92
def mark (self , name ):
112
93
"""Return (row, col) tuple for a named mark."""
0 commit comments