1use nvim_oxi::api;
2use nvim_oxi::api::opts::CreateAugroupOpts;
3use nvim_oxi::api::opts::CreateAutocmdOpts;
4
5pub fn create() {
10 create_lua_autocmd(&["TextYankPost"], "YankHighlight", None, "vim.highlight.on_yank()");
11
12 create_lua_autocmd(
13 &["BufLeave", "FocusLost"],
14 "AutosaveBuffers",
15 None,
16 "pcall(vim.cmd, 'silent! wa!')",
17 );
18
19 create_lua_autocmd(
20 &["FocusGained", "BufEnter", "CursorHold"],
21 "AutoreadBuffers",
22 None,
23 "pcall(vim.cmd, 'silent! checktime')",
24 );
25
26 create_lua_autocmd(
27 &["FileType"],
28 "QuickfixConfig",
29 Some(&["qf"]),
30 r"
31local opts = { buffer = true, noremap = true }
32vim.keymap.set('n', '<C-n>', '<cmd>cn<cr>', opts)
33vim.keymap.set('n', '<C-p>', '<cmd>cp<cr>', opts)
34vim.keymap.set('n', '<C-x>', '<cmd>ccl<cr>', opts)
35vim.cmd('resize 7')
36",
37 );
38
39 create_lua_autocmd(
41 &["LspAttach"],
42 "LspInactiveCodeHighlight",
43 None,
44 "vim.api.nvim_set_hl(0, '@lsp.mod.inactive', { underline = false, undercurl = false, sp = 'none' })",
45 );
46
47 crate::plugins::scrolloff::create_autocmd();
48 crate::layout::create_autocmd();
49}
50
51pub fn create_lua_autocmd(events: &[&str], augroup_name: &str, patterns: Option<&[&str]>, callback_body: &str) {
53 let augroup_opts = CreateAugroupOpts::builder().clear(true).build();
54 let group = match api::create_augroup(augroup_name, &augroup_opts) {
55 Ok(group) => group,
56 Err(err) => {
57 ytil_noxi::notify::error(format!(
58 "error creating augroup | augroup={augroup_name:?} error={err:#?}"
59 ));
60 return;
61 }
62 };
63
64 let mut autocmd_opts = CreateAutocmdOpts::builder();
65 let _ = autocmd_opts
66 .group(group)
67 .command(format!("lua << EOF\n{callback_body}\nEOF"));
68
69 if let Some(patterns) = patterns {
70 let _ = autocmd_opts.patterns(patterns.iter().copied());
71 }
72
73 let autocmd_opts = autocmd_opts.build();
74 if let Err(err) = api::create_autocmd(events.iter().copied(), &autocmd_opts) {
75 ytil_noxi::notify::error(format!(
76 "error creating auto command | augroup={augroup_name:?} events={events:#?} error={err:#?}"
77 ));
78 }
79}