Adds basic tag completion.

main
Olivier Mangin 8 years ago
parent 02c11aaaea
commit e1a6ad2167

@ -24,16 +24,17 @@ from ..uis import get_ui
from .. import pretty
from .. import color
from ..utils import resolve_citekey
from ..completion import CiteKeyCompletion
from ..completion import CiteKeyOrTagCompletion, TagModifierCompletion
def parser(subparsers, conf):
parser = subparsers.add_parser('tag', help="add, remove and show tags")
parser.add_argument('citekeyOrTag', nargs='?', default=None,
help='citekey or tag.').completer = CiteKeyCompletion(conf)
help='citekey or tag.').completer = CiteKeyOrTagCompletion(conf)
parser.add_argument('tags', nargs='?', default=None,
help='If the previous argument was a citekey, then '
'a list of tags separated by a +.')
'a list of tags separated by + and -.'
).completer = TagModifierCompletion(conf)
# TODO find a way to display clear help for multiple command semantics,
# indistinguisable for argparse. (fabien, 201306)
return parser
@ -71,6 +72,7 @@ def _tag_groups(tags):
minus_tags.append(tag[1:])
return set(plus_tags), set(minus_tags)
def command(conf, args):
"""Add, remove and show tags"""

@ -1,4 +1,4 @@
from . import repo
import re
try:
import argcomplete
except ModuleNotFoundError:
@ -14,6 +14,8 @@ except ModuleNotFoundError:
argcomplete = FakeModule()
from . import repo
def autocomplete(parser):
argcomplete.autocomplete(parser)
@ -36,3 +38,22 @@ class CiteKeyCompletion(BaseCompleter):
def _complete(self, **kwargs):
rp = repo.Repository(self.conf)
return rp.citekeys
class CiteKeyOrTagCompletion(BaseCompleter):
def _complete(self, **kwargs):
rp = repo.Repository(self.conf)
return rp.citekeys.union(rp.get_tags())
class TagModifierCompletion(BaseCompleter):
regxp = r"[^:+-]*$" # prefix of tag after last separator
def _complete(self, prefix, **kwargs):
tags = repo.Repository(self.conf).get_tags()
start, _ = re.search(self.regxp, prefix).span()
partial_expr = prefix[:start]
t_prefix = prefix[start:]
return [partial_expr + t for t in tags if t.startswith(t_prefix)]

Loading…
Cancel
Save