From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 945 invoked from network); 29 Dec 2002 09:32:50 -0000 Received: from sunsite.dk (130.225.247.90) by ns1.primenet.com.au with SMTP; 29 Dec 2002 09:32:50 -0000 Received: (qmail 17111 invoked by alias); 29 Dec 2002 09:32:45 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 18035 Received: (qmail 17104 invoked from network); 29 Dec 2002 09:32:45 -0000 Sender: m.hessling@qut.edu.au From: "Mark Hessling" Reply-to: m.hessling@qut.edu.au To: zsh-workers@sunsite.dk Subject: Re: How to change environment from a module X-Mailer: Quality Web Email v3.0q, http://netwinsite.com/refw.htm X-Originating-IP: 131.181.143.79 Date: Sun, 29 Dec 2002 19:32:40 +1000 Priority: normal Message-id: <3e0ec138.10c34e.5239@imap.qut.edu.au> > On Dec 22, 3:24pm, Mark Hessling wrote: > } > } So, from within the module I have, I need to be able to do the > following: } 1) Get the current value of an environment variable > } 2) Set the value of an enviornment variable > } 3) Get the value of the current working directory > } 4) Set the value of the current working directory > } > } I thought I might be able to use bin_cd() and bin_typeset() > > In general you shouldn't call bin_ functions directly. They > should almost always be called only via the command execution > code. Why should these functions not be called directly ? See below for more explanation. > > } 2) How does one get the values of an environment variable and > current } working directory from within a module ? > > Most likely you want these functions: > > createparam(variablename, PM_EXPORTED); > getsparam(variablename); > setsparam(variablename, valuestring); > > struct dirsave ds; > dir = zgetdir(&ds); > restoredir(&ds); > > It's very likely that your module should call zgetdir(&ds) before > running the Rexx program and call restoredir(&ds) after it. That > is, the Rexx program should not permanently change the shell's > current directory. Within the Rexx program, the usual chdir() > system call can be used (but the values of the PWD and OLDPWD > variables cannot be relied upon). In this sense the Rexx program > would behave as if it is an external command. But this is the only reason for running a Rexx interpreter within the current process of the shell; to change the environment permanently. Based on this premise, then calling routines like zchdir() doesn't go the whole way. ie if you have a chpwd() function in .zshrc, then zchdir() doesn't call it. It seems that only a call to bin_cd() will result in a call to chpwd(). So again, how should one call the bin_*() functions directly from a module as though a "cd" command or "export" command were executed directly by the user ? Cheers, Mark. > > -- > Bart Schaefer Brass Lantern > Enterprises http://www.well.com/user/barts > http://www.brasslantern.com > > Zsh: http://www.zsh.org | PHPerl Project: > http://phperl.sourceforge.net