added case-insensitive searching of entry title and body using a -S argument

This commit is contained in:
Jims 2019-11-12 11:53:12 -05:00
parent 4302cf2a81
commit e682d27994
2 changed files with 7 additions and 3 deletions

View file

@ -187,7 +187,7 @@ class Journal:
tag_counts = {(tags.count(tag), tag) for tag in tags}
return [Tag(tag, count=count) for count, tag in sorted(tag_counts)]
def filter(self, tags=[], start_date=None, end_date=None, starred=False, strict=False, short=False, exclude=[]):
def filter(self, tags=[], start_date=None, end_date=None, starred=False, strict=False, short=False, search_plain=None, exclude=[]):
"""Removes all entries from the journal that don't match the filter.
tags is a list of tags, each being a string that starts with one of the
@ -209,6 +209,7 @@ class Journal:
# If strict mode is on, all tags have to be present in entry
tagged = self.search_tags.issubset if strict else self.search_tags.intersection
excluded = lambda tags: len([tag for tag in tags if tag in excluded_tags]) > 0
result = [
entry for entry in self.entries
if (not tags or tagged(entry.tags))
@ -216,6 +217,7 @@ class Journal:
and (not start_date or entry.date >= start_date)
and (not end_date or entry.date <= end_date)
and (not exclude or not excluded(entry.tags))
and (not search_plain or (search_plain.lower() in entry.title.lower() or search_plain.lower() in entry.body.lower()))
]
self.entries = result

View file

@ -32,6 +32,7 @@ def parse_args(args=None):
reading = parser.add_argument_group('Reading', 'Specifying either of these parameters will display posts of your journal')
reading.add_argument('-from', dest='start_date', metavar="DATE", help='View entries after this date')
reading.add_argument('-until', '-to', dest='end_date', metavar="DATE", help='View entries before this date')
reading.add_argument('-S', '-search', dest='search_plain', help='View entries containing a specific string')
reading.add_argument('-on', dest='on_date', metavar="DATE", help='View entries on this date')
reading.add_argument('-and', dest='strict', action="store_true", help='Filter by tags using AND (default: OR)')
reading.add_argument('-starred', dest='starred', action="store_true", help='Show only starred entries')
@ -64,7 +65,7 @@ def guess_mode(args, config):
elif args.decrypt is not False or args.encrypt is not False or args.export is not False or any((args.short, args.tags, args.edit)):
compose = False
export = True
elif any((args.start_date, args.end_date, args.on_date, args.limit, args.strict, args.starred)):
elif any((args.start_date, args.end_date, args.on_date, args.limit, args.strict, args.starred, args.search_plain)):
# Any sign of displaying stuff?
compose = False
elif args.text and all(word[0] in config['tagsymbols'] for word in " ".join(args.text).split()):
@ -236,7 +237,8 @@ def run(manual_args=None):
strict=args.strict,
short=args.short,
starred=args.starred,
exclude=args.excluded)
exclude=args.excluded,
search_plain=args.search_plain)
journal.limit(args.limit)
# Reading mode