diff --git a/main.py b/main.py index 7bb0b8b..bc91556 100755 --- a/main.py +++ b/main.py @@ -26,6 +26,24 @@ letter_set_manage.add_argument("letter", nargs="+") guessing = argparse.ArgumentParser() guessing.add_argument("pattern", help="Pattern to match") +hide_exclude = argparse.ArgumentParser() +commands = hide_exclude.add_mutually_exclusive_group() +commands.add_argument( + "-e", + "--edit", + help="Change which words will be hidden from view", + action="store_true", +) +commands.add_argument( + "-c", "--commit", help="Move excluded words to be hidden words", action="store_true" +) +commands.add_argument( + "-s", + "--show", + help="Show which words are in the current exclude list", + action="store_true", +) + class MainLoop(cmd2.Cmd): """Loop for wordscape commands @@ -37,6 +55,7 @@ class MainLoop(cmd2.Cmd): def __init__(self): self.dict = "default" self.excludes = set() + self.hidden = set() self.init_letters(input("Enter letters: ")) super().__init__() @@ -74,7 +93,7 @@ class MainLoop(cmd2.Cmd): """Find words that match a pattern""" pattern = re.compile(args.pattern + "$") matching_words = filter_possibilities(self.candidates, pattern) - app = RemoveWordsActivity(matching_words, self.excludes) + app = RemoveWordsActivity(matching_words - self.hidden, self.excludes) if os.name == "nt": app.run(fork=False) else: @@ -83,6 +102,31 @@ class MainLoop(cmd2.Cmd): if not was_canceled: self.excludes.update(new_exludes) + @cmd2.with_argparser(hide_exclude) + def do_hide(self, args): + """Hide words that are in the exclude list""" + if args.show: + print("\n".join(sorted(self.excludes))) + return + if args.commit: + self.hidden.update(self.excludes) + self.excludes = set() + return + if args.edit: + app = RemoveWordsActivity(self.excludes, self.hidden) + if os.name == "nt": + app.run(fork=False) + else: + app.run() + was_canceled, results = app.get_results() + if not was_canceled: + + result_set = set(results) + self.excludes = self.hidden - result_set + self.hidden = result_set + + return + if __name__ == "__main__": MainLoop().cmdloop()