diff options
author | Gregory Anders <greg@gpanders.com> | 2021-09-02 05:17:04 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-02 04:17:04 -0700 |
commit | 622a36b1f1c652a8de433028bc4a03a1216db23f (patch) | |
tree | 2895b1fc5eefbf02e4b316ecb404a5b00f194dd6 /src/nvim/aucmd.c | |
parent | 6751d6254b35d216a86817cd414d5d06e3ff641d (diff) | |
download | rneovim-622a36b1f1c652a8de433028bc4a03a1216db23f.tar.gz rneovim-622a36b1f1c652a8de433028bc4a03a1216db23f.tar.bz2 rneovim-622a36b1f1c652a8de433028bc4a03a1216db23f.zip |
feat(defaults): limit syntax cost on CmdwinEnter #15401
Add a new default autocommand to limit syntax highlighting
synchronization in the command window. This refactors the nvim_terminal
autocommand out of main() and into a new init_default_autocmds()
function, which is now part of the startup process and can be further
extended with more default autocommands down the road.
ref #6289 #6399
Diffstat (limited to 'src/nvim/aucmd.c')
-rw-r--r-- | src/nvim/aucmd.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/nvim/aucmd.c b/src/nvim/aucmd.c index 32c77fa288..8544a3d2e0 100644 --- a/src/nvim/aucmd.c +++ b/src/nvim/aucmd.c @@ -8,6 +8,7 @@ #include "nvim/ui.h" #include "nvim/aucmd.h" #include "nvim/eval.h" +#include "nvim/ex_docmd.h" #include "nvim/ex_getln.h" #include "nvim/buffer.h" @@ -35,6 +36,30 @@ void do_autocmd_uienter(uint64_t chanid, bool attached) recursive = false; } +void init_default_autocmds(void) +{ + // open terminals when opening files that start with term:// +#define PROTO "term://" + do_cmdline_cmd("augroup nvim_terminal"); + do_cmdline_cmd("autocmd!"); + do_cmdline_cmd("autocmd BufReadCmd " PROTO "* ++nested " + "if !exists('b:term_title')|call termopen(" + // Capture the command string + "matchstr(expand(\"<amatch>\"), " + "'\\c\\m" PROTO "\\%(.\\{-}//\\%(\\d\\+:\\)\\?\\)\\?\\zs.*'), " + // capture the working directory + "{'cwd': expand(get(matchlist(expand(\"<amatch>\"), " + "'\\c\\m" PROTO "\\(.\\{-}\\)//'), 1, ''))})" + "|endif"); + do_cmdline_cmd("augroup END"); +#undef PROTO + + // limit syntax synchronization in the command window + do_cmdline_cmd("augroup nvim_cmdwin"); + do_cmdline_cmd("autocmd! CmdWinEnter [:>] exe 'syntax sync minlines=1 maxlines='..&cmdwinheight"); + do_cmdline_cmd("augroup END"); +} + static void focusgained_event(void **argv) { bool *gainedp = argv[0]; |