#!/usr/bin/python # PYTHON_ARGCOMPLETE_OK import sys import osex import curses import pprint import locale import argparse import argcomplete import ioex, ioex.selector def locate_select(patterns, match_all, ignore_case, update_database, multiple, database_path, update_require_visibility): if update_database: osex.update_locate_database( database_path = database_path, require_visibility = update_require_visibility ) paths = osex.locate( patterns, match_all = match_all, ignore_case = ignore_case, database_path = database_path ) selected_paths = ioex.curses_tty_wrapper( ioex.selector.select_string, paths, multiple = multiple ) return selected_paths def _init_argparser(): argparser = argparse.ArgumentParser(description = None) argparser.add_argument('--database-path') argparser.add_argument('--ignore-case', action='store_true') argparser.add_argument('--match-all', action='store_true') argparser.add_argument('--multiple', action='store_true') argparser.add_argument('--update-database', action='store_true') argparser.add_argument('--update-require-visibility', choices = ['yes', 'no']) argparser.add_argument('patterns', metavar = 'pattern', nargs = '+') return argparser def main(argv): argparser = _init_argparser() argcomplete.autocomplete(argparser) args = argparser.parse_args(argv) params = vars(args) if args.update_require_visibility == 'yes': args.update_require_visibility = True elif args.update_require_visibility == 'no': args.update_require_visibility = False paths = locate_select(**vars(args)) if paths is None: return 1 else: print('\n'.join(paths).encode(locale.getpreferredencoding())) return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:]))