Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
!squash more
  • Loading branch information
tony committed Oct 15, 2022
commit a63f93425c6aae41501d5778e70c344f89c2b94e
14 changes: 14 additions & 0 deletions src/tmuxp/cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ def create_parser() -> argparse.ArgumentParser:
)
create_freeze_subparser(freeze_parser)

try:
import argcomplete

argcomplete.autocomplete(parser)
except ImportError:
pass

return parser


Expand Down Expand Up @@ -123,6 +130,13 @@ def cli(_args: t.Optional[t.List[str]] = None) -> None:
sys.exit()

parser = create_parser()

try:
import argcomplete

argcomplete.autocomplete(parser)
except ImportError:
pass
args = parser.parse_args(_args, namespace=ns)

setup_logger(logger=logger, level=args.log_level.upper())
Expand Down
32 changes: 26 additions & 6 deletions src/tmuxp/cli/completions.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import typing as t

from libtmux.server import Server
from tmuxp import config
Expand All @@ -8,6 +9,7 @@

try:
import argcomplete
import argcomplete.completers
except ImportError:

class ArgComplete:
Expand All @@ -24,22 +26,40 @@ def __call__(self, *args: object, **kwargs: object) -> object:


class ConfigFileCompleter(argcomplete.completers.FilesCompleter):

"""argcomplete completer for tmuxp files."""

def __call__(self, prefix, **kwargs):

completion = argcomplete.completers.FilesCompleter.__call__(
def __init__(
self,
allowednames: t.Sequence[str] = (
"yml",
"yaml",
"json",
),
directories: bool = False,
**kwargs: object
):
if isinstance(allowednames, (str, bytes)):
allowednames = [allowednames]

self.allowednames = [x.lstrip("*").lstrip(".") for x in allowednames]
self.directories = directories
# super().__init__(
# self, allowednames=allowednames, directories=directories, **kwargs
# )

def __call__(self, prefix: str, **kwargs):
completion: t.List[str] = argcomplete.completers.FilesCompleter.__call__(
self, prefix, **kwargs
)

completion += [os.path.join(config_dir, c) for c in config.in_dir(config_dir)]
completion.extend(
[os.path.join(config_dir, c) for c in config.in_dir(config_dir)]
)

return completion


class TmuxinatorCompleter(argcomplete.completers.FilesCompleter):

"""argcomplete completer for Tmuxinator files."""

def __call__(self, prefix, **kwargs):
Expand Down
13 changes: 9 additions & 4 deletions src/tmuxp/cli/load.py
Original file line number Diff line number Diff line change
Expand Up @@ -566,11 +566,16 @@ def create_load_subparser(parser: argparse.ArgumentParser) -> argparse.ArgumentP
)

try:
import shtab
import argcomplete
import argcomplete.completers

config_file.complete = shtab.FILE # type: ignore
tmux_config_file.complete = shtab.FILE # type: ignore
log_file.complete = shtab.FILE # type: ignore
from tmuxp.cli.completions import ConfigFileCompleter

config_file.completer = ConfigFileCompleter() # type: ignore
tmux_config_file.completer = ( # type: ignore
argcomplete.completers.FilesCompleter
)
log_file.completer = argcomplete.completers.FilesCompleter # type: ignore
except ImportError:
pass

Expand Down