Skip to content

Commit 8e9910b

Browse files
committed
tmuxp import for cli, wip. update changelog
1 parent 441e1aa commit 8e9910b

File tree

3 files changed

+94
-9
lines changed

3 files changed

+94
-9
lines changed

CHANGES

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ Here you can find the recent changes to tmuxp.
99
- [import] [tests] initial version of `tmuxinator`_ and `teamocil`_
1010
config importer. it does not support all options and it not guaranteed
1111
to fully convert window/pane size and state.
12+
- [internal] :meth:`config.in_dir` supports a list of ``extensions`` for
13+
filetypes to search, i.e. ``['.yaml', '.json']``.
14+
- [internal] :meth:`config.is_config_file` now supports ``extensions``
15+
argument as a string also.
16+
- [cli] fix ``$ tmuxp load -l`` to work correctly alongside
17+
``$ tmuxp load filename``.
1218

1319
2013-10-25
1420
----------

tmuxp/cli.py

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323

2424
config_dir = os.path.expanduser('~/.tmuxp/')
2525
cwd_dir = os.getcwd() + '/'
26-
26+
tmuxinator_config_dir = os.path.expanduser('~/.tmuxinator/')
27+
teamocil_config_dir = os.path.expanduser('~/.teamocil/')
2728

2829
def query_yes_no(question, default="yes"):
2930
"""Ask a yes/no question via raw_input() and return their answer.
@@ -179,12 +180,58 @@ def subcommand_load(args):
179180

180181

181182
def subcommand_import_teamocil(args):
182-
print(args)
183+
if args.list:
184+
try:
185+
configs_in_user = config.in_dir(teamocil_config_dir, extensions='yml')
186+
except OSError:
187+
configs_in_user = []
188+
configs_in_cwd = config.in_dir(config_dir=cwd_dir, extensions='yml')
189+
190+
output = ''
191+
192+
if not os.path.exists(teamocil_config_dir):
193+
output += '# %s: \n\tDirectory doesn\'t exist.\n' % teamocil_config_dir
194+
elif not configs_in_user:
195+
output += '# %s: \n\tNone found.\n' % teamocil_config_dir
196+
else:
197+
output += '# %s: \n\t%s\n' % (
198+
config_dir, ', '.join(configs_in_user)
199+
)
200+
201+
if configs_in_cwd:
202+
output += '# current directory:\n\t%s' % (
203+
', '.join(configs_in_cwd)
204+
)
205+
206+
print(output)
207+
183208

184209

185210
def subcommand_import_tmuxinator(args):
186-
print(args)
211+
if args.list:
212+
try:
213+
configs_in_user = config.in_dir(tmuxinator_config_dir, extensions='yml')
214+
except OSError:
215+
configs_in_user = []
216+
configs_in_cwd = config.in_dir(config_dir=cwd_dir, extensions='yml')
217+
218+
output = ''
219+
220+
if not os.path.exists(tmuxinator_config_dir):
221+
output += '# %s: \n\tDirectory doesn\'t exist.\n' % tmuxinator_config_dir
222+
elif not configs_in_user:
223+
output += '# %s: \n\tNone found.\n' % tmuxinator_config_dir
224+
else:
225+
output += '# %s: \n\t%s\n' % (
226+
config_dir, ', '.join(configs_in_user)
227+
)
187228

229+
if configs_in_cwd:
230+
output += '# current directory:\n\t%s' % (
231+
', '.join(configs_in_cwd)
232+
)
233+
234+
print(output)
188235

189236
def subcommand_convert(args):
190237
if args.config:
@@ -365,10 +412,16 @@ def cli_parser():
365412

366413
import_teamocil = importsubparser.add_parser('teamocil')
367414

368-
import_teamocil.add_argument(
415+
import_teamocilgroup = import_teamocil.add_mutually_exclusive_group(required=True)
416+
import_teamocilgroup.add_argument(
417+
'-l', '--list', dest='list', action='store_true',
418+
help='List yaml configs in ~/.teamocil and current working directory.'
419+
)
420+
421+
import_teamocilgroup.add_argument(
369422
dest='config',
370423
type=str,
371-
default=None,
424+
nargs='?',
372425
help='''\
373426
Checks current ~/.teamocil and current directory for yaml files.
374427
'''
@@ -377,14 +430,21 @@ def cli_parser():
377430

378431
import_tmuxinator = importsubparser.add_parser('tmuxinator')
379432

380-
import_tmuxinator.add_argument(
433+
import_tmuxinatorgroup = import_tmuxinator.add_mutually_exclusive_group(required=True)
434+
import_tmuxinatorgroup.add_argument(
435+
'-l', '--list', dest='list', action='store_true',
436+
help='List yaml configs in ~/.tmuxinator and current working directory.'
437+
)
438+
439+
import_tmuxinatorgroup.add_argument(
381440
dest='config',
382441
type=str,
383-
default=None,
442+
nargs='?',
384443
help='''\
385444
Checks current ~/.tmuxinator and current directory for yaml files.
386445
'''
387446
)
447+
388448
import_tmuxinator.set_defaults(callback=subcommand_import_tmuxinator)
389449

390450
parser.add_argument('--log-level', dest='log_level', default='INFO',
@@ -496,6 +556,20 @@ def config_complete(command, commands, ctext):
496556
for c in config.in_dir(config_dir)]
497557
commands += [c for c in configs if c.startswith(ctext_subargs)]
498558

559+
def teamocil_config_complete(command, commands, ctext):
560+
try:
561+
configs_in_user = config.in_dir(teamocil_config_dir, extensions='yml')
562+
except OSError:
563+
configs_in_user = []
564+
configs_in_cwd = config.in_dir(config_dir=cwd_dir, extensions='yml')
565+
566+
def tmuxinator_config_complete(command, commands, ctext):
567+
try:
568+
configs_in_user = config.in_dir(tmuxinator_config_dir, extensions='yml')
569+
except OSError:
570+
configs_in_user = []
571+
configs_in_cwd = config.in_dir(config_dir=cwd_dir, extensions='yml')
572+
499573
session_complete('attach-session', commands, ctext)
500574
session_complete('kill-session', commands, ctext)
501575
config_complete('load', commands, ctext)

tmuxp/config.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,27 @@ def is_config_file(filename, extensions=['.yaml', '.json', '.ini']):
4848
:param filename: filename to check (e.g. ``mysession.json``).
4949
:type filename: string
5050
:param extensions: filetypes to check (e.g. ``['.yaml', '.json']``).
51+
:type extensions: list or string
5152
:rtype: bool
5253
'''
54+
55+
extensions = [extensions] if isinstance(extensions, basestring) else extensions
5356
return any(filename.endswith(e) for e in extensions)
5457

5558

56-
def in_dir(config_dir=os.path.expanduser('~/.tmuxp')):
59+
def in_dir(config_dir=os.path.expanduser('~/.tmuxp'), extensions=['.yaml', '.json', '.ini']):
5760
'''Find configs in config_dir and current dir
5861
5962
:param config_dir: directory to search
6063
:type config_dir: string
64+
:param extensions: filetypes to check (e.g. ``['.yaml', '.json']``).
65+
:type extensions: list
6166
:rtype: list
6267
'''
6368
configs = []
6469

6570
for filename in os.listdir(config_dir):
66-
if is_config_file(filename) and not filename.startswith('.'):
71+
if is_config_file(filename, extensions) and not filename.startswith('.'):
6772
configs.append(filename)
6873

6974
return configs

0 commit comments

Comments
 (0)