Hi all,

I went one further and added full regex support for tag searching.

You can now search for things like "taga/*", as well as "*blah*". Also, the set-algebra still works.

There are likely corner cases I didn't suss out, but this should be 'good enough' for most uses.

Enjoy!
-->Jake

On 1/23/2015 9:21 AM, Jacob Peck wrote:
Hi Mehrdad,

I'll look into adding wildcards today. Shouldn't be too hard... (famous last words). It's a good idea, and adding wildcards would definitely allow freeform tag hierarchy :)

The second bit -- linking tags with an external Leo file -- would be a bit difficult. I suppose a change could be made to store the tags in the global database (g.db), but that would make tags break if the user shared their outlines. In short, I think the *easiest* thing that could work is what we have now -- per-outline taglists. But, the tagging plugin offers a tag API, so others could manipulate it as they see fit, with custom scripts and such. It's not a feature I see myself developing, because I think it would be a bit fragile, but someone else may wish to pick this up?

But yes, I'll see about adding wildcards :)

Thanks,
-->Jake

On 1/21/2015 10:55 AM, Mehrdad Mirreza wrote:
Hi Jacob,

missing the tagging capability was the only reason I didn't want to use Leo for managing my private data over years. Now you have solved the problem. Thank you for that, but tagging will be an even more powerful feature, if you would provide tag hierarchies.

Of course, I can already define my tag hierarchy now having a naming convention like "taga/subtag1/subsubtagx", but this is only usable as an hierarchy if I could search for "taga/*" and so I would get all subtags of "taga"

I would really appreciate it, if you could extend the tag search to a match with wildcards (*) . I don't think this is a big deal.

Another nice to have feature could be to have the tags in a separate leo file as an outline, and then apply them like the syntax above (with an separator like /) to the nodes of other files, but this is not a trivial thing, I guess.

Best regards
Mehrdad

Am Mittwoch, 6. August 2014 21:47:45 UTC+2 schrieb Jacob Peck:

    Hi all,

    I've put the last bit of planned functionality into the Tagging UI
    (nodetags.py plugin) today.  It's available in the latest commit.
    Here's
    the new docstring:

    ----
    Provides node tagging capabilities to Leo

    By Jacob M. Peck

    API
    ===

    This plugin registers a controller object to c.theTagController,
    which
    provides the following API::

         tc = c.theTagController
         tc.get_all_tags() # return a list of all tags used in the
    current
    outline, automatically updated to be consistent
         tc.get_tagged_nodes('foo') # return a list of positions
    tagged 'foo'
         tc.get_tags(p) # return a list of tags applied to the node at
    position p; returns [] if node has no tags
         tc.add_tag(p, 'bar') # add the tag 'bar' to the node at
    position p
         tc.remove_tag(p, 'baz') # remove the tag 'baz' from p if it
    is in
    the tag list

    Internally, tags are stored in
    `p.v.unknownAttributes['__node_tags']` as
    a set.

    UI
    ==

    The "Tags" tab in the Log pane is the UI for this plugin.  The
    bar at
    the top is a search bar, editable to allow complex search
    queries.  It
    is pre-populated with all existing tags in the outline, and
    remembers
    your custom searches within the given session.  It also acts
    double duty
    as an input box for the add (+) button, which adds the contents
    of the
    search bar as a tag to the currently selected node.

    The list box in the middle is a list of headlines of nodes which
    contain
    the tag(s) defined by the current search string.  These are
    clickable,
    and doing so will center the focus in the outline pane on the
    selected node.

    Below the list box is a dynamic display of tags on the currently
    selected node.  Left-clicking on any of these will populate the
    search
    bar with that tag, allowing you to explore similarly tagged nodes.
    Right-clicking on a tag will remove it from the currently
    selected node.

    The status line at the bottom is purely informational.

    The tag browser has set-algebra querying possible.  Users may
    search for
    strings like 'foo&bar', to get nodes with both tags foo and bar, or
    'foo|bar' to get nodes with either or both.  Set difference (-) and
    symmetric set difference (^) are supported as well.  These
    queries are
    left-associative, meaning they are read from left to right, with no
    other precedence.  Parentheses are not supported. See below for more
    details.

    Searching
    ---------

    Searching on tags in the UI is based on set algebra.  The following
    syntax is used::

         <tag>&<tag> - return nodes tagged with both the given tags
         <tag>|<tag> - return nodes tagged with either of the given
    tags (or
    both)
         <tag>-<tag> - return nodes tagged with the first tag, but
    not the
    second tag
         <tag>^<tag> - return nodes tagged with either of the given tags
    (but *not* both)

    These may be combined, and are applied left-associatively,
    building the
    set from the left, such that the query `foo&bar^baz` will return
    only
    nodes tagged both 'foo' and 'bar', or nodes tagged with 'baz',
    but *not*
    tagged with all three.

    Tag Limitations
    ---------------
    The API is unlimited in tagging abilities.  If you do not wish to
    use
    the UI, then the API may be used to tag nodes with any arbitrary
    strings.  The UI, however, due to searching capabilities, may
    *not* be
    used to tag (or search for) nodes with tags containing the special
    search characters, `&|-^`.  The UI also cannot search for tags of
    zero-length, and it automatically removes surrounding whitespace
    (calling .strip()).
    ----

    Any comments would be welcome -- thanks!
    -->Jake

--
You received this message because you are subscribed to the Google Groups "leo-editor" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
Visit this group at http://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.


--
You received this message because you are subscribed to the Google Groups 
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/leo-editor.
For more options, visit https://groups.google.com/d/optout.

Reply via email to