mxb-search 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env python3
  2. from argparse import ArgumentParser
  3. import os
  4. from subprocess import Popen, PIPE
  5. from logging import getLogger
  6. FILTER_CMDLINE = ["peco"] # ["fzf"] is also fine
  7. BROWSER_CMDLINE = ["firefox"]
  8. logger = getLogger()
  9. def get_urls(folder: str):
  10. fmt = "{Folder}\t{Tag}\t{Title}\t{Url}"
  11. mxb_list = Popen(
  12. ["mxb", "list", "--format", fmt, folder],
  13. stdout=PIPE,
  14. )
  15. filter_cmd = Popen(FILTER_CMDLINE, stdin=mxb_list.stdout, stdout=PIPE)
  16. logger.debug("running...")
  17. output = filter_cmd.communicate()[0].decode("utf8")
  18. logger.debug("got output!")
  19. for line in output.split("\n"):
  20. url = line.split("\t")[-1]
  21. if url:
  22. yield url
  23. def get_parser():
  24. p = ArgumentParser()
  25. p.add_argument("--folder", default="")
  26. p.add_argument("--action", choices=["open", "echo"], default="open")
  27. return p
  28. def main():
  29. args = get_parser().parse_args()
  30. urls = get_urls(args.folder)
  31. logger.debug("URLs= %s", urls)
  32. if not urls:
  33. return
  34. for u in urls:
  35. if args.action == "open":
  36. cmd = BROWSER_CMDLINE + [u]
  37. Popen(cmd, preexec_fn=os.setpgrp)
  38. elif args.action == "echo":
  39. logger.debug(u)
  40. if __name__ == "__main__":
  41. main()