1use core::fmt::Debug;
7use core::marker::Copy;
8
9use nvim_oxi::api::opts::CreateAugroupOptsBuilder;
10use nvim_oxi::api::opts::CreateAutocmdOptsBuilder;
11use nvim_oxi::api::opts::SetKeymapOptsBuilder;
12use nvim_oxi::api::types::Mode;
13
14pub fn create() {
19 create_autocmd(
20 ["TextYankPost"],
21 "YankHighlight",
22 CreateAutocmdOptsBuilder::default().command(":lua vim.highlight.on_yank()"),
23 );
24
25 create_autocmd(
26 ["BufLeave", "FocusLost"],
27 "AutosaveBuffers",
28 CreateAutocmdOptsBuilder::default().command(":silent! wa!"),
29 );
30
31 create_autocmd(
32 ["FileType"],
33 "QuickfixConfig",
34 CreateAutocmdOptsBuilder::default().patterns(["qf"]).callback(|_| {
35 let opts = SetKeymapOptsBuilder::default().noremap(true).build();
36
37 crate::keymaps::set(&[Mode::Normal], "<c-n>", ":cn<cr>", &opts);
38 crate::keymaps::set(&[Mode::Normal], "<c-p>", ":cp<cr>", &opts);
39 crate::keymaps::set(&[Mode::Normal], "<c-x>", ":ccl<cr>", &opts);
40 let _ = ytil_noxi::common::exec_vim_cmd("resize", Some(&["7"]));
41
42 true
43 }),
44 );
45
46 crate::plugins::scrolloff::create_autocmd();
47 crate::layout::create_autocmd();
48}
49
50pub fn create_autocmd<'a, I>(events: I, augroup_name: &str, opts_builder: &mut CreateAutocmdOptsBuilder)
55where
56 I: IntoIterator<Item = &'a str> + Debug + Copy,
57{
58 if let Err(err) =
59 nvim_oxi::api::create_augroup(augroup_name, &CreateAugroupOptsBuilder::default().clear(true).build())
60 .inspect_err(|err| {
61 ytil_noxi::notify::error(format!("error creating augroup | name={augroup_name:?} error={err:#?}"));
62 })
63 .and_then(|group| nvim_oxi::api::create_autocmd(events, &opts_builder.group(group).build()))
64 {
65 ytil_noxi::notify::error(format!(
66 "error creating auto command | augroup={augroup_name:?} events={events:#?} error={err:#?}"
67 ));
68 }
69}