You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.1 KiB
96 lines
2.1 KiB
# Copy this file into /usr/share/zsh/site-functions/ |
|
# and add 'autoload n-kill` to .zshrc |
|
# |
|
# This function allows to choose a process and a signal to send to it |
|
# |
|
# Uses n-list |
|
|
|
emulate -L zsh |
|
|
|
setopt extendedglob |
|
zmodload zsh/curses |
|
|
|
local IFS=" |
|
" |
|
|
|
[ -f ~/.config/znt/n-list.conf ] && builtin source ~/.config/znt/n-list.conf |
|
[ -f ~/.config/znt/n-kill.conf ] && builtin source ~/.config/znt/n-kill.conf |
|
|
|
typeset -A signals |
|
signals=( |
|
1 "1 - HUP" |
|
2 "2 - INT" |
|
3 "3 - QUIT" |
|
6 "6 - ABRT" |
|
9 "9 - KILL" |
|
14 "14 - ALRM" |
|
15 "15 - TERM" |
|
17 "17 - STOP" |
|
19 "19 - CONT" |
|
) |
|
|
|
local list |
|
local selected |
|
local signal |
|
local -a signal_names |
|
local title |
|
|
|
NLIST_REMEMBER_STATE=0 |
|
|
|
typeset -a NLIST_NONSELECTABLE_ELEMENTS |
|
NLIST_NONSELECTABLE_ELEMENTS=( 1 ) |
|
|
|
type ps 2>/dev/null 1>&2 || { echo >&2 "Error: \`ps' not found"; return 1 } |
|
|
|
case "$OSTYPE" in |
|
cygwin*) list=( `command ps -Wa` ) ;; |
|
*) list=( `command ps -o pid,uid,command -A` ) ;; |
|
esac |
|
|
|
# Ask of PID |
|
title=$'\x1b[00;31m'"${list[1]}"$'\x1b[00;00m\0' |
|
shift list |
|
list=( "$title" "${(@M)list:#(#i)*$1*}" ) |
|
|
|
local NLIST_GREP_STRING="$1" |
|
|
|
if [ "$#list" -eq 1 ]; then |
|
echo "No matching processes" |
|
return 1 |
|
fi |
|
|
|
n-list "$list[@]" |
|
|
|
# Got answer? (could be Ctrl-C or 'q') |
|
if [ "$REPLY" -gt 0 ]; then |
|
selected="$reply[REPLY]" |
|
selected="${selected## #}" |
|
pid="${selected%% *}" |
|
|
|
# Now ask of signal |
|
signal_names=( ${(vin)signals} ) |
|
typeset -a NLIST_HOP_INDEXES |
|
NLIST_HOP_INDEXES=( 3 6 8 ) |
|
unset NLIST_COLORING_PATTERN |
|
n-list $'\x1b[00;31mSelect signal:\x1b[00;00m' "$signal_names[@]" |
|
|
|
if [ "$REPLY" -gt 0 ]; then |
|
selected="$reply[REPLY]" |
|
signal="${(k)signals[(r)$selected]}" |
|
|
|
# ZLE? |
|
if [ "${(t)CURSOR}" = "integer-local-special" ]; then |
|
zle redisplay |
|
zle kill-whole-line |
|
zle -U "kill -$signal $pid" |
|
else |
|
print -zr "kill -$signal $pid" |
|
fi |
|
else |
|
[ "${(t)CURSOR}" = "integer-local-special" ] && zle redisplay |
|
fi |
|
else |
|
[ "${(t)CURSOR}" = "integer-local-special" ] && zle redisplay |
|
fi |
|
|
|
# vim: set filetype=zsh:
|
|
|