nvim_rs/
neovim_api_manual.rs1use futures::io::AsyncWrite;
3use rmpv::Value;
4
5use crate::{
6 error::CallError, neovim::Neovim, rpc::model::IntoVal, Buffer, Tabpage,
7 Window,
8};
9
10impl<W> Neovim<W>
11where
12 W: AsyncWrite + Send + Unpin + 'static,
13{
14 pub async fn list_bufs(&self) -> Result<Vec<Buffer<W>>, Box<CallError>> {
15 match self.call("nvim_list_bufs", call_args![]).await?? {
16 Value::Array(arr) => Ok(
17 arr
18 .into_iter()
19 .map(|v| Buffer::new(v, self.clone()))
20 .collect(),
21 ),
22 val => Err(CallError::WrongValueType(val))?,
23 }
24 }
25
26 pub async fn get_current_buf(&self) -> Result<Buffer<W>, Box<CallError>> {
27 Ok(
28 self
29 .call("nvim_get_current_buf", call_args![])
30 .await?
31 .map(|val| Buffer::new(val, self.clone()))?,
32 )
33 }
34
35 pub async fn list_wins(&self) -> Result<Vec<Window<W>>, Box<CallError>> {
36 match self.call("nvim_list_wins", call_args![]).await?? {
37 Value::Array(arr) => Ok(
38 arr
39 .into_iter()
40 .map(|v| Window::new(v, self.clone()))
41 .collect(),
42 ),
43 val => Err(CallError::WrongValueType(val))?,
44 }
45 }
46
47 pub async fn get_current_win(&self) -> Result<Window<W>, Box<CallError>> {
48 Ok(
49 self
50 .call("nvim_get_current_win", call_args![])
51 .await?
52 .map(|val| Window::new(val, self.clone()))?,
53 )
54 }
55
56 pub async fn create_buf(
57 &self,
58 listed: bool,
59 scratch: bool,
60 ) -> Result<Buffer<W>, Box<CallError>> {
61 Ok(
62 self
63 .call("nvim_create_buf", call_args![listed, scratch])
64 .await?
65 .map(|val| Buffer::new(val, self.clone()))?,
66 )
67 }
68
69 pub async fn open_win(
70 &self,
71 buffer: &Buffer<W>,
72 enter: bool,
73 config: Vec<(Value, Value)>,
74 ) -> Result<Window<W>, Box<CallError>> {
75 Ok(
76 self
77 .call("nvim_open_win", call_args![buffer, enter, config])
78 .await?
79 .map(|val| Window::new(val, self.clone()))?,
80 )
81 }
82
83 pub async fn list_tabpages(&self) -> Result<Vec<Tabpage<W>>, Box<CallError>> {
84 match self.call("nvim_list_tabpages", call_args![]).await?? {
85 Value::Array(arr) => Ok(
86 arr
87 .into_iter()
88 .map(|v| Tabpage::new(v, self.clone()))
89 .collect(),
90 ),
91 val => Err(CallError::WrongValueType(val))?,
92 }
93 }
94
95 pub async fn get_current_tabpage(
96 &self,
97 ) -> Result<Tabpage<W>, Box<CallError>> {
98 Ok(
99 self
100 .call("nvim_get_current_tabpage", call_args![])
101 .await?
102 .map(|val| Tabpage::new(val, self.clone()))?,
103 )
104 }
105}