Dotfiles update 2025-12-25 16:43
This commit is contained in:
@@ -18,7 +18,17 @@ typeset -g _DF_FZF_EXTRAS_LOADED=1
|
|||||||
|
|
||||||
# Source utils
|
# Source utils
|
||||||
source "${0:A:h}/../lib/utils.zsh" 2>/dev/null || \
|
source "${0:A:h}/../lib/utils.zsh" 2>/dev/null || \
|
||||||
source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null
|
source "$HOME/.dotfiles/zsh/lib/utils.zsh" 2>/dev/null || {
|
||||||
|
# Fallback definitions
|
||||||
|
DF_GREEN=$'\033[0;32m' DF_YELLOW=$'\033[1;33m' DF_RED=$'\033[0;31m'
|
||||||
|
DF_CYAN=$'\033[0;36m' DF_BLUE=$'\033[0;34m' DF_NC=$'\033[0m'
|
||||||
|
df_print_error() { echo -e "${DF_RED}✗${DF_NC} $1" >&2; }
|
||||||
|
df_print_success() { echo -e "${DF_GREEN}✓${DF_NC} $1"; }
|
||||||
|
df_print_warning() { echo -e "${DF_YELLOW}⚠${DF_NC} $1"; }
|
||||||
|
df_print_info() { echo -e "${DF_CYAN}ℹ${DF_NC} $1"; }
|
||||||
|
df_print_step() { echo -e "${DF_BLUE}==>${DF_NC} $1"; }
|
||||||
|
df_print_section() { echo -e "${DF_CYAN}$1:${DF_NC}"; }
|
||||||
|
}
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Check FZF
|
# Check FZF
|
||||||
@@ -181,38 +191,45 @@ path-add() {
|
|||||||
procf() {
|
procf() {
|
||||||
_fzf_check || return 1
|
_fzf_check || return 1
|
||||||
|
|
||||||
|
# Preview without sudo - only show info accessible to current user
|
||||||
local selected=$(ps aux --sort=-%mem | \
|
local selected=$(ps aux --sort=-%mem | \
|
||||||
fzf $(_fzf_common_opts) \
|
fzf $(_fzf_common_opts) \
|
||||||
--prompt="Process > " \
|
--prompt="Process > " \
|
||||||
--header-lines=1 \
|
--header-lines=1 \
|
||||||
--preview='pid=$(echo {} | awk "{print \$2}");
|
--preview='pid=$(echo {} | awk "{print \$2}");
|
||||||
echo "=== Process Details ==="
|
echo "=== Process Details ==="
|
||||||
ps -p $pid -o pid,ppid,user,%cpu,%mem,stat,start,time,cmd 2>/dev/null
|
ps -p $pid -o pid,ppid,user,%cpu,%mem,stat,start,time,args 2>/dev/null || echo "Process may have exited"
|
||||||
echo ""
|
echo ""
|
||||||
echo "=== Open Files (first 10) ==="
|
echo "=== Command Line ==="
|
||||||
sudo lsof -p $pid 2>/dev/null | head -10 || echo "(requires sudo)"
|
cat /proc/$pid/cmdline 2>/dev/null | tr "\0" " " || echo "(not accessible)"
|
||||||
echo ""
|
echo ""
|
||||||
echo "=== Environment (first 10) ==="
|
echo "=== Working Directory ==="
|
||||||
sudo cat /proc/$pid/environ 2>/dev/null | tr "\0" "\n" | head -10 || echo "(requires sudo)"' \
|
readlink /proc/$pid/cwd 2>/dev/null || echo "(not accessible)"
|
||||||
|
echo ""
|
||||||
|
echo "=== File Descriptors (owned by you) ==="
|
||||||
|
ls -l /proc/$pid/fd 2>/dev/null | head -10 || echo "(not accessible)"' \
|
||||||
--preview-window=right:50%:wrap \
|
--preview-window=right:50%:wrap \
|
||||||
--header="Process list | Enter: details | Ctrl-K: kill")
|
--header="Process list | Enter: actions | (sorted by memory)")
|
||||||
|
|
||||||
[[ -z "$selected" ]] && return
|
[[ -z "$selected" ]] && return
|
||||||
|
|
||||||
local pid=$(echo "$selected" | awk '{print $2}')
|
local pid=$(echo "$selected" | awk '{print $2}')
|
||||||
|
local user=$(echo "$selected" | awk '{print $1}')
|
||||||
local cmd=$(echo "$selected" | awk '{for(i=11;i<=NF;i++) printf $i" "; print ""}')
|
local cmd=$(echo "$selected" | awk '{for(i=11;i<=NF;i++) printf $i" "; print ""}')
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
df_print_section "Selected Process"
|
df_print_section "Selected Process"
|
||||||
echo " PID: $pid"
|
echo " PID: $pid"
|
||||||
echo " CMD: $cmd"
|
echo " User: $user"
|
||||||
|
echo " CMD: ${cmd:0:60}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Actions:"
|
echo "Actions:"
|
||||||
echo " 1) Show details"
|
echo " 1) Show full details"
|
||||||
echo " 2) Send SIGTERM (graceful)"
|
echo " 2) Send SIGTERM (graceful stop)"
|
||||||
echo " 3) Send SIGKILL (force)"
|
echo " 3) Send SIGKILL (force kill)"
|
||||||
echo " 4) Send SIGHUP (reload)"
|
echo " 4) Send SIGHUP (reload config)"
|
||||||
echo " 5) Cancel"
|
echo " 5) Open files (requires sudo)"
|
||||||
|
echo " 6) Cancel"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
read -k1 "action?Action [1]: "
|
read -k1 "action?Action [1]: "
|
||||||
@@ -220,19 +237,44 @@ procf() {
|
|||||||
|
|
||||||
case "${action:-1}" in
|
case "${action:-1}" in
|
||||||
1)
|
1)
|
||||||
|
echo ""
|
||||||
ps -p "$pid" -f
|
ps -p "$pid" -f
|
||||||
|
echo ""
|
||||||
|
echo "Command line:"
|
||||||
|
cat /proc/$pid/cmdline 2>/dev/null | tr '\0' ' '
|
||||||
|
echo ""
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
df_print_step "Sending SIGTERM to $pid..."
|
df_print_step "Sending SIGTERM to $pid..."
|
||||||
kill -TERM "$pid" 2>/dev/null && df_print_success "Signal sent" || df_print_error "Failed (try sudo)"
|
if kill -TERM "$pid" 2>/dev/null; then
|
||||||
|
df_print_success "Signal sent"
|
||||||
|
else
|
||||||
|
df_print_warning "Failed - trying with sudo..."
|
||||||
|
sudo kill -TERM "$pid" && df_print_success "Signal sent" || df_print_error "Failed"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
df_print_step "Sending SIGKILL to $pid..."
|
df_print_step "Sending SIGKILL to $pid..."
|
||||||
kill -KILL "$pid" 2>/dev/null && df_print_success "Signal sent" || df_print_error "Failed (try sudo)"
|
if kill -KILL "$pid" 2>/dev/null; then
|
||||||
|
df_print_success "Signal sent"
|
||||||
|
else
|
||||||
|
df_print_warning "Failed - trying with sudo..."
|
||||||
|
sudo kill -KILL "$pid" && df_print_success "Signal sent" || df_print_error "Failed"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
df_print_step "Sending SIGHUP to $pid..."
|
df_print_step "Sending SIGHUP to $pid..."
|
||||||
kill -HUP "$pid" 2>/dev/null && df_print_success "Signal sent" || df_print_error "Failed (try sudo)"
|
if kill -HUP "$pid" 2>/dev/null; then
|
||||||
|
df_print_success "Signal sent"
|
||||||
|
else
|
||||||
|
df_print_warning "Failed - trying with sudo..."
|
||||||
|
sudo kill -HUP "$pid" && df_print_success "Signal sent" || df_print_error "Failed"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
echo ""
|
||||||
|
df_print_step "Open files for PID $pid:"
|
||||||
|
sudo lsof -p "$pid" 2>/dev/null | head -30 || df_print_error "Failed to get open files"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Cancelled"
|
echo "Cancelled"
|
||||||
@@ -249,6 +291,8 @@ killf() {
|
|||||||
--prompt="Kill > " \
|
--prompt="Kill > " \
|
||||||
--header-lines=1 \
|
--header-lines=1 \
|
||||||
--multi \
|
--multi \
|
||||||
|
--preview='pid=$(echo {} | awk "{print \$2}");
|
||||||
|
ps -p $pid -o pid,ppid,user,%cpu,%mem,stat,args 2>/dev/null' \
|
||||||
--header="Select process(es) to kill (Tab to select multiple)")
|
--header="Select process(es) to kill (Tab to select multiple)")
|
||||||
|
|
||||||
[[ -z "$selected" ]] && return
|
[[ -z "$selected" ]] && return
|
||||||
@@ -257,8 +301,13 @@ killf() {
|
|||||||
local pid=$(echo "$line" | awk '{print $2}')
|
local pid=$(echo "$line" | awk '{print $2}')
|
||||||
local cmd=$(echo "$line" | awk '{for(i=11;i<=NF;i++) printf $i" "; print ""}')
|
local cmd=$(echo "$line" | awk '{for(i=11;i<=NF;i++) printf $i" "; print ""}')
|
||||||
|
|
||||||
df_print_step "Killing PID $pid ($cmd)"
|
df_print_step "Killing PID $pid (${cmd:0:40})"
|
||||||
kill "$pid" 2>/dev/null && df_print_success "Killed" || df_print_error "Failed"
|
if kill "$pid" 2>/dev/null; then
|
||||||
|
df_print_success "Killed"
|
||||||
|
else
|
||||||
|
df_print_warning "Trying with sudo..."
|
||||||
|
sudo kill "$pid" && df_print_success "Killed" || df_print_error "Failed"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,8 +508,8 @@ glogf() {
|
|||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
fzf-help() {
|
fzf-help() {
|
||||||
df_print_func_name "FZF Utilities"
|
|
||||||
cat << 'EOF'
|
cat << 'EOF'
|
||||||
|
FZF Utilities
|
||||||
|
|
||||||
Environment:
|
Environment:
|
||||||
envf Browse environment variables
|
envf Browse environment variables
|
||||||
|
|||||||
Reference in New Issue
Block a user