Adds basic tag completion.
This commit is contained in:
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…
x
Reference in New Issue
Block a user