Module Name: src Committed By: roy Date: Sun Jan 1 03:06:07 UTC 2017
Modified Files: src/distrib/sets/lists/comp: mi src/lib/libcurses: Makefile curses.h curses_input.3 getch.c Log Message: Implement ncurses extension has_key. To generate a diff of this commit: cvs rdiff -u -r1.2087 -r1.2088 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.75 -r1.76 src/lib/libcurses/Makefile cvs rdiff -u -r1.111 -r1.112 src/lib/libcurses/curses.h cvs rdiff -u -r1.22 -r1.23 src/lib/libcurses/curses_input.3 cvs rdiff -u -r1.59 -r1.60 src/lib/libcurses/getch.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/comp/mi diff -u src/distrib/sets/lists/comp/mi:1.2087 src/distrib/sets/lists/comp/mi:1.2088 --- src/distrib/sets/lists/comp/mi:1.2087 Sat Dec 31 22:47:01 2016 +++ src/distrib/sets/lists/comp/mi Sun Jan 1 03:06:06 2017 @@ -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. ./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_ic.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/hcreate.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_ic.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/hcreate.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_ic.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/hcreate.3 comp-c-man .man ./usr/share/man/man3/hcreate_r.3 comp-c-man .man Index: src/lib/libcurses/Makefile diff -u src/lib/libcurses/Makefile:1.75 src/lib/libcurses/Makefile:1.76 --- src/lib/libcurses/Makefile:1.75 Sat Dec 31 22:47:01 2016 +++ src/lib/libcurses/Makefile Sun Jan 1 03:06:06 2017 @@ -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 .include <bsd.own.mk> @@ -91,7 +91,8 @@ MLINKS+= curses_addch.3 addch.3 curses_a curses_tty.3 gettmode.3 \ curses_cursor.3 getyx.3 curses_cursor.3 getsyx.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_tty.3 idlok.3 curses_inch.3 inch.3 \ curses_inch.3 inchnstr.3 curses_inch.3 inchstr.3 \ Index: src/lib/libcurses/curses.h diff -u src/lib/libcurses/curses.h:1.111 src/lib/libcurses/curses.h:1.112 --- src/lib/libcurses/curses.h:1.111 Sat Dec 31 22:47:01 2016 +++ src/lib/libcurses/curses.h Sun Jan 1 03:06:06 2017 @@ -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 @@ -677,6 +677,7 @@ int halfdelay(int); bool has_colors(void); bool has_ic(void); bool has_il(void); +int has_key(int); int hline(chtype, int); int idcok(WINDOW *, bool); int idlok(WINDOW *, bool); Index: src/lib/libcurses/curses_input.3 diff -u src/lib/libcurses/curses_input.3:1.22 src/lib/libcurses/curses_input.3:1.23 --- src/lib/libcurses/curses_input.3:1.22 Sat Apr 21 12:27:28 2012 +++ src/lib/libcurses/curses_input.3 Sun Jan 1 03:06:06 2017 @@ -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 .\" Brett Lymn (bl...@netbsd.org, brett_l...@yahoo.com.au) @@ -30,7 +30,7 @@ .\" SUCH DAMAGE. .\" .\" -.Dd April 5, 2012 +.Dd January 1, 2017 .Dt CURSES_INPUT 3 .Os .Sh NAME @@ -41,6 +41,7 @@ .Nm mvwgetch , .Nm define_key , .Nm keyok , +.Nm has_key , .Nm getnstr , .Nm wgetnstr , .Nm mvgetnstr , @@ -71,6 +72,8 @@ .Ft int .Fn keyok "int key_symbol" "bool flag" .Ft int +.Fn has_key "int key_symbol" +.Ft int .Fn define_key "char *sequence" "int key_symbol" .Ft int .Fn getnstr "char *str" "int limit" @@ -156,6 +159,13 @@ will behave as if the character sequence was not recognised and will return the component characters one at a time to the caller. .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 be made by using the .Fn define_key Index: src/lib/libcurses/getch.c diff -u src/lib/libcurses/getch.c:1.59 src/lib/libcurses/getch.c:1.60 --- src/lib/libcurses/getch.c:1.59 Sat Apr 21 12:27:28 2012 +++ src/lib/libcurses/getch.c Sun Jan 1 03:06:06 2017 @@ -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 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)getch.c 8.2 (Berkeley) 5/4/94"; #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 /* not lint */ @@ -216,7 +216,8 @@ static void add_key_sequence(SCREEN *scr static key_entry_t *add_new_key(keymap_t *current, char ch, int key_type, int symbol); 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 key_entry_t *new_key(void); /* create a new key entry */ static wchar_t inkey(int to, int delay); @@ -733,7 +734,7 @@ keyok(int key_type, bool flag) { 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; } @@ -742,8 +743,8 @@ keyok(int key_type, bool flag) * Does the actual work for keyok, we need to recurse through the * keymaps finding the passed key symbol. */ -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) { key_entry_t *key; int i; @@ -759,10 +760,11 @@ do_keyok(keymap_t *current, int key_type key = current->key[current->mapping[i]]; 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) && (key->value.symbol == key_type)) { - key->enable = flag; + if (set) + key->enable = flag; *retval = OK; /* we found at least one instance, ok */ } } @@ -966,3 +968,12 @@ __unget(wint_t c) _cursesi_screen->unget_pos++; return OK; } + +int +has_key(int key_type) +{ + int result = ERR; + + do_keyok(_cursesi_screen->base_keymap, key_type, false, false, &result); + return result; +}