Allow setty to set chars using char=value
This commit is contained in:
parent
492c11116f
commit
730f23e551
|
@ -1,4 +1,4 @@
|
|||
.\" $NetBSD: editrc.5,v 1.16 2003/06/27 18:57:09 wiz Exp $
|
||||
.\" $NetBSD: editrc.5,v 1.17 2003/10/18 22:24:34 christos Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1997-2000 The NetBSD Foundation, Inc.
|
||||
.\" All rights reserved.
|
||||
|
@ -251,6 +251,7 @@ No sanity checking is done.
|
|||
.Op Ar +mode
|
||||
.Op Ar -mode
|
||||
.Op Ar mode
|
||||
.Op Ar char=c
|
||||
.Xc
|
||||
Control which tty modes that
|
||||
.Nm
|
||||
|
@ -291,6 +292,15 @@ fixes
|
|||
on or off or removes control of
|
||||
.Ar mode
|
||||
in the chosen set.
|
||||
.Pp
|
||||
.Ic Setty
|
||||
can also be used to set tty characters to particular values using
|
||||
.Ar char=value .
|
||||
If
|
||||
.Ar value
|
||||
is empty
|
||||
then the character is set to
|
||||
.Dv _POSIX_VDISABLE .
|
||||
.El
|
||||
.Sh EDITOR COMMANDS
|
||||
The following editor commands are available for use in key bindings:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tty.c,v 1.18 2003/08/07 16:44:34 agc Exp $ */
|
||||
/* $NetBSD: tty.c,v 1.19 2003/10/18 22:24:34 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -37,13 +37,14 @@
|
|||
#if 0
|
||||
static char sccsid[] = "@(#)tty.c 8.1 (Berkeley) 6/4/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: tty.c,v 1.18 2003/08/07 16:44:34 agc Exp $");
|
||||
__RCSID("$NetBSD: tty.c,v 1.19 2003/10/18 22:24:34 christos Exp $");
|
||||
#endif
|
||||
#endif /* not lint && not SCCSID */
|
||||
|
||||
/*
|
||||
* tty.c: tty interface stuff
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include "tty.h"
|
||||
#include "el.h"
|
||||
|
||||
|
@ -451,6 +452,7 @@ private const ttymodes_t ttymodes[] = {
|
|||
#define tty__geteightbit(td) (((td)->c_cflag & CSIZE) == CS8)
|
||||
#define tty__cooked_mode(td) ((td)->c_lflag & ICANON)
|
||||
|
||||
private int tty__getcharindex(int);
|
||||
private void tty__getchar(struct termios *, unsigned char *);
|
||||
private void tty__setchar(struct termios *, unsigned char *);
|
||||
private speed_t tty__getspeed(struct termios *);
|
||||
|
@ -584,6 +586,113 @@ tty__getspeed(struct termios *td)
|
|||
return (spd);
|
||||
}
|
||||
|
||||
/* tty__getspeed():
|
||||
* Return the index of the asked char in the c_cc array
|
||||
*/
|
||||
private int
|
||||
tty__getcharindex(int i)
|
||||
{
|
||||
switch (i) {
|
||||
#ifdef VINTR
|
||||
case C_INTR:
|
||||
return VINTR;
|
||||
#endif /* VINTR */
|
||||
#ifdef VQUIT
|
||||
case C_QUIT:
|
||||
return VQUIT;
|
||||
#endif /* VQUIT */
|
||||
#ifdef VERASE
|
||||
case C_ERASE:
|
||||
return VERASE;
|
||||
#endif /* VERASE */
|
||||
#ifdef VKILL
|
||||
case C_KILL:
|
||||
return VKILL;
|
||||
#endif /* VKILL */
|
||||
#ifdef VEOF
|
||||
case C_EOF:
|
||||
return VEOF;
|
||||
#endif /* VEOF */
|
||||
#ifdef VEOL
|
||||
case C_EOL:
|
||||
return VEOL;
|
||||
#endif /* VEOL */
|
||||
#ifdef VEOL2
|
||||
case C_EOL2:
|
||||
return VEOL2;
|
||||
#endif /* VEOL2 */
|
||||
#ifdef VSWTCH
|
||||
case C_SWTCH:
|
||||
return VSWTCH;
|
||||
#endif /* VSWTCH */
|
||||
#ifdef VDSWTCH
|
||||
case C_DSWTCH:
|
||||
return VDSWTCH;
|
||||
#endif /* VDSWTCH */
|
||||
#ifdef VERASE2
|
||||
case C_ERASE2:
|
||||
return VERASE2;
|
||||
#endif /* VERASE2 */
|
||||
#ifdef VSTART
|
||||
case C_START:
|
||||
return VSTART;
|
||||
#endif /* VSTART */
|
||||
#ifdef VSTOP
|
||||
case C_STOP:
|
||||
return VSTOP;
|
||||
#endif /* VSTOP */
|
||||
#ifdef VWERASE
|
||||
case C_WERASE:
|
||||
return VWERASE;
|
||||
#endif /* VWERASE */
|
||||
#ifdef VSUSP
|
||||
case C_SUSP:
|
||||
return VSUSP;
|
||||
#endif /* VSUSP */
|
||||
#ifdef VDSUSP
|
||||
case C_DSUSP:
|
||||
return VDSUSP;
|
||||
#endif /* VDSUSP */
|
||||
#ifdef VREPRINT
|
||||
case C_REPRINT:
|
||||
return VREPRINT;
|
||||
#endif /* VREPRINT */
|
||||
#ifdef VDISCARD
|
||||
case C_DISCARD:
|
||||
return VDISCARD;
|
||||
#endif /* VDISCARD */
|
||||
#ifdef VLNEXT
|
||||
case C_LNEXT:
|
||||
return VLNEXT;
|
||||
#endif /* VLNEXT */
|
||||
#ifdef VSTATUS
|
||||
case C_STATUS:
|
||||
return VSTATUS;
|
||||
#endif /* VSTATUS */
|
||||
#ifdef VPAGE
|
||||
case C_PAGE:
|
||||
return VPAGE;
|
||||
#endif /* VPAGE */
|
||||
#ifdef VPGOFF
|
||||
case C_PGOFF:
|
||||
return VPGOFF;
|
||||
#endif /* VPGOFF */
|
||||
#ifdef VKILL2
|
||||
case C_KILL2:
|
||||
return VKILL2;
|
||||
#endif /* KILL2 */
|
||||
#ifdef VMIN
|
||||
case C_MIN:
|
||||
return VMIN;
|
||||
#endif /* VMIN */
|
||||
#ifdef VTIME
|
||||
case C_TIME:
|
||||
return VTIME;
|
||||
#endif /* VTIME */
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* tty__getchar():
|
||||
* Get the tty characters
|
||||
|
@ -1044,6 +1153,7 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
|
|||
int aflag = 0;
|
||||
const char *s, *d;
|
||||
const char *name;
|
||||
struct termios *tios = &el->el_tty.t_ex;
|
||||
int z = EX_IO;
|
||||
|
||||
if (argv == NULL)
|
||||
|
@ -1058,14 +1168,17 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
|
|||
break;
|
||||
case 'd':
|
||||
argv++;
|
||||
tios = &el->el_tty.t_ed;
|
||||
z = ED_IO;
|
||||
break;
|
||||
case 'x':
|
||||
argv++;
|
||||
tios = &el->el_tty.t_ex;
|
||||
z = EX_IO;
|
||||
break;
|
||||
case 'q':
|
||||
argv++;
|
||||
tios = &el->el_tty.t_ts;
|
||||
z = QU_IO;
|
||||
break;
|
||||
default:
|
||||
|
@ -1115,6 +1228,7 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
|
|||
return (0);
|
||||
}
|
||||
while (argv && (s = *argv++)) {
|
||||
char *p;
|
||||
switch (*s) {
|
||||
case '+':
|
||||
case '-':
|
||||
|
@ -1125,8 +1239,11 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
|
|||
break;
|
||||
}
|
||||
d = s;
|
||||
if ((p = strchr(s, '=')) != NULL)
|
||||
*p++ = '\0';
|
||||
for (m = ttymodes; m->m_name; m++)
|
||||
if (strcmp(m->m_name, d) == 0)
|
||||
if (strcmp(m->m_name, d) == 0 &&
|
||||
(p == NULL || m->m_type == MD_CHAR))
|
||||
break;
|
||||
|
||||
if (!m->m_name) {
|
||||
|
@ -1134,6 +1251,17 @@ tty_stty(EditLine *el, int argc __attribute__((__unused__)), const char **argv)
|
|||
"%s: Invalid argument `%s'.\n", name, d);
|
||||
return (-1);
|
||||
}
|
||||
if (p) {
|
||||
int c = ffs((int)m->m_value);
|
||||
int v = *p ? parse__escape((const char **const) &p) :
|
||||
el->el_tty.t_vdisable;
|
||||
assert(c-- != 0);
|
||||
c = tty__getcharindex(c);
|
||||
assert(c != -1);
|
||||
printf("setting %d to %d\n", c, v);
|
||||
tios->c_cc[c] = v;
|
||||
continue;
|
||||
}
|
||||
switch (x) {
|
||||
case '+':
|
||||
el->el_tty.t_t[z][m->m_type].t_setmask |= m->m_value;
|
||||
|
|
Loading…
Reference in New Issue