Skip to content

Commit a5e3d2d

Browse files
authored
Merge pull request #232 from bfredl/newapi
update to api level 1
2 parents f8d0c1f + ba1fcd4 commit a5e3d2d

File tree

8 files changed

+97
-64
lines changed

8 files changed

+97
-64
lines changed

neovim/__init__.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,18 @@
1212
stdio_session, tcp_session)
1313
from .plugin import (Host, autocmd, command, decode, encoding, function,
1414
plugin, rpc_export, shutdown_hook)
15+
from .util import Version
1516

1617

1718
__all__ = ('tcp_session', 'socket_session', 'stdio_session', 'child_session',
1819
'start_host', 'autocmd', 'command', 'encoding', 'decode',
19-
'function', 'plugin', 'rpc_export', 'Host', 'Nvim',
20+
'function', 'plugin', 'rpc_export', 'Host', 'Nvim', 'VERSION',
2021
'shutdown_hook', 'attach', 'setup_logging', 'ErrorResponse')
2122

2223

24+
VERSION = Version(major=0, minor=1, patch=11, prerelease="dev")
25+
26+
2327
def start_host(session=None):
2428
"""Promote the current process into python plugin host for Nvim.
2529
@@ -64,7 +68,14 @@ def start_host(session=None):
6468

6569
if not session:
6670
session = stdio_session()
67-
host = Host(Nvim.from_session(session))
71+
nvim = Nvim.from_session(session)
72+
73+
if nvim.version.api_level < 1:
74+
sys.stderr.write("This version of the neovim python package "
75+
"requires nvim 0.1.6 or later")
76+
sys.exit(1)
77+
78+
host = Host(nvim)
6879
host.start(plugins)
6980

7081

neovim/api/buffer.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class Buffer(Remote):
2424

2525
"""A remote Nvim buffer."""
2626

27-
_api_prefix = "buffer_"
27+
_api_prefix = "nvim_buf_"
2828

2929
def __len__(self):
3030
"""Return the number of lines contained in a Buffer."""
@@ -42,10 +42,10 @@ def __getitem__(self, idx):
4242
"""
4343
if not isinstance(idx, slice):
4444
i = adjust_index(idx)
45-
return self.request('buffer_get_lines', i, i + 1, True)[0]
45+
return self.request('nvim_buf_get_lines', i, i + 1, True)[0]
4646
start = adjust_index(idx.start, 0)
4747
end = adjust_index(idx.stop, -1)
48-
return self.request('buffer_get_lines', start, end, False)
48+
return self.request('nvim_buf_get_lines', start, end, False)
4949

