From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27330 invoked from network); 10 Feb 1999 17:10:24 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 10 Feb 1999 17:10:24 -0000 Received: (qmail 14445 invoked by alias); 10 Feb 1999 17:10:06 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 5332 Received: (qmail 14438 invoked from network); 10 Feb 1999 17:10:04 -0000 Message-Id: <9902101654.AA46271@ibmth.df.unipi.it> To: zsh-workers@sunsite.auc.dk (Zsh hackers list) Subject: PATCH: zsh-3.1.5-pws-7: emulate locally Date: Wed, 10 Feb 1999 17:54:20 +0100 From: Peter Stephenson When using `emulate' in a shell function to ensure the correct environment, it's a good habit to make sure the effect is local by setting localoptions. To encourage this good habit, I thought perhaps it might be sensible to have an option -L to emulate itself to do this. Certainly you can just add `setopt localoptions', but it's easy to forget. If you always use `emulate -LR zsh', then you don't forget. I tried to clarify the manual entry a bit. --- Doc/Zsh/builtins.yo.emloc Thu Feb 4 17:50:30 1999 +++ Doc/Zsh/builtins.yo Wed Feb 10 17:51:56 1999 @@ -215,13 +215,19 @@ cindex(sh, compatibility) cindex(ksh, compatibility) cindex(csh, compatibility) -item(tt(emulate) [ tt(-R) ] {tt(zsh)|tt(sh)|tt(ksh)|tt(csh)})( +item(tt(emulate) [ tt(-LR) ] {tt(zsh)|tt(sh)|tt(ksh)|tt(csh)})( Set up zsh options to emulate the specified shell as much as possible. bf(csh) will never be fully emulated. If the argument is not one of the shells listed above, tt(zsh) will be used as a default. If the tt(-R) option is given, all options are reset to their default value corresponding to the specified emulation -mode. +mode, except for certain options describing the interactive +environment; otherwise, only those options likely to cause portability +problems in scripts and functions are altered. If the tt(-L) option +is given, the option tt(LOCAL_OPTIONS) will be set as well, causing +the effect of the tt(emulate) command to be local to the immediately +surrounding shell function, if any; normally this is turned off in all +emulation modes except tt(ksh). ) findex(enable) cindex(enabling commands) --- Src/builtin.c.emloc Mon Feb 8 09:59:10 1999 +++ Src/builtin.c Wed Feb 10 17:35:28 1999 @@ -56,7 +56,7 @@ BUILTIN("disown", 0, bin_fg, 0, -1, BIN_DISOWN, NULL, NULL), BUILTIN("echo", BINF_PRINTOPTS | BINF_ECHOPTS, bin_print, 0, -1, BIN_ECHO, "neE", "-"), BUILTIN("echotc", 0, bin_echotc, 1, -1, 0, NULL, NULL), - BUILTIN("emulate", 0, bin_emulate, 1, 1, 0, "R", NULL), + BUILTIN("emulate", 0, bin_emulate, 1, 1, 0, "LR", NULL), BUILTIN("enable", 0, bin_enable, 0, -1, BIN_ENABLE, "afmr", NULL), BUILTIN("eval", BINF_PSPECIAL, bin_eval, 0, -1, BIN_EVAL, NULL, NULL), BUILTIN("exit", BINF_PSPECIAL, bin_break, 0, 1, BIN_EXIT, NULL, NULL), @@ -3051,6 +3051,8 @@ bin_emulate(char *nam, char **argv, char *ops, int func) { emulate(*argv, ops['R']); + if (ops['L']) + dosetopt(LOCALOPTIONS, 1, 0); return 0; } -- Peter Stephenson Tel: +39 050 844536 WWW: http://www.ifh.de/~pws/ Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy