ul / kak-tree

Structural selections for Kakoune
The Unlicense
100 stars 10 forks source link

Script to show the different navigation options dynamically #12

Open danr opened 4 years ago

danr commented 4 years ago

Hi, I wanted to explore what parts of the buffer the different navigation functions span in an interactive and dynamic way so I wrote this script. Wasn't sure where to post it so posting it here in case someone finds it interesting:

try %{
    decl range-specs tree_first
    decl range-specs tree_next
    decl range-specs tree_prev
    decl range-specs tree_parent
    decl range-specs tree_children
}
def dyntree %{
    rmhooks window tree
    try %{
        addhl window/ ranges tree_children
        addhl window/ ranges tree_first
        addhl window/ ranges tree_prev
        addhl window/ ranges tree_next
        addhl window/ ranges tree_parent
    }
    hook -group tree window NormalIdle .* %{
        set window tree_children %val{timestamp}
        set window tree_first %val{timestamp}
        set window tree_prev %val{timestamp}
        set window tree_next %val{timestamp}
        set window tree_parent %val{timestamp}
        eval -draft -itersel %{ try %{
            tree-select-next-node
            set -add window tree_next "%val{selection_desc}|default+b"
        }}
        eval -draft -itersel %{ try %{
            tree-select-previous-node
            set -add window tree_prev "%val{selection_desc}|default+i"
        }}
        eval -draft -itersel %{ try %{
            tree-select-parent-node
            set -add window tree_parent "%val{selection_desc}|default,rgb:333333"
        }}
        eval -draft -itersel %{ try %{
            tree-select-children
            eval -draft -itersel %{
                set -add window tree_children "%val{selection_desc}|default+u"
            }
        }}
        eval -draft -itersel %{ try %{
            tree-select-first
            set -add window tree_first "%val{selection_desc}|default,red"
        }}
    }
}
ul commented 4 years ago

Beautiful! Would you like it to be included in the plugin? PR is welcome =)