Implement ncurses extension has_key.
This commit is contained in:
parent
c0f2822a3c
commit
6de5f0d137
|
@ -1,4 +1,4 @@
|
||||||
# $NetBSD: mi,v 1.2087 2016/12/31 22:47:01 roy Exp $
|
# $NetBSD: mi,v 1.2088 2017/01/01 03:06:06 roy Exp $
|
||||||
#
|
#
|
||||||
# Note: don't delete entries from here - mark them as "obsolete" instead.
|
# Note: don't delete entries from here - mark them as "obsolete" instead.
|
||||||
./etc/mtree/set.comp comp-sys-root
|
./etc/mtree/set.comp comp-sys-root
|
||||||
|
@ -6740,6 +6740,7 @@
|
||||||
./usr/share/man/cat3/has_colors.0 comp-c-catman .cat
|
./usr/share/man/cat3/has_colors.0 comp-c-catman .cat
|
||||||
./usr/share/man/cat3/has_ic.0 comp-c-catman .cat
|
./usr/share/man/cat3/has_ic.0 comp-c-catman .cat
|
||||||
./usr/share/man/cat3/has_il.0 comp-c-catman .cat
|
./usr/share/man/cat3/has_il.0 comp-c-catman .cat
|
||||||
|
./usr/share/man/cat3/has_key.0 comp-c-catman .cat
|
||||||
./usr/share/man/cat3/hash.0 comp-c-catman .cat
|
./usr/share/man/cat3/hash.0 comp-c-catman .cat
|
||||||
./usr/share/man/cat3/hcreate.0 comp-c-catman .cat
|
./usr/share/man/cat3/hcreate.0 comp-c-catman .cat
|
||||||
./usr/share/man/cat3/hcreate_r.0 comp-c-catman .cat
|
./usr/share/man/cat3/hcreate_r.0 comp-c-catman .cat
|
||||||
|
@ -14085,6 +14086,7 @@
|
||||||
./usr/share/man/html3/has_colors.html comp-c-htmlman html
|
./usr/share/man/html3/has_colors.html comp-c-htmlman html
|
||||||
./usr/share/man/html3/has_ic.html comp-c-htmlman html
|
./usr/share/man/html3/has_ic.html comp-c-htmlman html
|
||||||
./usr/share/man/html3/has_il.html comp-c-htmlman html
|
./usr/share/man/html3/has_il.html comp-c-htmlman html
|
||||||
|
./usr/share/man/html3/has_key.html comp-c-htmlman html
|
||||||
./usr/share/man/html3/hash.html comp-c-htmlman html
|
./usr/share/man/html3/hash.html comp-c-htmlman html
|
||||||
./usr/share/man/html3/hcreate.html comp-c-htmlman html
|
./usr/share/man/html3/hcreate.html comp-c-htmlman html
|
||||||
./usr/share/man/html3/hcreate_r.html comp-c-htmlman html
|
./usr/share/man/html3/hcreate_r.html comp-c-htmlman html
|
||||||
|
@ -21347,6 +21349,7 @@
|
||||||
./usr/share/man/man3/has_colors.3 comp-c-man .man
|
./usr/share/man/man3/has_colors.3 comp-c-man .man
|
||||||
./usr/share/man/man3/has_ic.3 comp-c-man .man
|
./usr/share/man/man3/has_ic.3 comp-c-man .man
|
||||||
./usr/share/man/man3/has_il.3 comp-c-man .man
|
./usr/share/man/man3/has_il.3 comp-c-man .man
|
||||||
|
./usr/share/man/man3/has_key.3 comp-c-man .man
|
||||||
./usr/share/man/man3/hash.3 comp-c-man .man
|
./usr/share/man/man3/hash.3 comp-c-man .man
|
||||||
./usr/share/man/man3/hcreate.3 comp-c-man .man
|
./usr/share/man/man3/hcreate.3 comp-c-man .man
|
||||||
./usr/share/man/man3/hcreate_r.3 comp-c-man .man
|
./usr/share/man/man3/hcreate_r.3 comp-c-man .man
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# $NetBSD: Makefile,v 1.75 2016/12/31 22:47:01 roy Exp $
|
# $NetBSD: Makefile,v 1.76 2017/01/01 03:06:06 roy Exp $
|
||||||
# @(#)Makefile 8.2 (Berkeley) 1/2/94
|
# @(#)Makefile 8.2 (Berkeley) 1/2/94
|
||||||
|
|
||||||
.include <bsd.own.mk>
|
.include <bsd.own.mk>
|
||||||
|
@ -91,7 +91,8 @@ MLINKS+= curses_addch.3 addch.3 curses_addchstr.3 addchnstr.3 \
|
||||||
curses_tty.3 gettmode.3 \
|
curses_tty.3 gettmode.3 \
|
||||||
curses_cursor.3 getyx.3 curses_cursor.3 getsyx.3 \
|
curses_cursor.3 getyx.3 curses_cursor.3 getsyx.3 \
|
||||||
curses_color.3 has_colors.3 curses_tty.3 has_ic.3 \
|
curses_color.3 has_colors.3 curses_tty.3 has_ic.3 \
|
||||||
curses_tty.3 halfdelay.3 curses_tty.3 has_il.3 \
|
curses_tty.3 halfdelay.3 curses_input.3 has_key.3 \
|
||||||
|
curses_tty.3 has_il.3 \
|
||||||
curses_line.3 hline.3 curses_tty.3 idcok.3 \
|
curses_line.3 hline.3 curses_tty.3 idcok.3 \
|
||||||
curses_tty.3 idlok.3 curses_inch.3 inch.3 \
|
curses_tty.3 idlok.3 curses_inch.3 inch.3 \
|
||||||
curses_inch.3 inchnstr.3 curses_inch.3 inchstr.3 \
|
curses_inch.3 inchnstr.3 curses_inch.3 inchstr.3 \
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: curses.h,v 1.111 2016/12/31 22:47:01 roy Exp $ */
|
/* $NetBSD: curses.h,v 1.112 2017/01/01 03:06:06 roy Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1981, 1993, 1994
|
* Copyright (c) 1981, 1993, 1994
|
||||||
|
@ -677,6 +677,7 @@ int halfdelay(int);
|
||||||
bool has_colors(void);
|
bool has_colors(void);
|
||||||
bool has_ic(void);
|
bool has_ic(void);
|
||||||
bool has_il(void);
|
bool has_il(void);
|
||||||
|
int has_key(int);
|
||||||
int hline(chtype, int);
|
int hline(chtype, int);
|
||||||
int idcok(WINDOW *, bool);
|
int idcok(WINDOW *, bool);
|
||||||
int idlok(WINDOW *, bool);
|
int idlok(WINDOW *, bool);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.\" $NetBSD: curses_input.3,v 1.22 2012/04/21 12:27:28 roy Exp $
|
.\" $NetBSD: curses_input.3,v 1.23 2017/01/01 03:06:06 roy Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2002
|
.\" Copyright (c) 2002
|
||||||
.\" Brett Lymn (blymn@NetBSD.org, brett_lymn@yahoo.com.au)
|
.\" Brett Lymn (blymn@NetBSD.org, brett_lymn@yahoo.com.au)
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.\"
|
.\"
|
||||||
.Dd April 5, 2012
|
.Dd January 1, 2017
|
||||||
.Dt CURSES_INPUT 3
|
.Dt CURSES_INPUT 3
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -41,6 +41,7 @@
|
||||||
.Nm mvwgetch ,
|
.Nm mvwgetch ,
|
||||||
.Nm define_key ,
|
.Nm define_key ,
|
||||||
.Nm keyok ,
|
.Nm keyok ,
|
||||||
|
.Nm has_key ,
|
||||||
.Nm getnstr ,
|
.Nm getnstr ,
|
||||||
.Nm wgetnstr ,
|
.Nm wgetnstr ,
|
||||||
.Nm mvgetnstr ,
|
.Nm mvgetnstr ,
|
||||||
|
@ -71,6 +72,8 @@
|
||||||
.Ft int
|
.Ft int
|
||||||
.Fn keyok "int key_symbol" "bool flag"
|
.Fn keyok "int key_symbol" "bool flag"
|
||||||
.Ft int
|
.Ft int
|
||||||
|
.Fn has_key "int key_symbol"
|
||||||
|
.Ft int
|
||||||
.Fn define_key "char *sequence" "int key_symbol"
|
.Fn define_key "char *sequence" "int key_symbol"
|
||||||
.Ft int
|
.Ft int
|
||||||
.Fn getnstr "char *str" "int limit"
|
.Fn getnstr "char *str" "int limit"
|
||||||
|
@ -156,6 +159,13 @@ will behave as if the character sequence associated with that key symbol
|
||||||
was not recognised and will return the component characters one at a time to
|
was not recognised and will return the component characters one at a time to
|
||||||
the caller.
|
the caller.
|
||||||
.Pp
|
.Pp
|
||||||
|
The
|
||||||
|
.Fn has_key
|
||||||
|
function takes a key value and returns
|
||||||
|
.Dv TRUE
|
||||||
|
if the current terminal recognises a key with that value, otherwise
|
||||||
|
.Dv FALSE .
|
||||||
|
.Pp
|
||||||
Custom associations between sequences of characters and a key symbol can
|
Custom associations between sequences of characters and a key symbol can
|
||||||
be made by using the
|
be made by using the
|
||||||
.Fn define_key
|
.Fn define_key
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: getch.c,v 1.59 2012/04/21 12:27:28 roy Exp $ */
|
/* $NetBSD: getch.c,v 1.60 2017/01/01 03:06:06 roy Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1981, 1993, 1994
|
* Copyright (c) 1981, 1993, 1994
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)getch.c 8.2 (Berkeley) 5/4/94";
|
static char sccsid[] = "@(#)getch.c 8.2 (Berkeley) 5/4/94";
|
||||||
#else
|
#else
|
||||||
__RCSID("$NetBSD: getch.c,v 1.59 2012/04/21 12:27:28 roy Exp $");
|
__RCSID("$NetBSD: getch.c,v 1.60 2017/01/01 03:06:06 roy Exp $");
|
||||||
#endif
|
#endif
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
|
|
||||||
|
@ -216,7 +216,8 @@ static void add_key_sequence(SCREEN *screen, char *sequence, int key_type);
|
||||||
static key_entry_t *add_new_key(keymap_t *current, char ch, int key_type,
|
static key_entry_t *add_new_key(keymap_t *current, char ch, int key_type,
|
||||||
int symbol);
|
int symbol);
|
||||||
static void delete_key_sequence(keymap_t *current, int key_type);
|
static void delete_key_sequence(keymap_t *current, int key_type);
|
||||||
static void do_keyok(keymap_t *current, int key_type, bool flag, int *retval);
|
static void do_keyok(keymap_t *current, int key_type, bool set, bool flag,
|
||||||
|
int *retval);
|
||||||
static keymap_t *new_keymap(void); /* create a new keymap */
|
static keymap_t *new_keymap(void); /* create a new keymap */
|
||||||
static key_entry_t *new_key(void); /* create a new key entry */
|
static key_entry_t *new_key(void); /* create a new key entry */
|
||||||
static wchar_t inkey(int to, int delay);
|
static wchar_t inkey(int to, int delay);
|
||||||
|
@ -733,7 +734,7 @@ keyok(int key_type, bool flag)
|
||||||
{
|
{
|
||||||
int result = ERR;
|
int result = ERR;
|
||||||
|
|
||||||
do_keyok(_cursesi_screen->base_keymap, key_type, flag, &result);
|
do_keyok(_cursesi_screen->base_keymap, key_type, true, flag, &result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -742,8 +743,8 @@ keyok(int key_type, bool flag)
|
||||||
* Does the actual work for keyok, we need to recurse through the
|
* Does the actual work for keyok, we need to recurse through the
|
||||||
* keymaps finding the passed key symbol.
|
* keymaps finding the passed key symbol.
|
||||||
*/
|
*/
|
||||||
void
|
static void
|
||||||
do_keyok(keymap_t *current, int key_type, bool flag, int *retval)
|
do_keyok(keymap_t *current, int key_type, bool set, bool flag, int *retval)
|
||||||
{
|
{
|
||||||
key_entry_t *key;
|
key_entry_t *key;
|
||||||
int i;
|
int i;
|
||||||
|
@ -759,10 +760,11 @@ do_keyok(keymap_t *current, int key_type, bool flag, int *retval)
|
||||||
key = current->key[current->mapping[i]];
|
key = current->key[current->mapping[i]];
|
||||||
|
|
||||||
if (key->type == KEYMAP_MULTI)
|
if (key->type == KEYMAP_MULTI)
|
||||||
do_keyok(key->value.next, key_type, flag, retval);
|
do_keyok(key->value.next, key_type, set, flag, retval);
|
||||||
else if ((key->type == KEYMAP_LEAF)
|
else if ((key->type == KEYMAP_LEAF)
|
||||||
&& (key->value.symbol == key_type)) {
|
&& (key->value.symbol == key_type)) {
|
||||||
key->enable = flag;
|
if (set)
|
||||||
|
key->enable = flag;
|
||||||
*retval = OK; /* we found at least one instance, ok */
|
*retval = OK; /* we found at least one instance, ok */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -966,3 +968,12 @@ __unget(wint_t c)
|
||||||
_cursesi_screen->unget_pos++;
|
_cursesi_screen->unget_pos++;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
has_key(int key_type)
|
||||||
|
{
|
||||||
|
int result = ERR;
|
||||||
|
|
||||||
|
do_keyok(_cursesi_screen->base_keymap, key_type, false, false, &result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue