Added missing mailx tilde escapes that POSIX wants (~<!, ~a, ~A, ~i).
Updated man page and tilde help file for missing ~ escapes. Closes PR 782 by Simon J. Gerraty after four years and two weeks.
This commit is contained in:
parent
1aede0624c
commit
fb60b363d0
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: collect.c,v 1.18 1998/12/19 16:31:57 christos Exp $ */
|
/* $NetBSD: collect.c,v 1.19 1999/02/17 20:48:48 mjl Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1980, 1993
|
* Copyright (c) 1980, 1993
|
||||||
@ -38,7 +38,7 @@
|
|||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)collect.c 8.2 (Berkeley) 4/19/94";
|
static char sccsid[] = "@(#)collect.c 8.2 (Berkeley) 4/19/94";
|
||||||
#else
|
#else
|
||||||
__RCSID("$NetBSD: collect.c,v 1.18 1998/12/19 16:31:57 christos Exp $");
|
__RCSID("$NetBSD: collect.c,v 1.19 1999/02/17 20:48:48 mjl Exp $");
|
||||||
#endif
|
#endif
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
@ -242,6 +242,10 @@ cont:
|
|||||||
hadintr++;
|
hadintr++;
|
||||||
collint(SIGINT);
|
collint(SIGINT);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
|
case 'x': /* exit, do not save in dead.letter */
|
||||||
|
goto err;
|
||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
/*
|
/*
|
||||||
* Grab a bunch of headers.
|
* Grab a bunch of headers.
|
||||||
@ -275,6 +279,38 @@ cont:
|
|||||||
*/
|
*/
|
||||||
hp->h_bcc = cat(hp->h_bcc, extract(&linebuf[2], GBCC));
|
hp->h_bcc = cat(hp->h_bcc, extract(&linebuf[2], GBCC));
|
||||||
break;
|
break;
|
||||||
|
case 'i':
|
||||||
|
case 'A':
|
||||||
|
case 'a':
|
||||||
|
/*
|
||||||
|
* Insert named variable in message
|
||||||
|
*/
|
||||||
|
|
||||||
|
switch(c) {
|
||||||
|
case 'i':
|
||||||
|
cp = &linebuf[2];
|
||||||
|
while(isspace((unsigned char) *cp))
|
||||||
|
cp++;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'a':
|
||||||
|
cp = "sign";
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
cp = "Sign";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(*cp && (cp = value(cp)) != NOSTR) {
|
||||||
|
printf("%s\n", cp);
|
||||||
|
if(putline(collf, cp, 1) < 0)
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
strcpy(linebuf + 2, getdeadletter());
|
strcpy(linebuf + 2, getdeadletter());
|
||||||
/* fall into . . . */
|
/* fall into . . . */
|
||||||
@ -292,14 +328,53 @@ cont:
|
|||||||
printf("Interpolate what file?\n");
|
printf("Interpolate what file?\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
cp = expand(cp);
|
cp = expand(cp);
|
||||||
if (cp == NOSTR)
|
if (cp == NOSTR)
|
||||||
break;
|
break;
|
||||||
if (isdir(cp)) {
|
|
||||||
|
if (*cp == '!') { /* insert stdout of command */
|
||||||
|
extern char *tempEdit;
|
||||||
|
char *shell;
|
||||||
|
int nullfd;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if((nullfd = open("/dev/null", O_RDONLY, 0)) == -1) {
|
||||||
|
perror("/dev/null");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((fbuf = Fopen(tempEdit, "w+")) == NULL) {
|
||||||
|
perror(tempEdit);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
(void) unlink(tempEdit);
|
||||||
|
|
||||||
|
if ((shell = value("SHELL")) == NOSTR)
|
||||||
|
shell = _PATH_CSHELL;
|
||||||
|
|
||||||
|
rc = run_command(shell, 0, nullfd, fileno(fbuf), "-c", cp+1, NOSTR);
|
||||||
|
|
||||||
|
close(nullfd);
|
||||||
|
|
||||||
|
if (rc < 0) {
|
||||||
|
(void) Fclose(fbuf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fsize(fbuf) == 0) {
|
||||||
|
fprintf(stderr, "No bytes from command \"%s\"\n", cp+1);
|
||||||
|
(void) Fclose(fbuf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
rewind(fbuf);
|
||||||
|
}
|
||||||
|
else if (isdir(cp)) {
|
||||||
printf("%s: Directory\n", cp);
|
printf("%s: Directory\n", cp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((fbuf = Fopen(cp, "r")) == NULL) {
|
else if ((fbuf = Fopen(cp, "r")) == NULL) {
|
||||||
perror(cp);
|
perror(cp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $NetBSD: mail.1,v 1.12 1997/11/11 14:40:14 mrg Exp $
|
.\" $NetBSD: mail.1,v 1.13 1999/02/17 20:48:48 mjl Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 1980, 1990, 1993
|
.\" Copyright (c) 1980, 1990, 1993
|
||||||
.\" The Regents of the University of California. All rights reserved.
|
.\" The Regents of the University of California. All rights reserved.
|
||||||
@ -705,6 +705,10 @@ by the option
|
|||||||
.Bl -tag -width Ds
|
.Bl -tag -width Ds
|
||||||
.It Ic \&~! Ns Ar command
|
.It Ic \&~! Ns Ar command
|
||||||
Execute the indicated shell command, then return to the message.
|
Execute the indicated shell command, then return to the message.
|
||||||
|
.It Ic \&~a
|
||||||
|
Inserts the autograph string from the sign= option into the message.
|
||||||
|
.It Ic \&~A
|
||||||
|
Inserts the autograph string from the Sign= option into the message.
|
||||||
.It Ic \&~b Ns Ar name ...
|
.It Ic \&~b Ns Ar name ...
|
||||||
Add the given names to the list of carbon copy recipients but do not make
|
Add the given names to the list of carbon copy recipients but do not make
|
||||||
the names visible in the Cc: line ("blind" carbon copy).
|
the names visible in the Cc: line ("blind" carbon copy).
|
||||||
@ -736,6 +740,8 @@ except all message headers are included.
|
|||||||
Edit the message header fields by typing each one in turn and allowing
|
Edit the message header fields by typing each one in turn and allowing
|
||||||
the user to append text to the end or modify the field by using the
|
the user to append text to the end or modify the field by using the
|
||||||
current terminal erase and kill characters.
|
current terminal erase and kill characters.
|
||||||
|
.It Ic \&~i Ns Ar string
|
||||||
|
Inserts the value of the named option into the text of the message.
|
||||||
.It Ic \&~m Ns Ar messages
|
.It Ic \&~m Ns Ar messages
|
||||||
Read the named messages into the message being sent, indented by a
|
Read the named messages into the message being sent, indented by a
|
||||||
tab or by the value of
|
tab or by the value of
|
||||||
@ -760,8 +766,14 @@ Abort the message being sent, copying the message to
|
|||||||
in your home directory if
|
in your home directory if
|
||||||
.Ic save
|
.Ic save
|
||||||
is set.
|
is set.
|
||||||
|
.It Ic \&~x
|
||||||
|
Exits as with \&~q, except the message is not saved in dead.letter.
|
||||||
.It Ic \&~r Ns Ar filename
|
.It Ic \&~r Ns Ar filename
|
||||||
Read the named file into the message.
|
.It Ic \&~< Ns Ar filename
|
||||||
|
Reads the named file into the message.
|
||||||
|
If the argument begins with !,
|
||||||
|
the rest of the string is taken as an arbitrary system command and is
|
||||||
|
executed, with the standard output inserted into the message.
|
||||||
.It Ic \&~s Ns Ar string
|
.It Ic \&~s Ns Ar string
|
||||||
Cause the named string to become the current subject field.
|
Cause the named string to become the current subject field.
|
||||||
.It Ic \&~\&t Ns Ar name ...
|
.It Ic \&~\&t Ns Ar name ...
|
||||||
|
@ -1,22 +1,34 @@
|
|||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
The following ~ escapes are defined:
|
The following ~ escapes are defined:
|
||||||
|
~? Print this message
|
||||||
~~ Quote a single tilde
|
~~ Quote a single tilde
|
||||||
|
~. Same as .
|
||||||
|
~h Prompt for to list, subject and cc list
|
||||||
~b users Add users to "blind" cc list
|
~b users Add users to "blind" cc list
|
||||||
~c users Add users to cc list
|
~c users Add users to cc list
|
||||||
|
~t users Add users to to list
|
||||||
|
~s subject Set subject
|
||||||
|
~w file Write message onto file
|
||||||
~d Read in dead.letter
|
~d Read in dead.letter
|
||||||
~e Edit the message buffer
|
|
||||||
~f messages Read in messages
|
|
||||||
~F messages Same as ~f, but keep all header lines
|
|
||||||
~h Prompt for to list, subject and cc list
|
|
||||||
~r file Read a file into the message buffer
|
~r file Read a file into the message buffer
|
||||||
~p Print the message buffer
|
~|command Pipe the message through the command
|
||||||
|
~^command Same as ~|
|
||||||
|
~f messages Read in messages
|
||||||
|
~< file Same as ~f
|
||||||
|
~<!command Insert the output of command in the message
|
||||||
|
~i name Insert the value of the named variable
|
||||||
|
~A Equivalent to iSign
|
||||||
|
~a Equivalent to isign
|
||||||
|
~F messages Same as ~f, but keep all header lines
|
||||||
~m messages Read in messages, right shifted by a tab
|
~m messages Read in messages, right shifted by a tab
|
||||||
~M messages Same as ~m, but keep all header lines
|
~M messages Same as ~m, but keep all header lines
|
||||||
~s subject Set subject
|
~e Edit the message buffer (using ed or $EDITOR)
|
||||||
~t users Add users to to list
|
~v Invoke display editor (vi or $VISUAL) on message
|
||||||
~v Invoke display editor on message
|
~p Print the message buffer
|
||||||
~w file Write message onto file.
|
~C Dump core
|
||||||
~? Print this message
|
~q Quit, save partial message in dead.letter
|
||||||
|
~x Quit, do not save dead.letter
|
||||||
~!command Invoke the shell
|
~!command Invoke the shell
|
||||||
~|command Pipe the message through the command
|
~_ mail-cmd Perform the command-level request
|
||||||
|
~: mail-cmd Same as ~_
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user