diff --git a/autoload/miniterm.vim b/autoload/miniterm.vim index 2f3febe..4349d87 100644 --- a/autoload/miniterm.vim +++ b/autoload/miniterm.vim @@ -10,10 +10,15 @@ def Terminal(cmd = ''): dict bufnr: 0, } - self.bufnr = term_start($SHELL, { - hidden: 1, - term_kill: 'hup' - }) + var shcmd = get(g:, 'miniterm_shell', $SHELL) + var opts = { + hidden: 1, + term_kill: 'hup', + # TODO: add option to open in cwd + cwd: expand('%:p:h') + } + opts->extend(get(g:, 'miniterm_opts', {})) + self.bufnr = term_start(shcmd, opts) setbufvar(self.bufnr, "&buflisted", 0) if cmd != '' term_sendkeys(self.bufnr, $"{cmd}\") @@ -34,11 +39,15 @@ def TerminalManager(): dict return !self.current->empty() } - self.OpenTerminal = (term: dict) => { + self.OpenTerminal = (term: dict, vertical: bool = false) => { self.ListTerminals() - exec $"silent! bot sbuffer {term.bufnr}" - exec $"silent! resize {float2nr(&lines * g:miniterm_proportion)}" - silent! setlocal winfixheight + if vertical + exec $"silent! vertical sbuffer {term.bufnr}" + else + exec $"silent! bot sbuffer {term.bufnr}" + exec $"silent! resize {float2nr(&lines * g:miniterm_proportion)}" + silent! setlocal winfixheight + endif silent! setlocal nonumber norelativenumber silent! setlocal hidden } @@ -104,14 +113,19 @@ def TerminalManager(): dict # - close terminal window # - else if terminal window isnt open: # - open terminal window - self.ToggleTerminal = (cmd = '') => { + self.ToggleTerminal = (cmd = '', vertical = v:false) => { if !self.HasCurrent() self.current = self.AddTerm(cmd) endif if self.IsTermOpen(self.current) self.CloseTerminal(self.current) else - self.OpenTerminal(self.current) + if getbufvar(self.current.bufnr, '&buftype') != 'terminal' + # buffer is wiped out + self.RemoveBufnr(self.current.bufnr) + self.current = self.AddTerm(cmd) + endif + self.OpenTerminal(self.current, vertical) endif } @@ -166,6 +180,9 @@ def TerminalManager(): dict # i.e. 0 1 [2] 3 # if terminal at index 2 is the current self.ListTerminals = () => { + if g:miniterm_dont_list + return + endif if len(self.terminals) == 0 echo "No terminals active" else diff --git a/plugin/miniterm.vim b/plugin/miniterm.vim index f52aa6e..120b482 100644 --- a/plugin/miniterm.vim +++ b/plugin/miniterm.vim @@ -14,7 +14,7 @@ def TerminalMap(map: string, com: string) execute $"tnoremap {map} {com}" enddef -command! MinitermToggle miniterm.GetManager().ToggleTerminal() +command! -bang MinitermToggle miniterm.GetManager().ToggleTerminal("", "" == '!') command! -nargs=* MinitermNew miniterm.GetManager().NewTerminal() command! MinitermNext miniterm.GetManager().OffsetTerminal(1) command! MinitermPrev miniterm.GetManager().OffsetTerminal(-1)