nvim_oxi_api/opts/
eval_statusline.rs

1use types::Object;
2
3use crate::Window;
4
5/// Options passed to [`eval_statusline()`](crate::eval_statusline).
6#[derive(Clone, Debug, Default)]
7#[repr(C)]
8pub struct EvalStatuslineOpts {
9    winid: Object,
10    maxwidth: Object,
11    fillchar: Object,
12    highlights: Object,
13    use_tabline: Object,
14    use_winbar: Object,
15    use_statuscol_lnum: Object,
16}
17
18impl EvalStatuslineOpts {
19    #[inline(always)]
20    /// Creates a new [`EvalStatuslineOptsBuilder`].
21    pub fn builder() -> EvalStatuslineOptsBuilder {
22        EvalStatuslineOptsBuilder::default()
23    }
24}
25
26#[derive(Clone, Default)]
27pub struct EvalStatuslineOptsBuilder(EvalStatuslineOpts);
28
29impl EvalStatuslineOptsBuilder {
30    /// Character used to fill blank spaces in the statusline.
31    #[inline]
32    pub fn fillchar(&mut self, fillchar: char) -> &mut Self {
33        self.0.fillchar = fillchar.into();
34        self
35    }
36
37    /// Return statuline informations from
38    /// [`eval_statusline()`](crate::eval_statusline).
39    #[inline]
40    pub fn highlights(&mut self, highlights: bool) -> &mut Self {
41        self.0.highlights = highlights.into();
42        self
43    }
44
45    /// Maximum width for the statusline.
46    #[inline]
47    pub fn maxwidth(&mut self, maxwidth: u32) -> &mut Self {
48        self.0.maxwidth = maxwidth.into();
49        self
50    }
51
52    #[inline]
53    pub fn use_statuscol_lnum(
54        &mut self,
55        use_statuscol_lnum: bool,
56    ) -> &mut Self {
57        self.0.use_statuscol_lnum = use_statuscol_lnum.into();
58        self
59    }
60
61    /// Evaluate the tabline instead of the statusline. When `true` the
62    /// [`window`](EvalStatuslineOptsBuilder::window) field is ignored.
63    #[inline]
64    pub fn use_tabline(&mut self, use_tabline: bool) -> &mut Self {
65        self.0.use_tabline = use_tabline.into();
66        self
67    }
68
69    /// Evaluate the winbar instead of the statusline. Mutually exclusive with
70    /// [`use_tabline`](EvalStatuslineOptsBuilder::use_tabline).
71    #[inline]
72    pub fn use_winbar(&mut self, use_winbar: bool) -> &mut Self {
73        self.0.use_winbar = use_winbar.into();
74        self
75    }
76
77    /// Window to use as context for the statusline.
78    #[inline]
79    pub fn window(&mut self, window: Window) -> &mut Self {
80        self.0.winid = window.into();
81        self
82    }
83
84    #[inline]
85    pub fn build(&mut self) -> EvalStatuslineOpts {
86        std::mem::take(&mut self.0)
87    }
88}