nvim_api/opts/
eval_statusline.rs

1use derive_builder::Builder;
2use nvim_types::Object;
3
4use crate::Window;
5
6/// Options passed to [`api::eval_statusline`](crate::eval_statusline).
7#[derive(Clone, Debug, Default, Builder)]
8#[builder(default, build_fn(private, name = "fallible_build"))]
9pub struct EvalStatuslineOpts {
10    /// Character used to fill blank spaces in the statusline.
11    #[builder(setter(strip_option))]
12    fillchar: Option<char>,
13
14    /// Return statuline informations from
15    /// [`api::eval_statusline`](crate::eval_statusline).
16    #[builder(setter(strip_option))]
17    highlights: Option<bool>,
18
19    /// Maximum width for the statusline.
20    #[builder(setter(strip_option))]
21    maxwidth: Option<u32>,
22
23    /// Evaluate the tabline instead of the statusline. When `true` the
24    /// [`window`](EvalStatuslineOptsBuilder::window) field is ignored.
25    #[builder(setter(strip_option))]
26    use_tabline: Option<bool>,
27
28    /// Evaluate the winbar instead of the statusline. Mutually exclusive with
29    /// [`use_tabline`](EvalStatuslineOptsBuilder::use_tabline).
30    #[cfg(any(feature = "neovim-0-8", feature = "neovim-nightly"))]
31    #[cfg_attr(
32        docsrs,
33        doc(cfg(any(feature = "neovim-0-8", feature = "neovim-nightly")))
34    )]
35    #[builder(setter(strip_option))]
36    use_winbar: Option<bool>,
37
38    /// Window to use as context for the statusline.
39    #[builder(setter(into, strip_option))]
40    window: Option<Window>,
41}
42
43impl EvalStatuslineOpts {
44    #[inline(always)]
45    /// Creates a new [`EvalStatuslineOptsBuilder`].
46    pub fn builder() -> EvalStatuslineOptsBuilder {
47        EvalStatuslineOptsBuilder::default()
48    }
49}
50
51impl EvalStatuslineOptsBuilder {
52    pub fn build(&mut self) -> EvalStatuslineOpts {
53        self.fallible_build().expect("never fails, all fields have defaults")
54    }
55}
56
57#[derive(Default)]
58#[allow(non_camel_case_types)]
59#[repr(C)]
60pub(crate) struct KeyDict_eval_statusline {
61    winid: Object,
62    fillchar: Object,
63    maxwidth: Object,
64    highlights: Object,
65    #[cfg(any(feature = "neovim-0-8", feature = "neovim-nightly"))]
66    use_winbar: Object,
67    use_tabline: Object,
68}
69
70impl From<&EvalStatuslineOpts> for KeyDict_eval_statusline {
71    fn from(opts: &EvalStatuslineOpts) -> Self {
72        Self {
73            winid: opts.window.as_ref().into(),
74            fillchar: opts.fillchar.into(),
75            maxwidth: opts.maxwidth.into(),
76            highlights: opts.highlights.into(),
77            #[cfg(any(feature = "neovim-0-8", feature = "neovim-nightly"))]
78            use_winbar: opts.use_winbar.into(),
79            use_tabline: opts.use_tabline.into(),
80        }
81    }
82}