5050
def __setitem__(self, idx, item):
5151
"""Replace a buffer line or slice by integer index.
@@ -58,7 +58,7 @@ def __setitem__(self, idx, item):
5858
if not isinstance(idx, slice):
5959
i = adjust_index(idx)
6060
lines = [item] if item is not None else []
61-
return self.request('buffer_set_lines', i, i + 1, True, lines)
61+
return self.request('nvim_buf_set_lines', i, i + 1, True, lines)
6262
lines = item if item is not None else []
6363
start = adjust_index(idx.start, 0)
6464
end = adjust_index(idx.stop, -1)
@@ -87,11 +87,11 @@ def append(self, lines, index=-1):
8787
"""Append a string or list of lines to the buffer."""
8888
if isinstance(lines, (basestring, bytes)):
8989
lines = [lines]
90-
return self.request('buffer_set_lines', index, index, True, lines)
90+
return self.request('nvim_buf_set_lines', index, index, True, lines)
9191

9292
def mark(self, name):
9393
"""Return (row, col) tuple for a named mark."""
94-
return self.request('buffer_get_mark', name)
94+
return self.request('nvim_buf_get_mark', name)
9595

9696
def range(self, start, end):
9797
"""Return a `Range` object, which represents part of the Buffer."""
@@ -102,33 +102,33 @@ def add_highlight(self, hl_group, line, col_start=0,
102102
"""Add a highlight to the buffer."""
103103
if async is None:
104104
async = (src_id != 0)
105-
return self.request('buffer_add_highlight', src_id, hl_group,
105+
return self.request('nvim_buf_add_highlight', src_id, hl_group,
106106
line, col_start, col_end, async=async)
107107

108108
def clear_highlight(self, src_id, line_start=0, line_end=-1, async=True):
109109
"""Clear highlights from the buffer."""
110-
self.request('buffer_clear_highlight', src_id,
110+
self.request('nvim_buf_clear_highlight', src_id,
111111
line_start, line_end, async=async)
112112

113113
@property
114114
def name(self):
115115
"""Get the buffer name."""
116-
return self.request('buffer_get_name')
116+
return self.request('nvim_buf_get_name')
117117

118118
@name.setter
119119
def name(self, value):
120120
"""Set the buffer name. BufFilePre/BufFilePost are triggered."""
121-
return self.request('buffer_set_name', value)
121+
return self.request('nvim_buf_set_name', value)
122122

123123
@property
124124
def valid(self):
125125
"""Return True if the buffer still exists."""
126-
return self.request('buffer_is_valid')
126+
return self.request('nvim_buf_is_valid')
127127

128128
@property
129129
def number(self):
130130
"""Get the buffer number."""
131-
return self.request('buffer_get_number')
131+
return self.request('nvim_buf_get_number')
132132

133133

134134
class Range(object):

neovim/api/nvim.py

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from .tabpage import Tabpage
1414
from .window import Window
1515
from ..compat import IS_PYTHON3
16-
from ..util import format_exc_skip
16+
from ..util import Version, format_exc_skip
1717

1818
__all__ = ('Nvim')
1919

@@ -74,14 +74,16 @@ def __init__(self, session, channel_id, metadata, types,
7474
self._session = session
7575
self.channel_id = channel_id
7676
self.metadata = metadata
77+
version = metadata.get("version", {"api_level": 0})
78+
self.version = Version(**version)
7779
self.types = types
78-
self.api = RemoteApi(self, 'vim_')
79-
self.vars = RemoteMap(self, 'vim_get_var', 'vim_set_var')
80+
self.api = RemoteApi(self, 'nvim_')
81+
self.vars = RemoteMap(self, 'nvim_get_var', 'nvim_set_var')
8082
self.vvars = RemoteMap(self, 'vim_get_vvar', None)
81-
self.options = RemoteMap(self, 'vim_get_option', 'vim_set_option')
83+
self.options = RemoteMap(self, 'nvim_get_option', 'nvim_set_option')
8284
self.buffers = Buffers(self)
83-
self.windows = RemoteSequence(self, 'vim_get_windows')
84-
self.tabpages = RemoteSequence(self, 'vim_get_tabpages')
85+
self.windows = RemoteSequence(self, 'nvim_list_wins')
86+
self.tabpages = RemoteSequence(self, 'nvim_list_tabpages')
8587
self.current = Current(self)
8688
self.session = CompatibilitySession(self)
8789
self.funcs = Funcs(self)
@@ -116,8 +118,8 @@ def request(self, name, *args, **kwargs):
116118
117119
is equivalent to
118120
119-
vim.request('vim_err_write', 'ERROR\n', async=True)
120-
vim.request('buffer_get_mark', vim.current.buffer, '.')
121+
vim.request('nvim_err_write', 'ERROR\n', async=True)
122+
vim.request('nvim_buf_get_mark', vim.current.buffer, '.')
121123
122124
123125
Normally a blocking request will be sent. If the `async` flag is
@@ -205,38 +207,38 @@ def ui_try_resize(self, width, height):
205207

206208
def subscribe(self, event):
207209
"""Subscribe to a Nvim event."""
208-
return self.request('vim_subscribe', event)
210+
return self.request('nvim_subscribe', event)
209211

210212
def unsubscribe(self, event):
211213
"""Unsubscribe to a Nvim event."""
212-
return self.request('vim_unsubscribe', event)
214+
return self.request('nvim_unsubscribe', event)
213215

214216
def command(self, string, **kwargs):
215217
"""Execute a single ex command."""
216-
return self.request('vim_command', string, **kwargs)
218+
return self.request('nvim_command', string, **kwargs)
217219

218220
def command_output(self, string):
219221
"""Execute a single ex command and return the output."""
220-
return self.request('vim_command_output', string)
222+
return self.request('nvim_command_output', string)
221223

222224
def eval(self, string, **kwargs):
223225
"""Evaluate a vimscript expression."""
224-
return self.request('vim_eval', string, **kwargs)
226+
return self.request('nvim_eval', string, **kwargs)
225227

226228
def call(self, name, *args, **kwargs):
227229
"""Call a vimscript function."""
228-
return self.request('vim_call_function', name, args, **kwargs)
230+
return self.request('nvim_call_function', name, args, **kwargs)
229231

230232
def strwidth(self, string):
231233
"""Return the number of display cells `string` occupies.
232234
233235
Tab is counted as one cell.
234236
"""
235-
return self.request('vim_strwidth', string)
237+
return self.request('nvim_strwidth', string)
236238

237239
def list_runtime_paths(self):
238240
"""Return a list of paths contained in the 'runtimepath' option."""
239-
return self.request('vim_list_runtime_paths')
241+
return self.request('nvim_list_runtime_paths')
240242

241243
def foreach_rtp(self, cb):
242244
"""Invoke `cb` for each path in 'runtimepath'.
@@ -246,7 +248,7 @@ def foreach_rtp(self, cb):
246248
are no longer paths. If stopped in case callable returned non-None,
247249
vim.foreach_rtp function returns the value returned by callable.
248250
"""
249-
for path in self.request('vim_list_runtime_paths'):
251+
for path in self.request('nvim_list_runtime_paths'):
250252
try:
251253
if cb(path) is not None:
252254
break
@@ -256,7 +258,7 @@ def foreach_rtp(self, cb):
256258
def chdir(self, dir_path):
257259
"""Run os.chdir, then all appropriate vim stuff."""
258260
os_chdir(dir_path)
259-
return self.request('vim_change_directory', dir_path)
261+
return self.request('nvim_set_current_dir', dir_path)
260262

261263
def feedkeys(self, keys, options='', escape_csi=True):
262264
"""Push `keys` to Nvim user input buffer.
@@ -267,7 +269,7 @@ def feedkeys(self, keys, options='', escape_csi=True):
267269
- 't': Handle keys as if typed; otherwise they are handled as if coming
268270
from a mapping. This matters for undo, opening folds, etc.
269271
"""
270-
return self.request('vim_feedkeys', keys, options, escape_csi)
272+
return self.request('nvim_feedkeys', keys, options, escape_csi)
271273

272274
def input(self, bytes):
273275
"""Push `bytes` to Nvim low level input buffer.
@@ -277,7 +279,7 @@ def input(self, bytes):
277279
written(which can be less than what was requested if the buffer is
278280
full).
279281
"""
280-
return self.request('vim_input', bytes)
282+
return self.request('nvim_input', bytes)
281283

282284
def replace_termcodes(self, string, from_part=False, do_lt=True,
283285
special=True):
@@ -298,11 +300,11 @@ def replace_termcodes(self, string, from_part=False, do_lt=True,
298300

299301
def out_write(self, msg):
300302
"""Print `msg` as a normal message."""
301-
return self.request('vim_out_write', msg)
303+
return self.request('nvim_out_write', msg)
302304

303305
def err_write(self, msg, **kwargs):
304306
"""Print `msg` as an error message."""
305-
return self.request('vim_err_write', msg, **kwargs)
307+
return self.request('nvim_err_write', msg, **kwargs)
306308

307309
def quit(self, quit_command='qa!'):
308310
"""Send a quit command to Nvim.
@@ -359,7 +361,7 @@ class Buffers(object):
359361

