mirror of
https://github.com/zsh-users/zsh
synced 2024-07-21 10:14:19 +00:00
42156: new CHECK_RUNNING_JOBS option demanded by bash groupies
Also new job options. Also suppress debug error if rows or columns are reported as zero as this is normal without a physical terminal.
This commit is contained in:
parent
349c95765a
commit
5f6a52c06c
10
ChangeLog
10
ChangeLog
|
@ -1,5 +1,15 @@
|
|||
2017-12-22 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||
|
||||
* dana: 42156 with tweak as per 42158: Doc/Zsh/options.yo,
|
||||
Src/builtin.c, Src/options.c, Src/utils.c, Src/zsh.h,
|
||||
Test/W02jobs.ztst: add CHECK_RUNNING_JOBS opion and job tests;
|
||||
remove debug error when rows or columns are zero as this is
|
||||
normal without a physical terminal.
|
||||
|
||||
* dana: 42156: Doc/Zsh/options.yo, Src/builtin.c,
|
||||
Src/options.c, Src/zsh.h, Test/W02jobs.ztst: new
|
||||
CHECK_RUNNING_JOBS option demanded by bash groupies.
|
||||
|
||||
* danda: 42155: Completion/Unix/Command/_ssh: various
|
||||
improvements for OpenSSH.
|
||||
|
||||
|
|
|
@ -817,7 +817,7 @@ zsh sessions will all have the new entries from their history lists
|
|||
added to the history file, in the order that they exit.
|
||||
The file will still be periodically re-written to trim it when the
|
||||
number of lines grows 20% beyond the value specified by
|
||||
tt($SAVEHIST) (see also the HIST_SAVE_BY_COPY option).
|
||||
tt($SAVEHIST) (see also the tt(HIST_SAVE_BY_COPY) option).
|
||||
)
|
||||
pindex(BANG_HIST)
|
||||
pindex(NO_BANG_HIST)
|
||||
|
@ -1429,6 +1429,19 @@ ifnzman(the section Special Functions in noderef(Functions))\
|
|||
ifzman(the section SPECIAL FUNCTIONS in zmanref(zshmisc))
|
||||
is not counted for this purpose.
|
||||
)
|
||||
pindex(CHECK_RUNNING_JOBS)
|
||||
pindex(NO_CHECK_RUNNING_JOBS)
|
||||
pindex(CHECKRUNNINGJOBS)
|
||||
pindex(NOCHECKRUNNINGJOBS)
|
||||
cindex(exiting, checking running jobs when)
|
||||
cindex(logging out, checking running jobs when)
|
||||
item(tt(CHECK_RUNNING_JOBS) <Z>)(
|
||||
Check for both running and suspended jobs when tt(CHECK_JOBS) is enabled.
|
||||
When this option is disabled, zsh checks only for suspended jobs, which
|
||||
matches the default behavior of bash.
|
||||
|
||||
This option has no effect unless tt(CHECK_JOBS) is set.
|
||||
)
|
||||
pindex(HUP)
|
||||
pindex(NO_HUP)
|
||||
pindex(NOHUP)
|
||||
|
@ -1443,7 +1456,7 @@ pindex(LONGLISTJOBS)
|
|||
pindex(NOLONGLISTJOBS)
|
||||
cindex(jobs, list format)
|
||||
item(tt(LONG_LIST_JOBS) (tt(-R)))(
|
||||
List jobs in the long format by default.
|
||||
Print job notifications in the long format by default.
|
||||
)
|
||||
pindex(MONITOR)
|
||||
pindex(NO_MONITOR)
|
||||
|
|
|
@ -5594,7 +5594,8 @@ checkjobs(void)
|
|||
|
||||
for (i = 1; i <= maxjob; i++)
|
||||
if (i != thisjob && (jobtab[i].stat & STAT_LOCKED) &&
|
||||
!(jobtab[i].stat & STAT_NOPRINT))
|
||||
!(jobtab[i].stat & STAT_NOPRINT) &&
|
||||
(isset(CHECKRUNNINGJOBS) || jobtab[i].stat & STAT_STOPPED))
|
||||
break;
|
||||
if (i <= maxjob) {
|
||||
if (jobtab[i].stat & STAT_STOPPED) {
|
||||
|
|
|
@ -111,6 +111,7 @@ static struct optname optns[] = {
|
|||
{{NULL, "chasedots", OPT_EMULATE}, CHASEDOTS},
|
||||
{{NULL, "chaselinks", OPT_EMULATE}, CHASELINKS},
|
||||
{{NULL, "checkjobs", OPT_EMULATE|OPT_ZSH}, CHECKJOBS},
|
||||
{{NULL, "checkrunningjobs", OPT_EMULATE|OPT_ZSH}, CHECKRUNNINGJOBS},
|
||||
{{NULL, "clobber", OPT_EMULATE|OPT_ALL}, CLOBBER},
|
||||
{{NULL, "combiningchars", 0}, COMBININGCHARS},
|
||||
{{NULL, "completealiases", 0}, COMPLETEALIASES},
|
||||
|
|
|
@ -1832,7 +1832,7 @@ adjustlines(int signalled)
|
|||
else
|
||||
shttyinfo.winsize.ws_row = zterm_lines;
|
||||
#endif /* TIOCGWINSZ */
|
||||
if (zterm_lines <= 0) {
|
||||
if (zterm_lines < 0) {
|
||||
DPUTS(signalled, "BUG: Impossible TIOCGWINSZ rows");
|
||||
zterm_lines = tclines > 0 ? tclines : 24;
|
||||
}
|
||||
|
@ -1856,7 +1856,7 @@ adjustcolumns(int signalled)
|
|||
else
|
||||
shttyinfo.winsize.ws_col = zterm_columns;
|
||||
#endif /* TIOCGWINSZ */
|
||||
if (zterm_columns <= 0) {
|
||||
if (zterm_columns < 0) {
|
||||
DPUTS(signalled, "BUG: Impossible TIOCGWINSZ cols");
|
||||
zterm_columns = tccolumns > 0 ? tccolumns : 80;
|
||||
}
|
||||
|
|
|
@ -2339,6 +2339,7 @@ enum {
|
|||
CHASEDOTS,
|
||||
CHASELINKS,
|
||||
CHECKJOBS,
|
||||
CHECKRUNNINGJOBS,
|
||||
CLOBBER,
|
||||
APPENDCREATE,
|
||||
COMBININGCHARS,
|
||||
|
|
186
Test/W02jobs.ztst
Normal file
186
Test/W02jobs.ztst
Normal file
|
@ -0,0 +1,186 @@
|
|||
# Tests for interactive job control
|
||||
|
||||
%prep
|
||||
|
||||
if [[ $OSTYPE == cygwin ]]; then
|
||||
ZTST_unimplemented='the zsh/zpty module does not work on Cygwin'
|
||||
elif zmodload zsh/zpty 2> /dev/null; then
|
||||
zpty_start() {
|
||||
export PS1= PS2=
|
||||
zpty -d
|
||||
zpty zsh "${(q)ZTST_testdir}/../Src/zsh -fiV +Z"
|
||||
}
|
||||
zpty_input() {
|
||||
zpty -w zsh "${(F)@}" $'\n'
|
||||
}
|
||||
zpty_stop() {
|
||||
# exit twice in case of check_jobs
|
||||
zpty -w zsh $'exit\nexit\n'
|
||||
# zpty gives no output when piped without these braces (?)
|
||||
{ zpty -r zsh } | sed $'/[^[:space:]]/!d; s/\r$//;'
|
||||
zpty -d
|
||||
:
|
||||
}
|
||||
else
|
||||
ZTST_unimplemented='the zsh/zpty module is not available'
|
||||
fi
|
||||
|
||||
%test
|
||||
|
||||
zpty_start
|
||||
zpty_input 'setopt no_long_list_jobs'
|
||||
zpty_input ': &'
|
||||
zpty_input 'wait'
|
||||
zpty_stop
|
||||
0:job notification with no_long_list_jobs
|
||||
*>\[1] [0-9]##
|
||||
*>\[1] + done[[:space:]]##:
|
||||
|
||||
zpty_start
|
||||
zpty_input 'setopt long_list_jobs'
|
||||
zpty_input ': &'
|
||||
zpty_input 'wait'
|
||||
zpty_stop
|
||||
0:job notification with long_list_jobs
|
||||
*>\[1] [0-9]##
|
||||
*>\[1] + [0-9]## done[[:space:]]##:
|
||||
|
||||
zpty_start
|
||||
zpty_input 'setopt no_hup no_check_jobs'
|
||||
zpty_input 'sleep 3 &'
|
||||
zpty_stop
|
||||
0:running job with no_hup + no_check_jobs
|
||||
*>\[1] [0-9]##
|
||||
|
||||
zpty_start
|
||||
zpty_input 'setopt no_check_jobs'
|
||||
zpty_input 'sleep 3 &'
|
||||
zpty_stop
|
||||
0:running job with no_check_jobs
|
||||
*>\[1] [0-9]##
|
||||
*>zsh:*SIGHUPed*
|
||||
|
||||
zpty_start
|
||||
zpty_input 'setopt check_jobs no_check_running_jobs'
|
||||
zpty_input 'sleep 3 &'
|
||||
zpty_stop
|
||||
0:running job with check_jobs + no_check_running_jobs
|
||||
*>\[1] [0-9]##
|
||||
*>zsh:*SIGHUPed*
|
||||
|
||||
zpty_start
|
||||
zpty_input 'setopt check_jobs check_running_jobs'
|
||||
zpty_input 'sleep 3 &'
|
||||
zpty_stop
|
||||
0:running job with check_jobs + check_running_jobs
|
||||
*>\[1] [0-9]##
|
||||
*>zsh:*running jobs*
|
||||
*>zsh:*SIGHUPed*
|
||||
|
||||
zpty_start
|
||||
zpty_input 'setopt check_jobs no_check_running_jobs'
|
||||
zpty_input 'sleep 3'
|
||||
sleep 0.1
|
||||
zpty_input $'\C-z'
|
||||
zpty_stop
|
||||
0:suspended job with check_jobs + no_check_running_jobs
|
||||
*>zsh:*(stopped|suspended)*sleep*
|
||||
*>zsh:*(stopped|suspended) jobs*
|
||||
# no 'SIGHUPed' message for suspended jobs
|
||||
|
||||
zpty_start
|
||||
zpty_input 'setopt check_jobs check_running_jobs'
|
||||
zpty_input 'sleep 3'
|
||||
sleep 0.1
|
||||
zpty_input $'\C-z'
|
||||
zpty_stop
|
||||
0:suspended job with check_jobs + check_running_jobs
|
||||
*>zsh:*(stopped|suspended)*sleep*
|
||||
*>zsh:*(stopped|suspended) jobs*
|
||||
# no 'SIGHUPed' message for suspended jobs
|
||||
|
||||
zpty_start
|
||||
zpty_input 'sleep 5 & sleep 4 & sleep 3 &'
|
||||
zpty_input 'jobs'
|
||||
zpty_stop
|
||||
0:`jobs` (misc.) with multiple running jobs
|
||||
*>\[1] [0-9]##
|
||||
*>\[2] [0-9]##
|
||||
*>\[3] [0-9]##
|
||||
*>\[1] running*sleep 5*
|
||||
*>\[2] - running*sleep 4*
|
||||
*>\[3] + running*sleep 3*
|
||||
*>zsh:*SIGHUPed*
|
||||
|
||||
zpty_start
|
||||
zpty_input 'sleep 3 &'
|
||||
zpty_input 'jobs -l'
|
||||
zpty_input 'jobs -p'
|
||||
zpty_stop
|
||||
0:`jobs -l` and `jobs -p` with running job
|
||||
*>\[1] [0-9]##
|
||||
*>\[1] + [0-9]## running*sleep*
|
||||
*>\[1] + [0-9]## running*sleep*
|
||||
*>zsh:*SIGHUPed*
|
||||
|
||||
zpty_start
|
||||
zpty_input 'sleep 3 &'
|
||||
zpty_input 'jobs -d'
|
||||
zpty_stop
|
||||
0:`jobs -d` with running job
|
||||
*>\[1] [0-9]##
|
||||
*>\[1] + running*sleep*
|
||||
*>\(pwd : ?*\)
|
||||
*>zsh:*SIGHUPed*
|
||||
|
||||
zpty_start
|
||||
zpty_input 'sleep 3 &'
|
||||
zpty_input 'jobs -r'
|
||||
zpty_input 'print -- -'
|
||||
zpty_input 'jobs -s'
|
||||
zpty_stop
|
||||
0:`jobs -r` and `jobs -s` with running job
|
||||
*>\[1] [0-9]##
|
||||
*>\[1] + running*sleep*
|
||||
*>-
|
||||
*>zsh:*SIGHUPed*
|
||||
|
||||
zpty_start
|
||||
zpty_input 'sleep 5'
|
||||
sleep 0.1
|
||||
zpty_input $'\C-z'
|
||||
zpty_input 'jobs -r'
|
||||
zpty_input 'print -- -'
|
||||
zpty_input 'jobs -s'
|
||||
zpty_stop
|
||||
0:`jobs -r` and `jobs -s` with suspended job
|
||||
*>zsh:*(stopped|suspended)*sleep*
|
||||
*>-
|
||||
*>\[1] + (stopped|suspended)*sleep*
|
||||
# no 'SIGHUPed' message for suspended jobs
|
||||
|
||||
zpty_start
|
||||
zpty_input 'sleep 10 & sleep 9 & sleep 8 & sleep 7 &'
|
||||
sleep 0.1
|
||||
zpty_input 'kill %4'
|
||||
sleep 0.1
|
||||
zpty_input 'kill -HUP %3'
|
||||
sleep 0.1
|
||||
zpty_input 'kill -INT %2'
|
||||
sleep 0.1
|
||||
zpty_input 'kill -KILL %1'
|
||||
sleep 0.1
|
||||
zpty_stop
|
||||
0:various `kill` signals with multiple running jobs
|
||||
*>\[1] [0-9]##
|
||||
*>\[2] [0-9]##
|
||||
*>\[3] [0-9]##
|
||||
*>\[4] [0-9]##
|
||||
*>\[4] ? terminate*sleep*
|
||||
*>\[3] ? hangup*sleep*
|
||||
*>\[2] ? interrupt*sleep*
|
||||
*>\[1] ? kill*sleep*
|
||||
|
||||
%clean
|
||||
|
||||
zmodload -ui zsh/zpty
|
Loading…
Reference in a new issue