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