360362
def __init__(self, nvim):
361363
"""Initialize a Buffers object with Nvim object `nvim`."""
362-
self._fetch_buffers = nvim.api.get_buffers
364+
self._fetch_buffers = nvim.api.list_bufs
363365

364366
def __len__(self):
365367
"""Return the count of buffers."""
@@ -399,35 +401,35 @@ def __init__(self, session):
399401

400402
@property
401403
def line(self):
402-
return self._session.request('vim_get_current_line')
404+
return self._session.request('nvim_get_current_line')
403405

404406
@line.setter
405407
def line(self, line):
406-
return self._session.request('vim_set_current_line', line)
408+
return self._session.request('nvim_set_current_line', line)
407409

408410
@property
409411
def buffer(self):
410-
return self._session.request('vim_get_current_buffer')
412+
return self._session.request('nvim_get_current_buf')
411413

412414
@buffer.setter
413415
def buffer(self, buffer):
414-
return self._session.request('vim_set_current_buffer', buffer)
416+
return self._session.request('nvim_set_current_buf', buffer)
415417

416418
@property
417419
def window(self):
418-
return self._session.request('vim_get_current_window')
420+
return self._session.request('nvim_get_current_win')
419421

420422
@window.setter
421423
def window(self, window):
422-
return self._session.request('vim_set_current_window', window)
424+
return self._session.request('nvim_set_current_win', window)
423425

424426
@property
425427
def tabpage(self):
426-
return self._session.request('vim_get_current_tabpage')
428+
return self._session.request('nvim_get_current_tabpage')
427429

428430
@tabpage.setter
429431
def tabpage(self, tabpage):
430-
return self._session.request('vim_set_current_tabpage', tabpage)
432+
return self._session.request('nvim_set_current_tabpage', tabpage)
431433

432434

433435
class Funcs(object):

neovim/api/tabpage.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
class Tabpage(Remote):
99
"""A remote Nvim tabpage."""
1010

11-
_api_prefix = "tabpage_"
11+
_api_prefix = "nvim_tabpage_"
1212

1313
def __init__(self, *args):
1414
"""Initialize from session and code_data immutable object.
@@ -17,17 +17,17 @@ def __init__(self, *args):
1717
msgpack-rpc calls. It must be immutable for Buffer equality to work.
1818
"""
1919
super(Tabpage, self).__init__(*args)
20-
self.windows = RemoteSequence(self, 'tabpage_get_windows')
20+
self.windows = RemoteSequence(self, 'nvim_tabpage_list_wins')
2121

2222
@property
2323
def window(self):
2424
"""Get the `Window` currently focused on the tabpage."""
25-
return self.request('tabpage_get_window')
25+
return self.request('nvim_tabpage_get_win')
2626

2727
@property
2828
def valid(self):
2929
"""Return True if the tabpage still exists."""
30-
return self.request('tabpage_is_valid')
30+
return self.request('nvim_tabpage_is_valid')
3131

3232
@property
3333
def number(self):

0 commit comments

Comments
 (0)