class TmuxDirPlugin: """TmuxDirPlugin.""" def __init__(self, nvim: nvim.Nvim) -> None: """Constructor of TmuxDirPlugin.""" self.nvim = nvim self.plugin_name = "tmuxdir" # nvim settings self.root_markers: List[str] = self.nvim.eval("TmuxdirRootMarkers()") self.base_dirs: List[str] = self.nvim.eval("TmuxdirBaseDirs()") self._eager_mode: bool = self.nvim.eval("TmuxdirEagerMode()") self.dir_mngr = DirMngr( base_dirs=self.base_dirs, root_markers=self.root_markers, eager_mode=self._eager_mode, ) self.tmux_dir = TmuxDirFacade(self.base_dirs, self.root_markers) try: self.tmux_dir._check_tmux_bin() except TmuxFacadeException as e: echoerr(self.nvim, str(e), self.plugin_name) def tmuxdir_add(self, args: List) -> List[str]: root_dir = expanduser_raise_if_not_dir(args[0]) return self.tmux_dir.add(root_dir) def tmuxdir_clear_added(self, args: List) -> bool: root_dir = expanduser_raise_if_not_dir(args[0]) return self.tmux_dir.clear_added_dir(root_dir) def tmuxdir_list_added(self) -> List[str]: return list(self.tmux_dir.dirs.keys()) def tmuxdir_clear_added_dirs(self) -> bool: return self.tmux_dir.clear_added_dirs() def tmuxdir_ignore(self, args: List) -> bool: root_dir = expanduser_raise_if_not_dir(args[0]) return self.tmux_dir.ignore(root_dir) def tmuxdir_clear_ignored(self, args: List) -> bool: root_dir = expanduser_raise_if_not_dir(args[0]) return self.tmux_dir.clear_ignored_dir(root_dir) def tmuxdir_list_ignored(self) -> List[str]: return list(self.tmux_dir.ignored_dirs.keys()) def tmuxdir_clear_ignored_dirs(self, args: List) -> bool: return self.tmux_dir.clear_ignored_dirs() def check_tmux_bin(self) -> bool: return self.tmux_dir._check_tmux_bin()
class Source(Base): def __init__(self, vim): super().__init__(vim) self.name: str = "tmux_dir" self.kind: str = "tmux_dir" self.vim = vim self.sort_by: str = "word" self.sort_reversed: bool = True def highlight(self): self.vim.command("highlight default link {} Special".format( self.syntax_name)) def define_syntax(self): super().define_syntax() def gather_candidates(self, context): try: self.tmuxf = TmuxDirFacade( base_dirs=self.vim.eval("TmuxdirBaseDirs()"), root_markers=self.vim.eval("TmuxdirRootMarkers()"), ) except TmuxDirFacadeException as e: util.error(self.vim, str(e)) candidates = [] for dir_path in self.tmuxf.list_dirs(): candidates.append({"word": dir_path}) return sorted(candidates, key=lambda x: x[self.sort_by], reverse=self.sort_reversed)
def gather_candidates(self, context): try: self.tmuxf = TmuxDirFacade( base_dirs=self.vim.eval("TmuxdirBaseDirs()"), root_markers=self.vim.eval("TmuxdirRootMarkers()"), ) except TmuxDirFacadeException as e: util.error(self.vim, str(e)) candidates = [] for dir_path in self.tmuxf.list_dirs(): candidates.append({"word": dir_path}) return sorted(candidates, key=lambda x: x[self.sort_by], reverse=self.sort_reversed)
def __init__(self, vim) -> None: super().__init__(vim) self.name = "tmux_dir" self.default_action = "open" self.vim = vim self.has_nvim = self.vim.eval("has('nvim')") self.vim_bin_path = "vim" if self.has_nvim: self.vim_bin_path = "nvim" try: self.root_markers: List[str] = self.vim.eval( "TmuxdirRootMarkers()") self.base_dirs: List[str] = self.vim.eval("TmuxdirBaseDirs()") self.tmux_dir = TmuxDirFacade(self.base_dirs, self.root_markers) except TmuxDirFacadeException as e: util.error(self.vim, str(e))
def __init__(self, vim: vim.Nvim) -> None: """Constructor of TmuxDirPlugin.""" self.vim = vim self.plugin_name = "tmuxdir" # vim settings self.root_markers: List[str] = self.vim.eval("TmuxdirRootMarkers()") self.base_dirs: List[str] = self.vim.eval("TmuxdirBaseDirs()") self.dir_mngr = DirMngr( base_dirs=self.base_dirs, root_markers=self.root_markers ) self.tmux_dir = TmuxDirFacade(self.base_dirs, self.root_markers) try: self.tmux_dir._check_tmux_bin() except TmuxFacadeException as e: echoerr(self.vim, str(e), self.plugin_name)
class Kind(Openable): def __init__(self, vim) -> None: super().__init__(vim) self.name = "tmux_dir" self.default_action = "open" self.vim = vim self.has_nvim = self.vim.eval("has('nvim')") self.vim_bin_path = "vim" if self.has_nvim: self.vim_bin_path = "nvim" try: self.root_markers: List[str] = self.vim.eval( "TmuxdirRootMarkers()") self.base_dirs: List[str] = self.vim.eval("TmuxdirBaseDirs()") self.tmux_dir = TmuxDirFacade(self.base_dirs, self.root_markers) except TmuxDirFacadeException as e: util.error(self.vim, str(e)) def action_open(self, context) -> None: """Open project dir in a tmux session. If the tmux dir session is already open, it switches to the session.""" dir_path = context["targets"][0]["word"] session_name = self.tmux_dir.dir_to_session_name(dir_path=dir_path) if not self.tmux_dir.sessions().get(session_name): self.tmux_dir.create( session_name=session_name, vim_bin_path=self.vim_bin_path, start_directory=dir_path, ) try: self.tmux_dir.switch(session_name=session_name) except TmuxDirFacadeException as e: util.error(self.vim, str(e)) def action_delete(self, context) -> None: """Ignore selected directory tmux session(s).""" if not util.confirm( self.vim, "Ignoring directory {}. Proceed?".format( [dirs["word"] for dirs in context["targets"]]), ): return try: for item in context["targets"]: dir_path = item["word"] self.tmux_dir.ignore(input_dir=dir_path) except TmuxDirFacadeException as e: util.error(self.vim, str(e))
class Kind(Openable): def __init__(self, vim) -> None: super().__init__(vim) self.name = "tmux_dir" self.default_action = "open" self.vim = vim self.has_nvim = self.vim.eval("has('nvim')") self.vim_bin_path = "vim" self.max_sessions = 10 if self.has_nvim: self.vim_bin_path = "nvim" try: self.root_markers: List[str] = self.vim.eval("TmuxdirRootMarkers()") self.base_dirs: List[str] = self.vim.eval("TmuxdirBaseDirs()") self.tmux_dir = TmuxDirFacade(self.base_dirs, self.root_markers) except TmuxDirFacadeException as e: util.error(self.vim, str(e)) def action_open(self, context: dict) -> None: """Open project dir in a tmux session. If the tmux dir session is already open, it switches to the session.""" dir_path = context["targets"][0]["word"] session_name = self.tmux_dir.dir_to_session_name(dir_path=dir_path) if not self.tmux_dir.sessions().get(session_name): self.tmux_dir.create( session_name=session_name, vim_bin_path=self.vim_bin_path, start_directory=os.path.expanduser(dir_path), ) try: self.tmux_dir.switch(session_name=session_name) except TmuxDirFacadeException as e: util.error(self.vim, str(e)) def action_new(self, context: dict) -> None: """Open the project dir in a new tmux session.""" dir_path = context["targets"][0]["word"] session_name = self.tmux_dir.dir_to_session_name(dir_path=dir_path) for i in range(self.max_sessions + 1): if i == 0: new_session_name = session_name else: new_session_name = f"{session_name}-{i}" if not self.tmux_dir.sessions().get(new_session_name): if dir_path.endswith(f"-{i}"): dir_path = dir_path[:-len(f"-{i}")] self.tmux_dir.create( session_name=new_session_name, vim_bin_path=self.vim_bin_path, start_directory=os.path.expanduser(dir_path), ) try: self.tmux_dir.switch(session_name=new_session_name) except TmuxDirFacadeException as e: util.error(self.vim, str(e)) return util.error( self.vim, f"Maximum number of sessions {self.max_sessions} for this dir " f"{dir_path} has been reached.", ) def action_delete(self, context: dict) -> None: """Ignore selected directory tmux session(s).""" if not util.confirm( self.vim, "Ignoring directory {}. Proceed?".format( [dirs["word"] for dirs in context["targets"]] ), ): return try: for item in context["targets"]: dir_path = item["word"] self.tmux_dir.ignore(input_dir=dir_path) except TmuxDirFacadeException as e: util.error(self.vim, str(e))