d9d492c214
Alt+. now cycles through all whitespace-split tokens from history (most recent first, last arg first within each command) using env var state. Alt+, opens a skim fuzzy picker over full history commands and inserts the selected entry at the cursor.
82 lines
2.5 KiB
Nu
82 lines
2.5 KiB
Nu
# Processes sorted by CPU, optionally filtered by name
|
|
def psk [query?: string] {
|
|
ps | sort-by cpu -r
|
|
| if $query != null { where name =~ $query } else { $in }
|
|
}
|
|
|
|
# Listening TCP ports with process info
|
|
def ports [] {
|
|
^ss -tlnp
|
|
| detect columns
|
|
| rename state recv-q send-q local peer process
|
|
| each {|r| $r | upsert port (try { $r.local | split row ":" | last | into int } catch { null })}
|
|
| select state local port process
|
|
| sort-by port
|
|
}
|
|
|
|
# Repeatedly clears and reruns a closure — nu-native watch replacement
|
|
def rewatch [interval: duration, cmd: closure] {
|
|
loop {
|
|
clear
|
|
let dim = $env.config.color_config.hints
|
|
print $"(ansi { fg: $dim })(date now | format date '%H:%M:%S')(ansi reset)"
|
|
do $cmd | print
|
|
sleep $interval
|
|
}
|
|
}
|
|
|
|
# Cycle through all history args on repeated Alt+. presses
|
|
def --env last-arg-cycle [] {
|
|
let skip = ["|" "&&" "||" ";" ">" ">>" "<" "&" "2>"]
|
|
let all_args = (
|
|
history
|
|
| get command
|
|
| reverse
|
|
| each { |cmd| $cmd | split row -r '\s+' | where { |w| ($w | str length) > 0 } | reverse | where { |w| not ($skip | any { $w == $in }) } }
|
|
| flatten
|
|
| where { |w| ($w | str length) > 0 }
|
|
)
|
|
if ($all_args | is-empty) { return }
|
|
|
|
let current = (commandline)
|
|
let last = ($env.NU_ALT_DOT_LAST? | default "")
|
|
let base = ($env.NU_ALT_DOT_BASE? | default "")
|
|
let idx = ($env.NU_ALT_DOT_IDX? | default (-1) | into int)
|
|
|
|
if $idx >= 0 and $current == $"($base)($last)" {
|
|
let next_idx = (($idx + 1) mod ($all_args | length))
|
|
let next = ($all_args | get $next_idx)
|
|
commandline edit --replace $"($base)($next)"
|
|
$env.NU_ALT_DOT_IDX = $next_idx
|
|
$env.NU_ALT_DOT_LAST = $next
|
|
} else {
|
|
let first = ($all_args | get 0)
|
|
commandline edit --insert $first
|
|
$env.NU_ALT_DOT_BASE = $current
|
|
$env.NU_ALT_DOT_IDX = 0
|
|
$env.NU_ALT_DOT_LAST = $first
|
|
}
|
|
}
|
|
|
|
# Fuzzy-pick a full command from history and insert at cursor (Alt+,)
|
|
def --env history-cmd-pick [] {
|
|
let cmd = try {
|
|
history
|
|
| get command
|
|
| reverse
|
|
| uniq
|
|
| sk --prompt "history> " --height "40%" --reverse --no-sort
|
|
| str trim
|
|
} catch { "" }
|
|
if ($cmd | str length) > 0 {
|
|
commandline edit --insert $cmd
|
|
}
|
|
}
|
|
|
|
# Environment variables as a filterable sorted table
|
|
def envs [query?: string] {
|
|
$env | transpose key value
|
|
| if $query != null { where key =~ $query } else { $in }
|
|
| sort-by key
|
|
}
|