2015-08-07 00:49:02 +08:00
|
|
|
function suspend -d "Suspend the current shell."
|
2016-11-28 13:27:22 +08:00
|
|
|
if contains -- $argv --help
|
|
|
|
or contains -- $argv -h
|
|
|
|
__fish_print_help suspend
|
|
|
|
and return 0
|
2016-10-18 06:30:28 +08:00
|
|
|
end
|
2015-08-07 00:49:02 +08:00
|
|
|
if begin contains -- $argv --force
|
2016-07-01 16:53:43 +08:00
|
|
|
or not status --is-interactive and not status --is-login
|
|
|
|
end
|
2016-07-01 17:20:32 +08:00
|
|
|
printf "Suspending %d: %sfg%s to resume" %self (set_color --bold) (set_color normal)
|
2016-07-01 16:53:43 +08:00
|
|
|
if contains -- $argv --force
|
2016-07-01 17:20:32 +08:00
|
|
|
printf " (or%s kill -CONT %d%s from another terminal)" (set_color --bold) %self (set_color normal)
|
2016-07-01 16:53:43 +08:00
|
|
|
end
|
2016-07-01 17:20:32 +08:00
|
|
|
# XXX not sure if this echo should be necessary, but without it, it seems
|
|
|
|
# everything printf'd above will not get pushed back to stdout before the suspend
|
|
|
|
echo ""
|
2016-07-01 17:48:50 +08:00
|
|
|
# XXX always causes a zombie until one fg's when we do this:
|
2016-07-01 16:53:43 +08:00
|
|
|
kill -STOP %self
|
2015-08-07 00:49:02 +08:00
|
|
|
else
|
2016-07-01 16:53:43 +08:00
|
|
|
echo 2>&1 "Refusing to suspend login shell."
|
|
|
|
echo 2>&1 "Use --force to override. This might hang your terminal."
|
2015-08-07 00:49:02 +08:00
|
|
|
end
|
|
|
|
end
|