nvim_oxi_api/
win_config.rs

1use types as nvim;
2
3use crate::Result;
4use crate::choose;
5use crate::ffi::win_config::*;
6use crate::types::*;
7use crate::{Buffer, Window};
8
9/// Binding to [`nvim_open_win()`][1].
10///
11/// Opens a new floating or external window.
12///
13/// [1]: https://neovim.io/doc/user/api.html#nvim_open_win()
14pub fn open_win(
15    buf: &Buffer,
16    enter: bool,
17    config: &WindowConfig,
18) -> Result<Window> {
19    let mut err = nvim::Error::new();
20    let handle =
21        unsafe { nvim_open_win(buf.0, enter, &config.into(), &mut err) };
22    choose!(err, Ok(handle.into()))
23}
24
25impl Window {
26    /// Binding to [`nvim_win_get_config()`][1].
27    ///
28    /// Gets the window configuration.
29    ///
30    /// [1]: https://neovim.io/doc/user/api.html#nvim_win_get_config()
31    pub fn get_config(&self) -> Result<WindowConfig> {
32        let mut err = nvim::Error::new();
33
34        let out =
35            unsafe { nvim_win_get_config(self.0, types::arena(), &mut err) };
36
37        let out = WindowConfig::try_from(out)?;
38
39        choose!(err, Ok(out))
40    }
41
42    /// Binding to [`nvim_win_get_config()`][1].
43    ///
44    /// Configures the window layout. Only for floating and external windows.
45    ///
46    /// [1]: https://neovim.io/doc/user/api.html#nvim_win_get_config()
47    pub fn set_config(&mut self, config: &WindowConfig) -> Result<()> {
48        let mut err = nvim::Error::new();
49        unsafe { nvim_win_set_config(self.0, &config.into(), &mut err) };
50        choose!(err, ())
51    }
52}