# History const fzf_history_selector = { name: fzf_history_selector modifier: alt keycode: char_r mode: [emacs, vi_insert, vi_normal] event: [ { send: executehostcommand cmd: " let result = history | reverse | get command | str replace --all (char newline) ' ' | to text | fzf --height 40% --reverse --border; commandline edit --append $result; commandline set-cursor --end " } ] } const fzf_file_selector = { name: fzf_file_selector modifier: alt keycode: char_f mode: [emacs, vi_insert, vi_normal] event: [ { send: executehostcommand cmd: " let result = (ls **/* | where type == 'file' | get name | to text | fzf --height 40% --reverse --border); commandline edit --append $result; commandline set-cursor --end " } ] } const fzf_dir_selector = { name: fzf_dir_selector modifier: alt keycode: char_d mode: [emacs, vi_insert, vi_normal] event: [ { send: executehostcommand cmd: " let result = (ls **/ | where type == 'dir' | get name | to text | fzf --height 40% --reverse --border); commandline edit --append $result; commandline set-cursor --end " } ] } # Append fzf keybindings to $env.config (defensive: works even if keybindings is absent). export-env { mut existing = ($env.config.keybindings? | default []) if not ($existing | any {|kb| $kb.name == "fzf_history_selector"}) { $existing = ($existing | append [$fzf_history_selector]) } if not ($existing | any {|kb| $kb.name == "fzf_file_selector"}) { $existing = ($existing | append [$fzf_file_selector]) } if not ($existing | any {|kb| $kb.name == "fzf_dir_selector"}) { $existing = ($existing | append [$fzf_dir_selector]) } $env.config = ($env.config? | default {} | upsert keybindings $existing) } export alias cdi = cd (ls **/ | get name | str join "\n" | fzf)