@ 261102.1

260523.7 · 290b18d9fe1f63f5ed7ab5639bad034563991146

shell: nushell integration scripts (#4630)

Co-authored-by: imsys <911254+imsys@users.noreply.github.com> Co-authored-by: Grzegorz Zalewski (Greg) <12560152+zalewskigrzegorz@users.noreply.github.com> Co-authored-by: René Jochum <rene@jochum.dev> Co-authored-by: Junegunn Choi <junegunn.c@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

reading declarations

Changes to shell/completion-examples.nu. All files

shell/completion-examples.nu

new file mode 100644@@ -0,0 +1,91 @@+#     ____      ____+#    / __/___  / __/+#   / /_/_  / / /_+#  / __/ / /_/ __/+# /_/   /___/_/ completion-examples.nu+#+# Example custom completers for fzf's Nushell integration.+#+# To use these, add the desired entries to $env.FZF_COMPLETERS in your+# config.nu. Each closure receives two arguments:+#   - prefix: the text before the trigger (e.g. "vim" in "vim **<TAB>")+#   - spans:  the full command as a list of words (e.g. ["pacman", "-S", "vim**"])+#+# A closure can return either:+#   - a list of candidate strings (fzf will use default options), or+#   - a record with the following optional fields:+#       candidates: list<string>          # candidates to feed to fzf+#       opts:       list<string>          # custom fzf options (default: ["-m"])+#       post:       closure (|sel| ...)   # post-processing of the selected item+#+# Simple example:+#   $env.FZF_COMPLETERS = {+#       git: {|prefix, spans| ["branch-main", "branch-dev", "branch-feature"]}+#   }++# --- pacman / paru ---+# Completes package names for pacman and paru.+# Uses the spans to distinguish between subcommands:+#   -S (sync), -F (files): list available packages from repos+#   -Q (query), -R (remove): list installed packages+# Returns a record with custom fzf options for package preview.++$env.FZF_COMPLETERS = {}++$env.FZF_COMPLETERS.pacman = {|prefix, spans|+    let sub = $spans | skip 1 | first+    let candidates = (if ($sub =~ "-[SF]") {+        ^pacman -Slq | lines+    } else if ($sub =~ "-[QR]") {+        ^pacman -Qq | lines+    } else {+        []+    })+    {+        candidates: $candidates+        opts: ["-m", "--preview", "pacman -Si {}", "--prompt", "Package > "]+    }+}++$env.FZF_COMPLETERS.paru = {|prefix, spans|+    let sub = $spans | skip 1 | first+    let candidates = (if ($sub =~ "-[SF]") {+        ^pacman -Slq | lines+    } else if ($sub =~ "-[QR]") {+        ^pacman -Qq | lines+    } else {+        []+    })+    {+        candidates: $candidates+        opts: ["-m", "--preview", "pacman -Si {}", "--prompt", "Package > "]+    }+}++# --- pass (password-store) ---+# Completes entry names from ~/.password-store.+# Returns a simple list (no custom fzf options needed).++$env.FZF_COMPLETERS.pass = {|prefix, spans|+    try {+        ls ~/.password-store/**/*.gpg+        | get name+        | each {$in | str replace -r '^.*?\.password-store/(.*).gpg' '${1}'}+    } catch {+        []+    }+}++# --- Example with post-processing hook ---+# The "post" closure transforms the selected line after fzf returns.+# This is useful when the displayed line contains more information than+# what you want inserted on the command line (e.g. extracting a PID from+# a full "ps" output line).+#+# $env.FZF_COMPLETERS.mycommand = {|prefix, spans|+#     {+#         candidates: (^some-command | lines)+#         opts: ["+m", "--header-lines=1"]+#         post: {|selection| $selection | split row ' ' | get 0}+#     }+# }