1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-31 03:04:49 +01:00

26110: option to allow vared to open to an alternative terminal

This commit is contained in:
Peter Stephenson 2008-12-09 17:37:01 +00:00
parent 61e692400b
commit 02f05d7462
3 changed files with 25 additions and 6 deletions

View file

@ -1,3 +1,8 @@
2008-12-09 Peter Stephenson <pws@csr.com>
* 26119: Doc/Zsh/zle.yo, Src/Zle/zle_main.c: option to allow vared
to open to an alternative terminal.
2008-12-09 Clint Adams <clint@zsh.org>
* Richard Hartmann: 26114: Completion/Unix/Command/_git: add color

View file

@ -292,7 +292,8 @@ findex(vared)
cindex(parameters, editing)
cindex(editing parameters)
xitem(tt(vared) [ tt(-Aache) ] [ tt(-p) var(prompt) ] [ tt(-r) var(rprompt) ])
item( [ -M var(main-keymap) ] [ -m var(vicmd-keymap) ] var(name))(
xitem( [ tt(-M) var(main-keymap) ] [ tt(-m) var(vicmd-keymap) ])
item( [ tt(-t) var(tty) ] var(name))(
The value of the parameter var(name) is loaded into the edit
buffer, and the line editor is invoked. When the editor exits,
var(name) is set to the string value returned by the editor.
@ -326,6 +327,10 @@ keymap during editing. For vi-style editing, this allows a pair of keymaps
to override tt(viins) and tt(vicmd). For emacs-style editing, only tt(-M)
is normally needed but the tt(-m) option may still be used. On exit, the
previous keymaps will be restored.
If `tt(-t) var(tty)' is given, var(tty) is the name of a terminal device
to be used instead of the default tt(/dev/tty). If var(tty) does not
refer to a terminal an error is reported.
)
findex(zle)
cindex(widgets, rebinding)

View file

@ -1449,7 +1449,7 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func))
Value v;
Param pm = 0;
int ifl;
int type = PM_SCALAR, obreaks = breaks, haso = 0;
int type = PM_SCALAR, obreaks = breaks, haso = 0, oSHTTY = 0;
char *p1, *p2, *main_keymapname, *vicmd_keymapname;
Keymap main_keymapsave = NULL, vicmd_keymapsave = NULL;
FILE *oshout = NULL;
@ -1558,13 +1558,22 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func))
s = ztrdup(s);
}
if (SHTTY == -1) {
if (SHTTY == -1 || OPT_ISSET(ops,'t')) {
/* need to open /dev/tty specially */
if ((SHTTY = open("/dev/tty", O_RDWR|O_NOCTTY)) == -1) {
oSHTTY = SHTTY;
if ((SHTTY = open(OPT_ISSET(ops,'t') ? OPT_ARG(ops,'t') : "/dev/tty",
O_RDWR|O_NOCTTY)) == -1) {
zwarnnam(name, "can't access terminal");
zsfree(s);
return 1;
}
if (!isatty(SHTTY)) {
zwarnnam(name, "%s: not a terminal", OPT_ARG(ops,'t'));
close(SHTTY);
SHTTY = oSHTTY;
zsfree(s);
return 1;
}
oshout = shout;
init_shout();
@ -1597,7 +1606,7 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func))
if (haso) {
fclose(shout); /* close(SHTTY) */
shout = oshout;
SHTTY = -1;
SHTTY = oSHTTY;
}
if (!t || errflag) {
/* error in editing */
@ -1887,7 +1896,7 @@ zle_main_entry(int cmd, va_list ap)
static struct builtin bintab[] = {
BUILTIN("bindkey", 0, bin_bindkey, 0, -1, 0, "evaM:ldDANmrsLRp", NULL),
BUILTIN("vared", 0, bin_vared, 1, 1, 0, "aAcehM:m:p:r:", NULL),
BUILTIN("vared", 0, bin_vared, 1, 1, 0, "aAcehM:m:p:r:t:", NULL),
BUILTIN("zle", 0, bin_zle, 0, -1, 0, "aAcCDFgGIKlLmMNRU", NULL),
};