From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21515 invoked from network); 10 Feb 1997 13:22:11 -0000 Received: from euclid.skiles.gatech.edu (list@130.207.146.50) by coral.primenet.com.au with SMTP; 10 Feb 1997 13:22:11 -0000 Received: (from list@localhost) by euclid.skiles.gatech.edu (8.7.3/8.7.3) id IAA10058; Mon, 10 Feb 1997 08:10:11 -0500 (EST) Resent-Date: Mon, 10 Feb 1997 08:10:11 -0500 (EST) Message-Id: <199702101312.OAA05047@hydra.ifh.de> To: zsh-workers@math.gatech.edu (Zsh hackers list) Subject: directory message for jobs builtin Date: Mon, 10 Feb 1997 14:12:07 +0100 From: Peter Stephenson Resent-Message-ID: <"GfSfi2.0.5T2.oun_o"@euclid> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/2889 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu It struck me as a bit funny that, while you get `pwd' messages when starting a or suspending a job which you started in a different directory, there's no way of actually inquiring for the directory associated with a job, even though that is stored. This patch adds a `-d' option to jobs which prints thinks like (pwd : ~/src/zsh-3.1.1/Src) in exactly the same format as if you had run fg on the job started somewhere else. As you would expect, this doesn't take much new code. It should save me a bit of hunting around in time to come, but at heart I think it's just a matter of consistency. *** Doc/Zsh/builtins.yo.pwd Mon Feb 10 13:43:43 1997 --- Doc/Zsh/builtins.yo Mon Feb 10 13:52:40 1997 *************** *** 552,563 **** integers are not permitted. ) findex(jobs) ! item(tt(jobs) [ tt(-lprs) ] [ var(job) ... ])( Lists information about each given job, or all jobs if var(job) is omitted. The tt(-l) flag lists process IDs, and the tt(-p) flag lists process groups. If the tt(-r) flag is specified only running jobs will be listed and if the tt(-s) flag is given only stopped jobs are shown. ) findex(kill) cindex(killing jobs) --- 552,566 ---- integers are not permitted. ) findex(jobs) ! item(tt(jobs) [ tt(-dlprs) ] [ var(job) ... ])( Lists information about each given job, or all jobs if var(job) is omitted. The tt(-l) flag lists process IDs, and the tt(-p) flag lists process groups. If the tt(-r) flag is specified only running jobs will be listed and if the tt(-s) flag is given only stopped jobs are shown. + If the tt(-d) flag is given, the directory from which the job was + started (which may not be the current directory of the job) will also + be shown. ) findex(kill) cindex(killing jobs) *** Src/hashtable.h.pwd Mon Feb 10 10:36:26 1997 --- Src/hashtable.h Mon Feb 10 10:36:38 1997 *************** *** 298,304 **** {NULL, "history", 0, bin_fc, 0, -1, BIN_FC, "nrdDfEim", "l"}, {NULL, "integer", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, 0, "lrtux", "i"}, ! {NULL, "jobs", 0, bin_fg, 0, -1, BIN_JOBS, "lpZrs", NULL}, {NULL, "kill", 0, bin_kill, 0, -1, 0, NULL, NULL}, {NULL, "let", 0, bin_let, 1, -1, 0, NULL, NULL}, {NULL, "limit", 0, bin_limit, 0, -1, 0, "sh", NULL}, --- 298,304 ---- {NULL, "history", 0, bin_fc, 0, -1, BIN_FC, "nrdDfEim", "l"}, {NULL, "integer", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, 0, "lrtux", "i"}, ! {NULL, "jobs", 0, bin_fg, 0, -1, BIN_JOBS, "dlpZrs", NULL}, {NULL, "kill", 0, bin_kill, 0, -1, 0, NULL, NULL}, {NULL, "let", 0, bin_let, 1, -1, 0, NULL, NULL}, {NULL, "limit", 0, bin_limit, 0, -1, 0, "sh", NULL}, *** Src/jobs.c.pwd Mon Feb 10 10:35:47 1997 --- Src/jobs.c Mon Feb 10 13:57:15 1997 *************** *** 386,394 **** return ((j->procs->ti.ut + j->procs->ti.st) / clktck >= reporttime); } ! /* lng = 0 means jobs * ! * lng = 1 means jobs -l * ! * lng = 2 means jobs -p * * synch = 0 means asynchronous * synch = 1 means synchronous --- 386,395 ---- return ((j->procs->ti.ut + j->procs->ti.st) / clktck >= reporttime); } ! /* !(lng & 3) means jobs * ! * (lng & 1) means jobs -l * ! * (lng & 2) means jobs -p ! * (lng & 4) means jobs -d * * synch = 0 means asynchronous * synch = 1 means synchronous *************** *** 457,463 **** putc('\n', fout); for (pn = jn->procs; pn;) { len2 = ((job == thisjob) ? 5 : 10) + len; /* 2 spaces */ ! if (lng) qn = pn->next; else for (qn = pn->next; qn; qn = qn->next) { --- 458,464 ---- putc('\n', fout); for (pn = jn->procs; pn;) { len2 = ((job == thisjob) ? 5 : 10) + len; /* 2 spaces */ ! if (lng & 3) qn = pn->next; else for (qn = pn->next; qn; qn = qn->next) { *************** *** 477,494 **** fprintf(fout, (job > 9) ? " " : " "); else fprintf(fout, "zsh: "); ! if (lng) ! if (lng == 1) ! fprintf(fout, "%ld ", (long) pn->pid); ! else { ! pid_t x = jn->gleader; ! ! fprintf(fout, "%ld ", (long) x); ! do ! skip++; ! while ((x /= 10)); skip++; ! lng = 0; } else fprintf(fout, "%*s", skip, ""); if (pn->status == SP_RUNNING) --- 478,494 ---- fprintf(fout, (job > 9) ? " " : " "); else fprintf(fout, "zsh: "); ! if (lng & 1) ! fprintf(fout, "%ld ", (long) pn->pid); ! else if (lng & 2) { ! pid_t x = jn->gleader; ! ! fprintf(fout, "%ld ", (long) x); ! do skip++; ! while ((x /= 10)); ! skip++; ! lng &= ~3; } else fprintf(fout, "%*s", skip, ""); if (pn->status == SP_RUNNING) *************** *** 521,531 **** fflush(fout); } ! /* print "(pwd now: foo)" messages */ ! ! if (interact && job == thisjob && strcmp(jn->pwd, pwd)) { ! fprintf(shout, "(pwd now: "); ! fprintdir(pwd, shout); fprintf(shout, ")\n"); fflush(shout); } --- 521,533 ---- fflush(fout); } ! /* print "(pwd now: foo)" messages: with (lng & 4) we are printing ! * the directory where the job is running, otherwise the current directory ! */ ! ! if ((lng & 4) || (interact && job == thisjob && strcmp(jn->pwd, pwd))) { ! fprintf(shout, "(pwd %s: ", (lng & 4) ? "" : "now"); ! fprintdir((lng & 4) ? jn->pwd : pwd, shout); fprintf(shout, ")\n"); fflush(shout); } *************** *** 948,953 **** --- 950,958 ---- } lng = (ops['l']) ? 1 : (ops['p']) ? 2 : 0; + if (ops['d']) + lng |= 4; + if ((func == BIN_FG || func == BIN_BG) && !jobbing) { /* oops... maybe bg and fg should have been disabled? */ zwarnnam(name, "no job control in this shell.", NULL, 0); -- Peter Stephenson Tel: +49 33762 77366 WWW: http://www.ifh.de/~pws/ Fax: +49 33762 77413 Deutsches Elektronen-Synchrotron --- Institut fuer Hochenergiephysik Zeuthen DESY-IfH, 15735 Zeuthen, Germany.