123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #!/usr/bin/env python3
- from argparse import ArgumentParser
- import os
- from subprocess import Popen, PIPE
- from logging import getLogger
- FILTER_CMDLINE = ["peco"] # ["fzf"] is also fine
- BROWSER_CMDLINE = ["firefox"]
- logger = getLogger()
- def get_urls(folder: str):
- fmt = "{Folder}\t{Tag}\t{Title}\t{Url}"
- mxb_list = Popen(
- ["mxb", "list", "--format", fmt, folder],
- stdout=PIPE,
- )
- filter_cmd = Popen(FILTER_CMDLINE, stdin=mxb_list.stdout, stdout=PIPE)
- logger.debug("running...")
- output = filter_cmd.communicate()[0].decode("utf8")
- logger.debug("got output!")
- for line in output.split("\n"):
- url = line.split("\t")[-1]
- if url:
- yield url
- def get_parser():
- p = ArgumentParser()
- p.add_argument("--folder", default="")
- p.add_argument("--action", choices=["open", "echo"], default="open")
- return p
- def main():
- args = get_parser().parse_args()
- urls = get_urls(args.folder)
- logger.debug("URLs= %s", urls)
- if not urls:
- return
- for u in urls:
- if args.action == "open":
- cmd = BROWSER_CMDLINE + [u]
- Popen(cmd, preexec_fn=os.setpgrp)
- elif args.action == "echo":
- logger.debug(u)
- if __name__ == "__main__":
- main()
|