From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19470 invoked from network); 13 Dec 1999 05:55:24 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 13 Dec 1999 05:55:24 -0000 Received: (qmail 6990 invoked by alias); 13 Dec 1999 05:55:13 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 9007 Received: (qmail 6980 invoked from network); 13 Dec 1999 05:55:12 -0000 Message-ID: <19991213055510.1992.qmail@web1306.mail.yahoo.com> Date: Sun, 12 Dec 1999 21:55:10 -0800 (PST) From: Felix Rosencrantz Subject: PATCH: Add jobdirs association to parameter module To: zsh-workers MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii This proposed patch adds a new association to the parameter module called jobdirs. This provides an association with job numbers and the directories in which the jobs were started. I decided to use the name jobdirs instead of jobpwds since the "jobs" builtin uses the "-d" to list these directories. Though I could see that jobpwds might also be appropriate. It is possible to use the "jobs -d" command to get this same information with a little processing. Though adding an association seems to be a cleaner way for zsh functions or scripts to get this information. -FR --- old/Src/Modules/parameter.c Mon Dec 6 02:26:32 1999 +++ Src/Modules/parameter.c Sun Dec 12 20:58:25 1999 @@ -1325,6 +1325,83 @@ } } +/* Functions for the jobdirs special parameter. */ + +/**/ +static char * +pmjobdir(int job) +{ + char *ret; + + ret = dupstring(jobtab[job].pwd); + return ret; +} + +/**/ +static HashNode +getpmjobdir(HashTable ht, char *name) +{ + Param pm = NULL; + int job; + + HEAPALLOC { + pm = (Param) zhalloc(sizeof(struct param)); + pm->nam = dupstring(name); + pm->flags = PM_SCALAR | PM_READONLY; + pm->sets.cfn = NULL; + pm->gets.cfn = strgetfn; + pm->unsetfn = NULL; + pm->ct = 0; + pm->env = NULL; + pm->ename = NULL; + pm->old = NULL; + pm->level = 0; + + if ((job = atoi(name)) >= 1 && job < MAXJOB && + jobtab[job].stat && jobtab[job].procs && + !(jobtab[job].stat & STAT_NOPRINT)) + pm->u.str = pmjobdir(job); + else { + pm->u.str = dupstring(""); + pm->flags |= PM_UNSET; + } + } LASTALLOC; + + return (HashNode) pm; +} + +/**/ +static void +scanpmjobdirs(HashTable ht, ScanFunc func, int flags) +{ + struct param pm; + int job; + char buf[40]; + + pm.flags = PM_SCALAR | PM_READONLY; + pm.sets.cfn = NULL; + pm.gets.cfn = strgetfn; + pm.unsetfn = NULL; + pm.ct = 0; + pm.env = NULL; + pm.ename = NULL; + pm.old = NULL; + pm.level = 0; + + for (job = 1; job < MAXJOB; job++) { + if (jobtab[job].stat && jobtab[job].procs && + !(jobtab[job].stat & STAT_NOPRINT)) { + sprintf(buf, "%d", job); + pm.nam = dupstring(buf); + if (func != scancountparams && + ((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) || + !(flags & SCANPM_WANTKEYS))) + pm.u.str = pmjobdir(job); + func((HashNode) &pm, flags); + } + } +} + /* Functions for the nameddirs special parameter. */ /**/ @@ -1833,6 +1910,9 @@ { "jobstates", PM_READONLY, getpmjobstate, scanpmjobstates, hashsetfn, NULL, NULL, stdunsetfn, NULL }, + { "jobdirs", PM_READONLY, + getpmjobdir, scanpmjobdirs, hashsetfn, + NULL, NULL, stdunsetfn, NULL }, { "nameddirs", 0, getpmnameddir, scanpmnameddirs, setpmnameddirs, NULL, NULL, stdunsetfn, NULL }, @@ -1889,8 +1969,7 @@ if (def->hsetfn) def->pm->sets.hfn = def->hsetfn; } else { - if (!(def->pm = createparam(def->name, def->flags | PM_HIDE | - PM_REMOVABLE))) + if (!(def->pm = createparam(def->name, def->flags | PM_HIDE))) return 1; def->pm->sets.afn = def->setfn; def->pm->gets.afn = def->getfn; --- old/Src/Modules/parameter.mdd Wed Nov 3 03:07:27 1999 +++ Src/Modules/parameter.mdd Fri Dec 10 11:34:25 1999 @@ -1,3 +1,3 @@ -autoparams="parameters commands functions dis_functions funcstack builtins dis_builtins reswords dis_reswords options modules dirstack history historywords jobtexts jobstates nameddirs userdirs aliases dis_aliases galiases dis_galiases" +autoparams="parameters commands functions dis_functions funcstack builtins dis_builtins reswords dis_reswords options modules dirstack history historywords jobtexts jobdirs jobstates nameddirs userdirs aliases dis_aliases galiases dis_galiases" objects="parameter.o" --- old/zsh/Doc/Zsh/mod_parameter.yo Wed Nov 3 03:07:19 1999 +++ Doc/Zsh/mod_parameter.yo Fri Dec 10 11:32:09 1999 @@ -110,6 +110,10 @@ item(tt(historywords))( A special array containing the words stored in the history. ) +vindex(jobdirs) +item(tt(jobdirs))( +This association maps job numbers to the directories from which the job was started (which may not be the current directory of the job). +) vindex(jobtexts) item(tt(jobtexts))( This association maps job numbers to the texts of the command lines __________________________________________________ Do You Yahoo!? Thousands of Stores. Millions of Products. All in one place. Yahoo! Shopping: http://shopping.yahoo.com