Module Name: src Committed By: roy Date: Thu Jan 5 20:31:37 UTC 2017
Modified Files: src/distrib/sets/lists/comp: mi src/lib/libcurses: Makefile curses.3 curses.h curses_input.3 curses_private.h curses_screen.3 get_wch.c getch.c setterm.c Log Message: Add the set_escdelay(3) and set_tabsize(3) ncurses extensions. To generate a diff of this commit: cvs rdiff -u -r1.2095 -r1.2096 src/distrib/sets/lists/comp/mi cvs rdiff -u -r1.78 -r1.79 src/lib/libcurses/Makefile cvs rdiff -u -r1.63 -r1.64 src/lib/libcurses/curses.3 cvs rdiff -u -r1.115 -r1.116 src/lib/libcurses/curses.h cvs rdiff -u -r1.23 -r1.24 src/lib/libcurses/curses_input.3 cvs rdiff -u -r1.55 -r1.56 src/lib/libcurses/curses_private.h cvs rdiff -u -r1.19 -r1.20 src/lib/libcurses/curses_screen.3 cvs rdiff -u -r1.10 -r1.11 src/lib/libcurses/get_wch.c cvs rdiff -u -r1.60 -r1.61 src/lib/libcurses/getch.c cvs rdiff -u -r1.56 -r1.57 src/lib/libcurses/setterm.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.2095 src/distrib/sets/lists/comp/mi:1.2096 --- src/distrib/sets/lists/comp/mi:1.2095 Thu Jan 5 13:45:51 2017 +++ src/distrib/sets/lists/comp/mi Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.2095 2017/01/05 13:45:51 wiz Exp $ +# $NetBSD: mi,v 1.2096 2017/01/05 20:31:37 roy Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. ./etc/mtree/set.comp comp-sys-root @@ -8841,6 +8841,7 @@ ./usr/share/man/cat3/set_current_field.0 comp-c-catman .cat ./usr/share/man/cat3/set_current_item.0 comp-c-catman .cat ./usr/share/man/cat3/set_curterm.0 comp-c-catman .cat +./usr/share/man/cat3/set_escdelay.0 comp-c-catman .cat ./usr/share/man/cat3/set_field_back.0 comp-c-catman .cat ./usr/share/man/cat3/set_field_buffer.0 comp-c-catman .cat ./usr/share/man/cat3/set_field_fore.0 comp-c-catman .cat @@ -8884,6 +8885,7 @@ ./usr/share/man/cat3/set_menu_win.0 comp-c-catman .cat ./usr/share/man/cat3/set_new_page.0 comp-c-catman .cat ./usr/share/man/cat3/set_panel_userptr.0 comp-c-catman .cat +./usr/share/man/cat3/set_tabsize.0 comp-c-catman .cat ./usr/share/man/cat3/set_term.0 comp-c-catman .cat ./usr/share/man/cat3/set_top_row.0 comp-c-catman .cat ./usr/share/man/cat3/setbuf.0 comp-c-catman .cat @@ -16148,6 +16150,7 @@ ./usr/share/man/html3/set_current_field.html comp-c-htmlman html ./usr/share/man/html3/set_current_item.html comp-c-htmlman html ./usr/share/man/html3/set_curterm.html comp-c-htmlman html +./usr/share/man/html3/set_escdelay.html comp-c-htmlman html ./usr/share/man/html3/set_field_back.html comp-c-htmlman html ./usr/share/man/html3/set_field_buffer.html comp-c-htmlman html ./usr/share/man/html3/set_field_fore.html comp-c-htmlman html @@ -16191,6 +16194,7 @@ ./usr/share/man/html3/set_menu_win.html comp-c-htmlman html ./usr/share/man/html3/set_new_page.html comp-c-htmlman html ./usr/share/man/html3/set_panel_userptr.html comp-c-htmlman html +./usr/share/man/html3/set_tabsize.html comp-c-htmlman html ./usr/share/man/html3/set_term.html comp-c-htmlman html ./usr/share/man/html3/set_top_row.html comp-c-htmlman html ./usr/share/man/html3/setbuf.html comp-c-htmlman html @@ -23458,6 +23462,7 @@ ./usr/share/man/man3/set_current_field.3 comp-c-man .man ./usr/share/man/man3/set_current_item.3 comp-c-man .man ./usr/share/man/man3/set_curterm.3 comp-c-man .man +./usr/share/man/man3/set_escdelay.3 comp-c-man .man ./usr/share/man/man3/set_field_back.3 comp-c-man .man ./usr/share/man/man3/set_field_buffer.3 comp-c-man .man ./usr/share/man/man3/set_field_fore.3 comp-c-man .man @@ -23501,6 +23506,7 @@ ./usr/share/man/man3/set_menu_win.3 comp-c-man .man ./usr/share/man/man3/set_new_page.3 comp-c-man .man ./usr/share/man/man3/set_panel_userptr.3 comp-c-man .man +./usr/share/man/man3/set_tabsize.3 comp-c-man .man ./usr/share/man/man3/set_term.3 comp-c-man .man ./usr/share/man/man3/set_top_row.3 comp-c-man .man ./usr/share/man/man3/setbuf.3 comp-c-man .man Index: src/lib/libcurses/Makefile diff -u src/lib/libcurses/Makefile:1.78 src/lib/libcurses/Makefile:1.79 --- src/lib/libcurses/Makefile:1.78 Tue Jan 3 13:21:40 2017 +++ src/lib/libcurses/Makefile Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.78 2017/01/03 13:21:40 roy Exp $ +# $NetBSD: Makefile,v 1.79 2017/01/05 20:31:37 roy Exp $ # @(#)Makefile 8.2 (Berkeley) 1/2/94 .include <bsd.own.mk> @@ -145,6 +145,7 @@ MLINKS+= curses_addch.3 addch.3 curses_a curses_scroll.3 scrl.3 curses_scroll.3 scroll.3 \ curses_scroll.3 scrollok.3 curses_scroll.3 setscrreg.3 \ curses_cursor.3 setsyx.3 \ + curses_input.3 set_escdelay.3 curses_screen.3 set_tabsize.3 \ curses_screen.3 set_term.3 curses_screen.3 setterm.3 \ curses_standout.3 standend.3 curses_standout.3 standout.3 \ curses_color.3 start_color.3 curses_pad.3 subpad.3 \ Index: src/lib/libcurses/curses.3 diff -u src/lib/libcurses/curses.3:1.63 src/lib/libcurses/curses.3:1.64 --- src/lib/libcurses/curses.3:1.63 Sat Apr 21 12:27:27 2012 +++ src/lib/libcurses/curses.3 Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -.\" $NetBSD: curses.3,v 1.63 2012/04/21 12:27:27 roy Exp $ +.\" $NetBSD: curses.3,v 1.64 2017/01/05 20:31:37 roy Exp $ .\" .\" Copyright (c) 1985, 1991, 1993 .\" The Regents of the University of California. All rights reserved. @@ -29,7 +29,7 @@ .\" .\" @(#)curses.3 8.1 (Berkeley) 6/4/93 .\" -.Dd April 5, 2012 +.Dd January 5, 2017 .Dt CURSES 3 .Os .Sh NAME @@ -221,6 +221,8 @@ must be called before any of the other r .It scrl Ta Xr curses_scroll 3 .It scroll Ta Xr curses_scroll 3 .It scrollok Ta Xr curses_scroll 3 +.It set_escdelay Ta Xr curses_input 3 +.It set_tabsize Ta Xr curses_screen 3 .It set_term Ta Xr curses_screen 3 .It setscrreg Ta Xr curses_scroll 3 .It setterm Ta Xr curses_screen 3 @@ -309,6 +311,9 @@ The maximum delay in milliseconds betwee keystrokes (such are arrow keys) where the adjacent characters are considered part of the same multi-character sequence. The default is 300 milliseconds. +.It TABSIZE +The number of spaces making up a tab. +The default is 8 if not specified by the terminal description. .It LINES The number of lines in the terminal if set. is usually automatically configured by querying the kernel. Index: src/lib/libcurses/curses.h diff -u src/lib/libcurses/curses.h:1.115 src/lib/libcurses/curses.h:1.116 --- src/lib/libcurses/curses.h:1.115 Wed Jan 4 03:51:29 2017 +++ src/lib/libcurses/curses.h Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: curses.h,v 1.115 2017/01/04 03:51:29 roy Exp $ */ +/* $NetBSD: curses.h,v 1.116 2017/01/05 20:31:37 roy Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -749,6 +749,8 @@ int scanw(const char *, ...) __scanflik int scroll(WINDOW *); int scrollok(WINDOW *, bool); int setterm(char *); +int set_escdelay(int); +int set_tabsize(int); SCREEN *set_term(SCREEN *); int start_color(void); WINDOW *subpad(WINDOW *, int, int, int, int); Index: src/lib/libcurses/curses_input.3 diff -u src/lib/libcurses/curses_input.3:1.23 src/lib/libcurses/curses_input.3:1.24 --- src/lib/libcurses/curses_input.3:1.23 Sun Jan 1 03:06:06 2017 +++ src/lib/libcurses/curses_input.3 Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -.\" $NetBSD: curses_input.3,v 1.23 2017/01/01 03:06:06 roy Exp $ +.\" $NetBSD: curses_input.3,v 1.24 2017/01/05 20:31:37 roy Exp $ .\" .\" Copyright (c) 2002 .\" Brett Lymn (bl...@netbsd.org, brett_l...@yahoo.com.au) @@ -55,7 +55,8 @@ .Nm timeout , .Nm wtimeout , .Nm nodelay , -.Nm ungetch +.Nm ungetch , +.Nm set_escdelay .Nd curses input stream routines .Sh LIBRARY .Lb libcurses @@ -103,6 +104,8 @@ .Fn nodelay "WINDOW *win" "boolf flag" .Ft int .Fn ungetch "int c" +.Ft int +.Fn set_escdelay "int escdelay" .Pp .Va extern int ESCDELAY ; .Sh DESCRIPTION @@ -385,6 +388,13 @@ will convert into an unsigned char and push that character back onto the input stream. Only one character of push-back is guaranteed to work, more may be possible depending on system resources. +.Pp +The +.Fn set_escdelay +function sets the +.Va ESCDELAY +value of the current screen to +.Fa escdelay. .Sh RETURN VALUES The functions .Fn getch , @@ -592,3 +602,10 @@ Portable implementations should avoid th .Sh HISTORY The Curses package appeared in .Bx 4.0 . +The +.Fn set_tabsize +function is a +.Em ncurses +extension to the Curses library and was added in +.Nx 8.0 . + Index: src/lib/libcurses/curses_private.h diff -u src/lib/libcurses/curses_private.h:1.55 src/lib/libcurses/curses_private.h:1.56 --- src/lib/libcurses/curses_private.h:1.55 Tue Jan 3 12:42:06 2017 +++ src/lib/libcurses/curses_private.h Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: curses_private.h,v 1.55 2017/01/03 12:42:06 roy Exp $ */ +/* $NetBSD: curses_private.h,v 1.56 2017/01/05 20:31:37 roy Exp $ */ /*- * Copyright (c) 1998-2000 Brett Lymn @@ -201,7 +201,10 @@ struct __screen { int lx, ly; /* loop parameters for refresh */ int COLS; /* Columns on the screen. */ int LINES; /* Lines on the screen. */ + int ESCDELAY; /* Delay between keys in esc seq's. */ +#define ESCDELAY_DEFAULT 300 /* milliseconds. */ int TABSIZE; /* Size of a tab. */ +#define TABSIZE_DEFAULT 8 /* spaces. */ int COLORS; /* Maximum colors on the screen */ int COLOR_PAIRS; /* Maximum color pairs on the screen */ int My_term; /* Use Def_term regardless. */ Index: src/lib/libcurses/curses_screen.3 diff -u src/lib/libcurses/curses_screen.3:1.19 src/lib/libcurses/curses_screen.3:1.20 --- src/lib/libcurses/curses_screen.3:1.19 Thu Jan 5 12:35:41 2017 +++ src/lib/libcurses/curses_screen.3 Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -.\" $NetBSD: curses_screen.3,v 1.19 2017/01/05 12:35:41 wiz Exp $ +.\" $NetBSD: curses_screen.3,v 1.20 2017/01/05 20:31:37 roy Exp $ .\" .\" Copyright (c) 2002 .\" Brett Lymn (bl...@netbsd.org, brett_l...@yahoo.com.au) @@ -30,7 +30,7 @@ .\" SUCH DAMAGE. .\" .\" -.Dd December 30, 2016 +.Dd January 5, 2017 .Dt CURSES_SCREEN 3 .Os .Sh NAME @@ -44,7 +44,8 @@ .Nm initscr , .Nm isendwin , .Nm resizeterm , -.Nm setterm +.Nm setterm , +.Nm set_tabsize .Nd curses terminal and screen routines .Sh LIBRARY .Lb libcurses @@ -70,6 +71,8 @@ .Fn resizeterm "int lines" "int cols" .Ft int .Fn setterm "char *name" +.Ft int +.Fn set_tabsize "int value" .Pp .Va extern int LINES ; .Pp @@ -209,6 +212,13 @@ must precede calls to .Fn newterm , or .Fn setupterm . +.Pp +The +.Fn set_tabsize +function will set +.Va TABSIZE +of the current screen to +.Va tabsize . .Sh RETURN VALUES Functions returning pointers will return .Dv NULL @@ -241,3 +251,9 @@ function is a .Em ncurses extension to the Curses library and was added in .Nx 1.6 . +The +.Fn set_tabsize +function is a +.Em ncurses +extension to the Curses library and was added in +.Nx 8.0 . Index: src/lib/libcurses/get_wch.c diff -u src/lib/libcurses/get_wch.c:1.10 src/lib/libcurses/get_wch.c:1.11 --- src/lib/libcurses/get_wch.c:1.10 Fri Jun 29 10:40:29 2012 +++ src/lib/libcurses/get_wch.c Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: get_wch.c,v 1.10 2012/06/29 10:40:29 blymn Exp $ */ +/* $NetBSD: get_wch.c,v 1.11 2017/01/05 20:31:37 roy Exp $ */ /* * Copyright (c) 2005 The NetBSD Foundation Inc. @@ -36,7 +36,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: get_wch.c,v 1.10 2012/06/29 10:40:29 blymn Exp $"); +__RCSID("$NetBSD: get_wch.c,v 1.11 2017/01/05 20:31:37 roy Exp $"); #endif /* not lint */ #include <string.h> @@ -91,6 +91,7 @@ inkey(wchar_t *wc, int to, int delay) *working = &_cursesi_screen->cbuf_cur, *end = &_cursesi_screen->cbuf_tail; char *inbuf = &_cursesi_screen->cbuf[ 0 ]; + int escdelay = _cursesi_screen->ESCDELAY; #ifdef DEBUG __CTRACE(__CTRACE_INPUT, "inkey (%p, %d, %d)\n", wc, to, delay); @@ -139,11 +140,11 @@ inkey(wchar_t *wc, int to, int delay) } else if (wstate == INKEY_ASSEMBLING) { /* assembling a key sequence */ if (delay) { - if (__timeout(to ? (ESCDELAY / 100) : delay) + if (__timeout(to ? (escdelay / 100) : delay) == ERR) return ERR; } else { - if (to && (__timeout(ESCDELAY / 100) == ERR)) + if (to && (__timeout(escdelay / 100) == ERR)) return ERR; } @@ -189,11 +190,11 @@ inkey(wchar_t *wc, int to, int delay) } else if (wstate == INKEY_WCASSEMBLING) { /* assembling a wide-char sequence */ if (delay) { - if (__timeout(to ? (ESCDELAY / 100) : delay) + if (__timeout(to ? (escdelay / 100) : delay) == ERR) return ERR; } else { - if (to && (__timeout(ESCDELAY / 100) == ERR)) + if (to && (__timeout(escdelay / 100) == ERR)) return ERR; } Index: src/lib/libcurses/getch.c diff -u src/lib/libcurses/getch.c:1.60 src/lib/libcurses/getch.c:1.61 --- src/lib/libcurses/getch.c:1.60 Sun Jan 1 03:06:06 2017 +++ src/lib/libcurses/getch.c Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: getch.c,v 1.60 2017/01/01 03:06:06 roy Exp $ */ +/* $NetBSD: getch.c,v 1.61 2017/01/05 20:31:37 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.60 2017/01/01 03:06:06 roy Exp $"); +__RCSID("$NetBSD: getch.c,v 1.61 2017/01/05 20:31:37 roy Exp $"); #endif #endif /* not lint */ @@ -203,7 +203,7 @@ static const struct tcdata tc[] = { /* Number of TC entries .... */ static const int num_tcs = (sizeof(tc) / sizeof(struct tcdata)); -int ESCDELAY = 300; /* Delay in ms between keys for esc seq's */ +int ESCDELAY; /* Delay in ms between keys for esc seq's */ /* Key buffer */ #define INBUF_SZ 16 /* size of key buffer - must be larger than @@ -550,6 +550,7 @@ inkey(int to, int delay) int c, mapping; keymap_t *current = _cursesi_screen->base_keymap; FILE *infd = _cursesi_screen->infd; + int escdelay = _cursesi_screen->ESCDELAY; k = 0; /* XXX gcc -Wuninitialized */ @@ -595,11 +596,11 @@ reread: } else if (state == INKEY_ASSEMBLING) { /* assembling a key sequence */ if (delay) { - if (__timeout(to ? (ESCDELAY / 100) : delay) + if (__timeout(to ? (escdelay / 100) : delay) == ERR) return ERR; } else { - if (to && (__timeout(ESCDELAY / 100) == ERR)) + if (to && (__timeout(escdelay / 100) == ERR)) return ERR; } @@ -977,3 +978,16 @@ has_key(int key_type) do_keyok(_cursesi_screen->base_keymap, key_type, false, false, &result); return result; } + +/* + * set_escdelay -- + * Sets the escape delay for the current screen. + */ +int +set_escdelay(int escdelay) +{ + + _cursesi_screen->ESCDELAY = escdelay; + ESCDELAY = escdelay; + return OK; +} Index: src/lib/libcurses/setterm.c diff -u src/lib/libcurses/setterm.c:1.56 src/lib/libcurses/setterm.c:1.57 --- src/lib/libcurses/setterm.c:1.56 Sat Dec 31 17:46:35 2016 +++ src/lib/libcurses/setterm.c Thu Jan 5 20:31:37 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: setterm.c,v 1.56 2016/12/31 17:46:35 roy Exp $ */ +/* $NetBSD: setterm.c,v 1.57 2017/01/05 20:31:37 roy Exp $ */ /* * Copyright (c) 1981, 1993, 1994 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)setterm.c 8.8 (Berkeley) 10/25/94"; #else -__RCSID("$NetBSD: setterm.c,v 1.56 2016/12/31 17:46:35 roy Exp $"); +__RCSID("$NetBSD: setterm.c,v 1.57 2017/01/05 20:31:37 roy Exp $"); #endif #endif /* not lint */ @@ -134,13 +134,15 @@ _cursesi_setterm(char *type, SCREEN *scr screen->COLS = (int) strtol(p, NULL, 0); } if ((p = getenv("ESCDELAY")) != NULL) - ESCDELAY = (int) strtol(p, NULL, 0); + screen->ESCDELAY = (int) strtol(p, NULL, 0); + else + screen->ESCDELAY = ESCDELAY_DEFAULT; if ((p = getenv("TABSIZE")) != NULL) screen->TABSIZE = (int) strtol(p, NULL, 0); else if (t_init_tabs(screen->term) >= 0) screen->TABSIZE = (int) t_init_tabs(screen->term); else - screen->TABSIZE = 8; + screen->TABSIZE = TABSIZE_DEFAULT; /* * Want cols > 4, otherwise things will fail. */ @@ -149,6 +151,7 @@ _cursesi_setterm(char *type, SCREEN *scr LINES = screen->LINES; COLS = screen->COLS; + ESCDELAY = screen->ESCDELAY; TABSIZE = screen->TABSIZE; #ifdef DEBUG @@ -280,6 +283,7 @@ _cursesi_resetterm(SCREEN *screen) LINES = screen->LINES; COLS = screen->COLS; + ESCDELAY = screen->ESCDELAY; TABSIZE = screen->TABSIZE; __GT = screen->GT; @@ -389,3 +393,16 @@ does_ctrl_o(const char *exit_cap, const } return 0; } + +/* + * set_tabsize -- + * Sets the tabsize for the current screen. + */ +int +set_tabsize(int tabsize) +{ + + _cursesi_screen->TABSIZE = tabsize; + TABSIZE = tabsize; + return OK; +}