Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Further special parameter changes
- X-seq: zsh-workers 271
- From: hzoli@xxxxxxxxxx (Zoltan Hidvegi)
- To: zsh-workers@xxxxxxxxxxxxxxx (zsh-workers)
- Subject: Re: Further special parameter changes
- Date: Mon, 24 Jul 1995 20:01:22 +0100 (MET DST)
- In-reply-to: <14515.199507241157@xxxxxxxxxxxxxxxxxxxxxxx> from "Zefram" at Jul 24, 95 12:57:58 pm
Zefram wrote:
>
> Zoltan wrote:
> >The patch below further reduces the number of special parameters. It makes
> >TTY, FCEDIT, HOST, MAIL, TIMEFMT, TMPPREFIX, WATCHFMT and signals non-special.
> >If zsh is invoked as sh/ksh, it removes the ARGC, status, prompt, PROMPT2,
> >PROMPT3, PROMPT4 and argv parameters.
> [...]
> >The patch depends on my previous patch which removed LOGNAME from the special
> >parameter list (art. 268). Or you can apply it to my release as well which
> >already contains the LOGNAME patch.
>
> Unfortunately it also depends on your array-uniquing patch. Without it
> there's a rejection of a critical hunk in params.h, because the line
> for $path has the PM_UNIQUE flag in the patch. It's easy to fix by
> hand, by removing that flag from the two lines in the patch that have
> it.
It is hard to keep track of these dependencies. Here is the patch again, which
applies to beta10.
Zoltan
*** 1.8 1995/07/06 12:28:04
--- Src/globals.h 1995/07/07 23:09:17
***************
*** 91,98 ****
EXTERN int userdirsz, userdirct;
- EXTERN char *mailfile;
-
EXTERN char *yytext;
/* error/break flag */
--- 91,96 ----
***************
*** 324,339 ****
EXTERN char *rprompt; /* $RPROMPT */
EXTERN char *sprompt;
- EXTERN char *timefmt; /* $TIMEFMT */
- EXTERN char *watchfmt; /* $WATCHFMT */
EXTERN char *wordchars;
- EXTERN char *fceditparam;
- EXTERN char *tmpprefix; /* $TMPPREFIX */
EXTERN char *rstring, *Rstring;
EXTERN char *postedit;
EXTERN char *hostnam; /* from gethostname */
- EXTERN char *hostvar; /* $HOST */
EXTERN char *home; /* $HOME */
EXTERN char **pparams; /* $argv */
--- 322,332 ----
***************
*** 541,552 ****
EXTERN int noaliases;
#ifdef GLOBALS
- /* signal names */
- char **sigptr = sigs;
/* tokens */
char *ztokens = "#$^*()$=|{}[]`<>?~`,'\"\\";
#else
! extern char *ztokens, **sigptr;
#endif
/* $histchars */
--- 534,543 ----
EXTERN int noaliases;
#ifdef GLOBALS
/* tokens */
char *ztokens = "#$^*()$=|{}[]`<>?~`,'\"\\";
#else
! extern char *ztokens;
#endif
/* $histchars */
*** 1.4 1995/07/04 14:23:18
--- Src/params.h 1995/07/07 23:09:17
***************
*** 51,57 ****
#define IPDEF1(A,B,C,D) {NULL,A,NULL,IFN(C),IFN(B),10,\
PM_INTEGER|PM_SPECIAL|D,NULL,NULL,NULL,NULL,0}
IPDEF1("#", poundgetfn, IFN(nullsetfn), PM_READONLY),
- IPDEF1("ARGC", poundgetfn, IFN(nullsetfn), PM_READONLY),
IPDEF1("ERRNO", errnogetfn, IFN(nullsetfn), PM_READONLY),
IPDEF1("GID", gidgetfn, gidsetfn, 0),
IPDEF1("EGID", egidgetfn, egidsetfn, 0),
--- 51,56 ----
***************
*** 82,88 ****
IPDEF4("!", &lastpid),
IPDEF4("$", &mypid),
IPDEF4("?", &lastval),
- IPDEF4("status", &lastval),
IPDEF4("LINENO", &lineno),
IPDEF4("PPID", &ppid),
--- 81,86 ----
***************
*** 106,127 ****
#define IPDEF6(A,B) {NULL,A,NULL,IFN(nullsetfn),IFN(strvargetfn),0,\
PM_SCALAR|PM_READONLY|PM_SPECIAL,(void *)B,NULL,NULL,NULL,0}
IPDEF6("PWD", &pwd),
- IPDEF6("TTY", &ttystrname),
#define IPDEF7(A,B) {NULL,A,NULL,IFN(strvarsetfn),IFN(strvargetfn),0,\
PM_SCALAR|PM_SPECIAL,(void *)B,NULL,NULL,NULL,0}
- IPDEF7("FCEDIT", &fceditparam),
- IPDEF7("HOST", &hostvar),
IPDEF7("OLDPWD", &oldpwd),
IPDEF7("OPTARG", &zoptarg),
- IPDEF7("MAIL", &mailfile),
IPDEF7("NULLCMD", &nullcmd),
IPDEF7("POSTEDIT", &postedit),
- IPDEF7("prompt", &prompt),
- IPDEF7("PROMPT", &prompt),
- IPDEF7("PROMPT2", &prompt2),
- IPDEF7("PROMPT3", &prompt3),
- IPDEF7("PROMPT4", &prompt4),
IPDEF7("READNULLCMD", &readnullcmd),
IPDEF7("RPROMPT", &rprompt),
IPDEF7("PS1", &prompt),
--- 104,116 ----
***************
*** 130,138 ****
IPDEF7("PS4", &prompt4),
IPDEF7("RPS1", &rprompt),
IPDEF7("SPROMPT", &sprompt),
- IPDEF7("TIMEFMT", &timefmt),
- IPDEF7("TMPPREFIX", &tmpprefix),
- IPDEF7("WATCHFMT", &watchfmt),
IPDEF7("0", &argzero),
#define IPDEF8(A,B,C) {NULL,A,NULL,IFN(colonarrsetfn),IFN(colonarrgetfn),0,\
--- 119,124 ----
***************
*** 157,169 ****
IPDEF9("manpath", 0, &manpath, "MANPATH"),
IPDEF9("watch", 0, &watch, "WATCH"),
IPDEF9("psvar", 0, &psvar, "PSVAR"),
- IPDEF9("signals", PM_READONLY, &sigptr, NULL),
- IPDEF9("argv", 0, &pparams, NULL),
IPDEF9("*", 0, &pparams, NULL),
IPDEF9("@", 0, &pparams, NULL),
{NULL, "path", NULL, IFN(pathsetfn), IFN(pathgetfn), 0,
PM_ARRAY | PM_SPECIAL, NULL, NULL, "PATH", NULL, 0},
{NULL,}
};
--- 143,166 ----
IPDEF9("manpath", 0, &manpath, "MANPATH"),
IPDEF9("watch", 0, &watch, "WATCH"),
IPDEF9("psvar", 0, &psvar, "PSVAR"),
IPDEF9("*", 0, &pparams, NULL),
IPDEF9("@", 0, &pparams, NULL),
{NULL, "path", NULL, IFN(pathsetfn), IFN(pathgetfn), 0,
PM_ARRAY | PM_SPECIAL, NULL, NULL, "PATH", NULL, 0},
+
+ {NULL,},
+
+ /* The following parameters are not avaible in sh/ksh compatibility *
+ * mode. All of these has sh compatible equivalents. */
+ IPDEF1("ARGC", poundgetfn, IFN(nullsetfn), PM_READONLY),
+ IPDEF4("status", &lastval),
+ IPDEF7("prompt", &prompt),
+ IPDEF7("PROMPT", &prompt),
+ IPDEF7("PROMPT2", &prompt2),
+ IPDEF7("PROMPT3", &prompt3),
+ IPDEF7("PROMPT4", &prompt4),
+ IPDEF9("argv", 0, &pparams, NULL),
{NULL,}
};
*** 1.12 1995/07/04 18:21:23
--- Src/params.c 1995/07/23 00:43:13
***************
*** 44,50 ****
{
struct iparam *ip;
Param pm;
! char **old_environ, **envp, **envp2;
char buf[50], *str, *iname;
int num_env;
--- 44,50 ----
{
struct iparam *ip;
Param pm;
! char **old_environ, **envp, **envp2, **sigptr, **t;
char buf[50], *str, *iname;
int num_env;
***************
*** 63,72 ****
/* Add the special parameter to the hash table */
for (ip = special_param; ip->nam; ip++)
paramtab->addnode(paramtab, ztrdup(ip->nam), ip);
!
! argvparam = (Param) paramtab->getnode(paramtab, "argv");
!
setsparam("LOGNAME", ztrdup((str = getlogin()) && *str ? str : cached_username));
noerrs = 1;
/* Copy the environment variables we are inheriting to dynamic *
--- 63,83 ----
/* Add the special parameter to the hash table */
for (ip = special_param; ip->nam; ip++)
paramtab->addnode(paramtab, ztrdup(ip->nam), ip);
! if (strcmp(zsh_name, "sh") && strcmp(zsh_name, "ksh"))
! while ((++ip)->nam)
! paramtab->addnode(paramtab, ztrdup(ip->nam), ip);
!
! argvparam = (Param) paramtab->getnode(paramtab, "*");
!
! /* Add standard non-special parameters which have to be *
! * initialized before we copy the environment variables since *
! * zsh mustn't override their values in the environment. */
setsparam("LOGNAME", ztrdup((str = getlogin()) && *str ? str : cached_username));
+ setsparam("FCEDIT", ztrdup(DEFAULT_FCEDIT));
+ setsparam("HOST", ztrdup(hostnam));
+ setsparam("TIMEFMT", ztrdup(DEFAULT_TIMEFMT));
+ setsparam("WATCHFMT", ztrdup(DEFAULT_WATCHFMT));
+ setsparam("TMPPREFIX", ztrdup(DEFAULT_TMPPREFIX));
noerrs = 1;
/* Copy the environment variables we are inheriting to dynamic *
***************
*** 123,131 ****
--- 134,145 ----
setsparam("HOSTTYPE", ztrdup(HOSTTYPE));
setsparam("MACHTYPE", ztrdup(MACHTYPE));
setsparam("OSTYPE", ztrdup(OSTYPE));
+ setsparam("TTY", ztrdup(ttystrname));
setsparam("VENDOR", ztrdup(VENDOR));
setsparam("ZSH_NAME", ztrdup(zsh_name));
setsparam("ZSH_VERSION", ztrdup(ZSH_VERSION));
+ setaparam("signals", sigptr = zalloc((SIGCOUNT+4) * sizeof(char *)));
+ for (t = sigs; (*sigptr++ = ztrdup(*t++)); );
noerrs = 0;
}
*** 1.10 1995/07/07 18:32:30
--- Src/init.c 1995/07/23 00:18:56
***************
*** 513,523 ****
if (!(ttystrname = ztrdup(ttyname(SHTTY))))
ttystrname = ztrdup("");
ifs = ztrdup(" \t\n");
- timefmt = ztrdup(DEFAULT_TIMEFMT);
- watchfmt = ztrdup(DEFAULT_WATCHFMT);
wordchars = ztrdup(DEFAULT_WORDCHARS);
- fceditparam = ztrdup(DEFAULT_FCEDIT);
- tmpprefix = ztrdup(DEFAULT_TMPPREFIX);
postedit = ztrdup("");
underscore = ztrdup("");
--- 513,519 ----
***************
*** 533,539 ****
hostnam = (char *) zalloc(256);
gethostname(hostnam, 256);
- hostvar = ztrdup(hostnam);
compctlsetup();
namdirs = (Nameddirs) zcalloc(sizeof(*namdirs) * 2);
--- 529,534 ----
*** 1.1 1995/06/23 07:48:00
--- Src/watch.c 1995/07/23 00:26:00
***************
*** 377,388 ****
dowatch(void)
{
char **s = watch;
! char *fmt = (watchfmt) ? watchfmt : DEFAULT_WATCHFMT;
FILE *in;
int utabsz = 0, utabmax = wtabsz + 4, uct, wct;
STRUCT_UTMP *utab, *uptr, *wptr;
struct stat st;
holdintr();
if (!fmt)
fmt = "%n has %a %l from %m.";
--- 377,390 ----
dowatch(void)
{
char **s = watch;
! char *fmt = getsparam("WATCHFMT");
FILE *in;
int utabsz = 0, utabmax = wtabsz + 4, uct, wct;
STRUCT_UTMP *utab, *uptr, *wptr;
struct stat st;
+ if (!fmt)
+ fmt = DEFAULT_WATCHFMT;
holdintr();
if (!fmt)
fmt = "%n has %a %l from %m.";
*** 1.1 1995/06/18 06:44:03
--- Src/jobs.c 1995/07/23 00:22:45
***************
*** 696,702 ****
if (percent > 100)
percent = 100; /* just to make it look right */
! for (s = (timefmt ? timefmt : DEFAULT_TIMEFMT); *s; s++)
if (*s == '%')
switch (*++s) {
case 'E':
--- 696,704 ----
if (percent > 100)
percent = 100; /* just to make it look right */
! if (!(s = getsparam("TIMEFMT")))
! s = DEFAULT_TIMEFMT;
! for (; *s; s++)
if (*s == '%')
switch (*++s) {
case 'E':
*** 1.25 1995/07/17 20:57:39
--- Src/builtin.c 1995/07/23 00:31:06
***************
*** 2703,2715 ****
((out = fdopen(tempfd, "w")) == NULL)) {
zwarnnam("fc", "can't open temp file: %e", NULL, errno);
} else {
! if (!fclist(out, 0, ops['r'], 0, 0, first, last, asgf, com))
! if (fcedit(auxdata ? auxdata :
! (fceditparam ? fceditparam : DEFAULT_FCEDIT), fil))
if (stuff(fil))
zwarnnam("fc", "%e: %s", s, errno);
else
retval = 0;
}
unlink(fil);
}
--- 2703,2717 ----
((out = fdopen(tempfd, "w")) == NULL)) {
zwarnnam("fc", "can't open temp file: %e", NULL, errno);
} else {
! if (!fclist(out, 0, ops['r'], 0, 0, first, last, asgf, com)) {
! char *editor = auxdata ? auxdata : getsparam("FCEDIT");
!
! if (fcedit(editor ? editor : DEFAULT_FCEDIT, fil))
if (stuff(fil))
zwarnnam("fc", "%e: %s", s, errno);
else
retval = 0;
+ }
}
unlink(fil);
}
*** 1.12 1995/07/14 14:24:06
--- Src/exec.c 1995/07/23 00:27:07
***************
*** 2055,2060 ****
--- 2055,2062 ----
char *
gettemp(void)
{
+ char *tmpprefix = getsparam("TMPPREFIX");
+
return ((char *) mktemp(dyncat((tmpprefix ? tmpprefix : DEFAULT_TMPPREFIX), "XXXXXX")));
}
*** 1.13 1995/07/14 14:18:35
--- Src/utils.c 1995/07/23 00:03:39
***************
*** 589,597 ****
return;
diff = (int)difftime(time(NULL), lastmailcheck);
if (diff > mailcheck) {
if (mailpath && *mailpath && **mailpath)
checkmailpath(mailpath);
! else if (mailfile && *mailfile) {
char *x[2];
x[0] = mailfile;
--- 589,599 ----
return;
diff = (int)difftime(time(NULL), lastmailcheck);
if (diff > mailcheck) {
+ char *mailfile;
+
if (mailpath && *mailpath && **mailpath)
checkmailpath(mailpath);
! else if ((mailfile = getsparam("MAIL")) && *mailfile) {
char *x[2];
x[0] = mailfile;
*** 1.8 1995/07/11 15:09:08
--- Doc/zshparam.1 1995/07/22 23:58:07
***************
*** 127,133 ****
The number of positional parameters in decimal.
.TP
.B ARGC
! Same as \fB#\fP.
.TP
.B $
The process id of this shell.
--- 127,133 ----
The number of positional parameters in decimal.
.TP
.B ARGC
! Same as \fB#\fP. It has no special meaning in sh/ksh compatibility mode.
.TP
.B $
The process id of this shell.
***************
*** 140,155 ****
An array containing the positional parameters.
.TP
.B argv
! Same as \fB*\fP.
.TP
.B @
! Same as \fBargv[@]\fP.
.TP
.B ?
The exit value returned by the last command.
.TP
.B status
! Same as \fB?\fP.
.TP
.B _
The last argument of the previous command.
--- 140,155 ----
An array containing the positional parameters.
.TP
.B argv
! Same as \fB*\fP. It has no special meaning in sh/ksh compatibility mode.
.TP
.B @
! Same as \fBargv[@]\fP but it can be used in sh/ksh compatibility mode.
.TP
.B ?
The exit value returned by the last command.
.TP
.B status
! Same as \fB?\fP. It has no special meaning in sh/ksh compatibility mode.
.TP
.B _
The last argument of the previous command.
***************
*** 393,400 ****
.TP
.B MAIL
If this parameter is set and \fBmailpath\fP is not set,
! the shell looks for mail in the specified file. By default it is set to
! the user's system mailbox.
.TP
.B MAILCHECK
The interval in seconds between checks for new mail.
--- 393,399 ----
.TP
.B MAIL
If this parameter is set and \fBmailpath\fP is not set,
! the shell looks for mail in the specified file.
.TP
.B MAILCHECK
The interval in seconds between checks for new mail.
***************
*** 432,438 ****
This string is output whenever the line editor exits.
It usually contains termcap strings to reset the terminal.
.TP
! .B PROMPT
The primary prompt string, printed before a command is read;
the default is "%m%# ". If the escape sequence takes an optional
integer, it should appear between the '%' and the next character of the
--- 431,437 ----
This string is output whenever the line editor exits.
It usually contains termcap strings to reset the terminal.
.TP
! .B PS1
The primary prompt string, printed before a command is read;
the default is "%m%# ". If the escape sequence takes an optional
integer, it should appear between the '%' and the next character of the
***************
*** 621,649 ****
.PP
.PD 0
.TP
! .B PROMPT2
The secondary prompt, printed when the shell needs more information
to complete a command.
! Recognizes the same escape sequences as \fB$PROMPT\fP.
The default is "> ".
.TP
! .B PROMPT3
Selection prompt used within a \fBselect\fP loop.
! Recognizes the same escape sequences as \fB$PROMPT\fP.
The default is "?# ".
.TP
! .B PROMPT4
The execution trace prompt. Default is "+ ".
.TP
! .B PS1
.TP
! .B PS2
.TP
! .B PS3
.TP
! .B PS4
! Same as \fBPROMPT\fP, \fBPROMPT2\fP, \fBPROMPT3\fP, and \fBPROMPT4\fP,
! respectively.
.TP
.B psvar (PSVAR)
An array (colon-separated list) whose first nine values can be used in
--- 620,649 ----
.PP
.PD 0
.TP
! .B PS2
The secondary prompt, printed when the shell needs more information
to complete a command.
! Recognizes the same escape sequences as \fB$PS1\fP.
The default is "> ".
.TP
! .B PS3
Selection prompt used within a \fBselect\fP loop.
! Recognizes the same escape sequences as \fB$PS1\fP.
The default is "?# ".
.TP
! .B PS4
The execution trace prompt. Default is "+ ".
.TP
! .B PROMPT
.TP
! .B PROMPT2
.TP
! .B PROMPT3
.TP
! .B PROMPT4
! Same as \fBPS1\fP, \fBPS2\fP, \fBPS3\fP, and \fBPS4\fP,
! respectively. These parameters do not have any special
! meaning in sh/ksh compatibility mode.
.TP
.B psvar (PSVAR)
An array (colon-separated list) whose first nine values can be used in
***************
*** 651,657 ****
vice versa.
.TP
.B prompt
! Same as \fBPROMPT\fP.
.TP
.B READNULLCMD
The command name to assume if a single input redirection
--- 651,657 ----
vice versa.
.TP
.B prompt
! Same as \fBPS1\fP. It has no special meaning in sh/ksh compatibility mode.
.TP
.B READNULLCMD
The command name to assume if a single input redirection
Messages sorted by:
Reverse Date,
Date,
Thread,
Author