diff --git a/dotfiles/kakoune.nix b/dotfiles/kakoune.nix index a61013e..06a3b3d 100644 --- a/dotfiles/kakoune.nix +++ b/dotfiles/kakoune.nix @@ -292,6 +292,9 @@ in { set-option buffer softtabstop 2 set-option buffer tabstop 2 set-option buffer indentwidth 2 + + map buffer normal ': outline-jump-ruby' + map buffer goto d 'w: outline-jump-ruby %val{selection}' -docstring 'Def (same file)' } hook global WinSetOption filetype=ts %{ diff --git a/pkgs/kak-tree-grepper/rc/kak-tree-grepper.kak b/pkgs/kak-tree-grepper/rc/kak-tree-grepper.kak index 27b9e5d..69fa82a 100644 --- a/pkgs/kak-tree-grepper/rc/kak-tree-grepper.kak +++ b/pkgs/kak-tree-grepper/rc/kak-tree-grepper.kak @@ -25,3 +25,27 @@ define-command -override -docstring "jump somewhere in an Elm file's definition printf "evaluate-commands -client %s edit %s\n" "$CLIENT" "$EDIT_LOCATION" | indiekak -p "$SESSION" } -- %opt{tree_grepper_path} %opt{tree_grepper_fzf_path} %val{bufname} %arg{1} %val{client} %val{session} } + +define-command -override -docstring "jump somewhere in a Ruby file's definition outline" -params 0..1 outline-jump-ruby %{ + tmux-terminal-horizontal sh -c %{ + set -euo pipefail + + # what tools do we have available? + TREE_GREPPER=${1:-tree-grepper} + FZF=${2:-fzf} + + # what do we care about? + FILE=$3 + FZF_QUERY=$4 + + # where do we return results? + CLIENT=$5 + SESSION=$6 + + # do the magic! + QUERY="(module name: (_) @module) (class name: (_) @class) (method name: (_) @method) (singleton_method name: (_) @singleton-method) (assignment left: (_) @assignment) (operator_assignment left: (_) @assignment)" + + EDIT_LOCATION="$("$TREE_GREPPER" --language ruby "$QUERY" "$FILE" | fzf --with-nth 4,5 --nth 2,1 --delimiter=: --query "$FZF_QUERY" --select-1 | cut -d : -f 1-3 | tr : ' ')" + printf "evaluate-commands -client %s edit %s\n" "$CLIENT" "$EDIT_LOCATION" | indiekak -p "$SESSION" + } -- %opt{tree_grepper_path} %opt{tree_grepper_fzf_path} %val{bufname} %arg{1} %val{client} %val{session} +}