1
0

select-locate 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/python
  2. # PYTHON_ARGCOMPLETE_OK
  3. import sys
  4. import osex
  5. import curses
  6. import pprint
  7. import locale
  8. import argparse
  9. import argcomplete
  10. import ioex, ioex.selector
  11. def locate_select(patterns, match_all, ignore_case, update_database, multiple, database_path, update_require_visibility):
  12. if update_database:
  13. osex.update_locate_database(
  14. database_path = database_path,
  15. require_visibility = update_require_visibility
  16. )
  17. paths = osex.locate(
  18. patterns,
  19. match_all = match_all,
  20. ignore_case = ignore_case,
  21. database_path = database_path
  22. )
  23. selected_paths = ioex.curses_tty_wrapper(
  24. ioex.selector.select_string,
  25. paths,
  26. multiple = multiple
  27. )
  28. return selected_paths
  29. def _init_argparser():
  30. argparser = argparse.ArgumentParser(description = None)
  31. argparser.add_argument('--database-path')
  32. argparser.add_argument('--ignore-case', action='store_true')
  33. argparser.add_argument('--match-all', action='store_true')
  34. argparser.add_argument('--multiple', action='store_true')
  35. argparser.add_argument('--update-database', action='store_true')
  36. argparser.add_argument('--update-require-visibility', choices = ['yes', 'no'])
  37. argparser.add_argument('patterns', metavar = 'pattern', nargs = '+')
  38. return argparser
  39. def main(argv):
  40. argparser = _init_argparser()
  41. argcomplete.autocomplete(argparser)
  42. args = argparser.parse_args(argv)
  43. params = vars(args)
  44. if args.update_require_visibility == 'yes':
  45. args.update_require_visibility = True
  46. elif args.update_require_visibility == 'no':
  47. args.update_require_visibility = False
  48. paths = locate_select(**vars(args))
  49. if paths is None:
  50. return 1
  51. else:
  52. print('\n'.join(paths).encode(locale.getpreferredencoding()))
  53. return 0
  54. if __name__ == "__main__":
  55. sys.exit(main(sys.argv[1:]))