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 pretty
|
||||||
from .. import color
|
from .. import color
|
||||||
from ..utils import resolve_citekey
|
from ..utils import resolve_citekey
|
||||||
from ..completion import CiteKeyCompletion
|
from ..completion import CiteKeyOrTagCompletion, TagModifierCompletion
|
||||||
|
|
||||||
|
|
||||||
def parser(subparsers, conf):
|
def parser(subparsers, conf):
|
||||||
parser = subparsers.add_parser('tag', help="add, remove and show tags")
|
parser = subparsers.add_parser('tag', help="add, remove and show tags")
|
||||||
parser.add_argument('citekeyOrTag', nargs='?', default=None,
|
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,
|
parser.add_argument('tags', nargs='?', default=None,
|
||||||
help='If the previous argument was a citekey, then '
|
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,
|
# TODO find a way to display clear help for multiple command semantics,
|
||||||
# indistinguisable for argparse. (fabien, 201306)
|
# indistinguisable for argparse. (fabien, 201306)
|
||||||
return parser
|
return parser
|
||||||
@ -71,6 +72,7 @@ def _tag_groups(tags):
|
|||||||
minus_tags.append(tag[1:])
|
minus_tags.append(tag[1:])
|
||||||
return set(plus_tags), set(minus_tags)
|
return set(plus_tags), set(minus_tags)
|
||||||
|
|
||||||
|
|
||||||
def command(conf, args):
|
def command(conf, args):
|
||||||
"""Add, remove and show tags"""
|
"""Add, remove and show tags"""
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from . import repo
|
import re
|
||||||
try:
|
try:
|
||||||
import argcomplete
|
import argcomplete
|
||||||
except ModuleNotFoundError:
|
except ModuleNotFoundError:
|
||||||
@ -14,6 +14,8 @@ except ModuleNotFoundError:
|
|||||||
|
|
||||||
argcomplete = FakeModule()
|
argcomplete = FakeModule()
|
||||||
|
|
||||||
|
from . import repo
|
||||||
|
|
||||||
|
|
||||||
def autocomplete(parser):
|
def autocomplete(parser):
|
||||||
argcomplete.autocomplete(parser)
|
argcomplete.autocomplete(parser)
|
||||||
@ -36,3 +38,22 @@ class CiteKeyCompletion(BaseCompleter):
|
|||||||
def _complete(self, **kwargs):
|
def _complete(self, **kwargs):
|
||||||
rp = repo.Repository(self.conf)
|
rp = repo.Repository(self.conf)
|
||||||
return rp.citekeys
|
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