ncurses 5.7 - patch 20100206

+ update mrxvt terminfo entry -TD
+ modify win_driver.c to support mouse single-clicks.
+ correct name for termlib in ncurses*-config, e.g., if it is renamed
  to provide a single file for ncurses/ncursesw libraries (patch by
  Miroslav Lichvar).
This commit is contained in:
Thomas E. Dickey 2010-02-07 01:40:29 +00:00
parent 41068edef0
commit 626c294438
9 changed files with 172 additions and 27 deletions

9
NEWS
View File

@ -25,7 +25,7 @@
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
-------------------------------------------------------------------------------
-- $Id: NEWS,v 1.1500 2010/01/30 23:48:39 tom Exp $
-- $Id: NEWS,v 1.1503 2010/02/06 22:16:30 tom Exp $
-------------------------------------------------------------------------------
This is a log of changes that ncurses has gone through since Zeyd started
@ -45,6 +45,13 @@ See the AUTHORS file for the corresponding full names.
Changes through 1.9.9e did not credit all contributions;
it is not possible to add this information.
20100206
+ update mrxvt terminfo entry -TD
+ modify win_driver.c to support mouse single-clicks.
+ correct name for termlib in ncurses*-config, e.g., if it is renamed
to provide a single file for ncurses/ncursesw libraries (patch by
Miroslav Lichvar).
20100130
+ use vfork in test/ditto.c if available (request by Mike Frysinger).
+ miscellaneous cleanup of manpages.

View File

@ -25,7 +25,7 @@
# use or other dealings in this Software without prior written #
# authorization. #
##############################################################################
# $Id: dist.mk,v 1.744 2010/01/30 18:27:04 tom Exp $
# $Id: dist.mk,v 1.745 2010/02/06 15:00:38 tom Exp $
# Makefile for creating ncurses distributions.
#
# This only needs to be used directly as a makefile by developers, but
@ -37,7 +37,7 @@ SHELL = /bin/sh
# These define the major/minor/patch versions of ncurses.
NCURSES_MAJOR = 5
NCURSES_MINOR = 7
NCURSES_PATCH = 20100130
NCURSES_PATCH = 20100206
# We don't append the patch to the version, since this only applies to releases
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)

View File

@ -1,7 +1,7 @@
#!@SHELL@
# $Id: gen-pkgconfig.in,v 1.7 2009/03/14 20:37:54 tom Exp $
# $Id: gen-pkgconfig.in,v 1.8 2010/02/06 22:12:07 Miroslav.Lichvar Exp $
##############################################################################
# Copyright (c) 2009 Free Software Foundation, Inc. #
# Copyright (c) 2009,2010 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
@ -44,6 +44,7 @@ MENU_NAME=menu # @MENU_NAME@
FORM_NAME=form # @FORM_NAME@
CXX_NAME=ncurses++ # @CXX_NAME@
DFT_DEP_SUFFIX=@DFT_DEP_SUFFIX@
TINFO_ARG_SUFFIX=@TINFO_ARG_SUFFIX@
CXX_LIB_SUFFIX=@CXX_LIB_SUFFIX@
prefix="@prefix@"
@ -57,16 +58,14 @@ show_includedir='@includedir@'
show_libdir='@libdir@'
MAIN_LIBRARY="${LIB_NAME}@DFT_ARG_SUFFIX@"
SUB_LIBRARY="${TINFO_NAME}@DFT_ARG_SUFFIX@"
SUB_LIBRARY="${TINFO_ARG_SUFFIX}"
PANEL_LIBRARY="${PANEL_NAME}@DFT_ARG_SUFFIX@"
MENU_LIBRARY="${MENU_NAME}@DFT_ARG_SUFFIX@"
FORM_LIBRARY="${FORM_NAME}@DFT_ARG_SUFFIX@"
SUB_LIBRARY_REQ=${SUB_LIBRARY}
TINFO_NAME_REQ=${TINFO_NAME}
if test $TINFO_NAME = $LIB_NAME ; then
SUB_LIBRARY_REQ=
TINFO_NAME_REQ=
fi
for lib in ../lib/*
@ -88,7 +87,7 @@ do
desc="ncurses @NCURSES_MAJOR@.@NCURSES_MINOR@"
if test $name = $MAIN_LIBRARY ; then
reqs=$TINFO_NAME_REQ
reqs=$SUB_LIBRARY_REQ
desc="$desc library"
elif test $name = $SUB_LIBRARY ; then
reqs=

View File

@ -1,7 +1,7 @@
#!@SHELL@
# $Id: ncurses-config.in,v 1.23 2009/03/14 19:20:57 Charles.Wilson Exp $
# $Id: ncurses-config.in,v 1.24 2010/02/06 22:12:16 Miroslav.Lichvar Exp $
##############################################################################
# Copyright (c) 2006-2007,2009 Free Software Foundation, Inc. #
# Copyright (c) 2006-2009,2010 Free Software Foundation, Inc. #
# #
# Permission is hereby granted, free of charge, to any person obtaining a #
# copy of this software and associated documentation files (the "Software"), #
@ -40,7 +40,7 @@ datadir="@datadir@"
mandir="@mandir@"
THIS="@LIB_NAME@@DFT_ARG_SUFFIX@"
TINFO_LIB="@TINFO_NAME@@DFT_ARG_SUFFIX@"
TINFO_LIB="@TINFO_ARG_SUFFIX@"
LANG=C; export LANG
LANGUAGE=C; export LANGUAGE

View File

@ -6,8 +6,8 @@
# Report bugs and new terminal descriptions to
# bug-ncurses@gnu.org
#
# $Revision: 1.358 $
# $Date: 2009/12/26 19:36:05 $
# $Revision: 1.359 $
# $Date: 2010/02/06 20:55:33 $
#
# The original header is preserved below for reference. It is noted that there
# is a "newer" version which differs in some cosmetic details (but actually
@ -4038,12 +4038,21 @@ rxvt-cygwin-native|rxvt terminal emulator (native MS Window System port) on cygw
rxvt-16color|xterm with 16 colors like aixterm,
ncv#32, use=ibm+16color, use=rxvt,
# mrxvt 0.5.3
# mrxvt 0.5.4
#
# mrxvt is based on rxvt 2.7.11, but has by default XTERM_FKEYS defined, which
# makes its function-keys different from other flavors of rxvt -TD
mrxvt|multitabbed rxvt,
use=xterm+pcc2, use=xterm+r6f2, use=rxvt,
kEND=\E[8;2~, kHOM=\E[7;2~, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kend=\E[8~, khome=\E[7~,
kEND3=\E[8;3~, kEND4=\E[8;4~, kEND5=\E[8;5~,
kEND6=\E[8;6~, kEND7=\E[8;7~, kHOM3=\E[7;3~,
kHOM4=\E[7;4~, kHOM5=\E[7;5~, kHOM6=\E[7;6~,
kHOM7=\E[7;7~, use=xterm+r6f2, use=xterm+pcfkeys,
use=rxvt,
mrxvt-256color|multitabbed rxvt with 256 colors,
use=xterm+256color, use=mrxvt,
# From: Michael Jennings <mej@valinux.com>
#
@ -22084,6 +22093,9 @@ v3220|LANPAR Vision II model 3220/3221/3222,
# * add bterm (bogl 0.1.18) -TD
# * minor fix to rxvt+pcfkeys -TD
#
# 2010-02-06
# * update mrxvt to 0.5.4, add mrxvt-256color -TD
#
# The following sets edit modes for GNU EMACS.
# Local Variables:
# fill-prefix:"\t"

View File

@ -42,7 +42,7 @@
#include <curses.priv.h>
MODULE_ID("$Id: lib_getch.c,v 1.109 2009/10/24 21:58:34 tom Exp $")
MODULE_ID("$Id: lib_getch.c,v 1.110 2010/02/06 18:39:16 tom Exp $")
#include <fifo_defs.h>
@ -256,6 +256,14 @@ fifo_push(SCREEN *sp EVENTLIST_2nd(_nc_eventlist * evl))
ch = KEY_MOUSE;
n = 1;
} else
#endif
#ifdef USE_TERM_DRIVER
if ((sp->_mouse_type == M_TERM_DRIVER)
&& (sp->_drv_mouse_head < sp->_drv_mouse_tail)) {
sp->_mouse_event(sp);
ch = KEY_MOUSE;
n = 1;
} else
#endif
{ /* Can block... */
#ifdef USE_TERM_DRIVER

View File

@ -84,7 +84,7 @@
#define CUR SP_TERMTYPE
#endif
MODULE_ID("$Id: lib_mouse.c,v 1.111 2010/01/02 21:06:52 tom Exp $")
MODULE_ID("$Id: lib_mouse.c,v 1.112 2010/02/06 19:54:08 tom Exp $")
#include <tic.h>
@ -678,7 +678,7 @@ _nc_mouse_init(SCREEN *sp)
* fifo_push() in lib_getch.c
*/
static bool
_nc_mouse_event(SCREEN *sp GCC_UNUSED)
_nc_mouse_event(SCREEN *sp)
{
MEVENT *eventp = sp->_mouse_eventp;
bool result = FALSE;
@ -778,6 +778,28 @@ _nc_mouse_event(SCREEN *sp GCC_UNUSED)
break;
#endif /* USE_SYSMOUSE */
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
while (sp->_drv_mouse_head < sp->_drv_mouse_tail) {
*eventp = sp->_drv_mouse_fifo[sp->_drv_mouse_head];
/*
* Point the fifo-head to the next possible location. If there
* are none, reset the indices.
*/
sp->_drv_mouse_head += 1;
if (sp->_drv_mouse_head == sp->_drv_mouse_tail) {
sp->_drv_mouse_tail = 0;
sp->_drv_mouse_head = 0;
}
/* bump the next-free pointer into the circular list */
sp->_mouse_eventp = eventp = NEXT(eventp);
result = TRUE;
}
break;
#endif
case M_NONE:
break;
}
@ -974,6 +996,11 @@ mouse_activate(SCREEN *sp, bool on)
signal(SIGUSR2, handle_sysmouse);
sp->_mouse_active = TRUE;
break;
#endif
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
sp->_mouse_active = TRUE;
break;
#endif
case M_NONE:
return;
@ -1003,6 +1030,11 @@ mouse_activate(SCREEN *sp, bool on)
signal(SIGUSR2, SIG_IGN);
sp->_mouse_active = FALSE;
break;
#endif
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
sp->_mouse_active = FALSE;
break;
#endif
case M_NONE:
return;
@ -1240,6 +1272,11 @@ _nc_mouse_wrap(SCREEN *sp)
case M_SYSMOUSE:
mouse_activate(sp, FALSE);
break;
#endif
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
mouse_activate(sp, FALSE);
break;
#endif
case M_NONE:
break;
@ -1272,6 +1309,13 @@ _nc_mouse_resume(SCREEN *sp)
mouse_activate(sp, TRUE);
break;
#endif
#ifdef USE_TERM_DRIVER
case M_TERM_DRIVER:
mouse_activate(sp, TRUE);
break;
#endif
case M_NONE:
break;
}

View File

@ -35,7 +35,7 @@
/*
* $Id: curses.priv.h,v 1.450 2010/01/23 22:05:30 tom Exp $
* $Id: curses.priv.h,v 1.451 2010/02/06 19:15:52 tom Exp $
*
* curses.priv.h
*
@ -558,6 +558,9 @@ typedef enum {
#if USE_SYSMOUSE
,M_SYSMOUSE /* FreeBSD sysmouse on console */
#endif
#ifdef USE_TERM_DRIVER
,M_TERM_DRIVER /* Win32 console, etc */
#endif
} MouseType;
/*
@ -1031,6 +1034,13 @@ struct screen {
int _sysmouse_new_buttons;
#endif
#ifdef USE_TERM_DRIVER
MEVENT _drv_mouse_fifo[FIFO_SIZE];
int _drv_mouse_head;
int _drv_mouse_tail;
int _drv_mouse_old_buttons;
int _drv_mouse_new_buttons;
#endif
/*
* This supports automatic resizing
*/

View File

@ -31,9 +31,14 @@
* *
****************************************************************************/
/*
* TODO - GetMousePos(POINT * result) from ntconio.c
* TODO - implement nodelay
*/
#include <curses.priv.h>
MODULE_ID("$Id: win_driver.c,v 1.5 2010/01/16 22:42:30 tom Exp $")
MODULE_ID("$Id: win_driver.c,v 1.6 2010/02/06 19:55:44 tom Exp $")
#define WINMAGIC NCDRV_MAGIC(NCDRV_WINCONSOLE)
@ -411,8 +416,7 @@ drv_sgmode(TERMINAL_CONTROL_BLOCK * TCB, bool setFlag, TTY * buf)
else
dwFlag &= ~ENABLE_PROCESSED_INPUT;
/* we disable that for now to focus on keyboard. */
dwFlag &= ~ENABLE_MOUSE_INPUT;
dwFlag |= ENABLE_MOUSE_INPUT;
buf->c_iflag = iflag;
buf->c_lflag = lflag;
@ -682,6 +686,8 @@ drv_initmouse(TERMINAL_CONTROL_BLOCK * TCB)
AssertTCB();
SetSP();
sp->_mouse_type = M_TERM_DRIVER;
}
static int
@ -908,6 +914,62 @@ drv_twait(TERMINAL_CONTROL_BLOCK * TCB,
return code;
}
#define BUTTON_MASK (FROM_LEFT_1ST_BUTTON_PRESSED | \
FROM_LEFT_2ND_BUTTON_PRESSED | \
FROM_LEFT_3RD_BUTTON_PRESSED)
static bool
handle_mouse(SCREEN *sp, MOUSE_EVENT_RECORD mer)
{
MEVENT work;
bool result = FALSE;
sp->_drv_mouse_old_buttons = sp->_drv_mouse_new_buttons;
sp->_drv_mouse_new_buttons = mer.dwButtonState & BUTTON_MASK;
/*
* We're only interested if the button is pressed or released.
* FIXME: implement continuous event-tracking.
*/
if (sp->_drv_mouse_new_buttons != sp->_drv_mouse_old_buttons) {
memset(&work, 0, sizeof(work));
if (sp->_drv_mouse_new_buttons) {
if (sp->_drv_mouse_new_buttons & FROM_LEFT_1ST_BUTTON_PRESSED)
work.bstate |= BUTTON1_PRESSED;
if (sp->_drv_mouse_new_buttons & FROM_LEFT_2ND_BUTTON_PRESSED)
work.bstate |= BUTTON2_PRESSED;
if (sp->_drv_mouse_new_buttons & FROM_LEFT_3RD_BUTTON_PRESSED)
work.bstate |= BUTTON3_PRESSED;
if (sp->_drv_mouse_new_buttons & FROM_LEFT_4TH_BUTTON_PRESSED)
work.bstate |= BUTTON4_PRESSED;
} else {
if (sp->_drv_mouse_old_buttons & FROM_LEFT_1ST_BUTTON_PRESSED)
work.bstate |= BUTTON1_RELEASED;
if (sp->_drv_mouse_old_buttons & FROM_LEFT_2ND_BUTTON_PRESSED)
work.bstate |= BUTTON2_RELEASED;
if (sp->_drv_mouse_old_buttons & FROM_LEFT_3RD_BUTTON_PRESSED)
work.bstate |= BUTTON3_RELEASED;
if (sp->_drv_mouse_old_buttons & FROM_LEFT_4TH_BUTTON_PRESSED)
work.bstate |= BUTTON4_RELEASED;
result = TRUE;
}
work.x = mer.dwMousePosition.X;
work.y = mer.dwMousePosition.Y;
sp->_drv_mouse_fifo[sp->_drv_mouse_tail] = work;
sp->_drv_mouse_tail += 1;
}
return result;
}
static int
drv_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf)
{
@ -925,6 +987,7 @@ drv_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf)
memset(&inp, 0, sizeof(inp));
T((T_CALLED("drv_read(%p)"), TCB));
while ((b = ReadConsoleInput(TCB->inp, &inp, 1, &nRead))) {
if (b && nRead > 0) {
if (inp.EventType == KEY_EVENT) {
@ -945,14 +1008,16 @@ drv_read(TERMINAL_CONTROL_BLOCK * TCB, int *buf)
} else { /* *buf != 0 */
break;
}
} else if (0 && inp.EventType == MOUSE_EVENT) {
*buf = KEY_MOUSE;
break;
} else if (inp.EventType == MOUSE_EVENT) {
if (handle_mouse(sp, inp.Event.MouseEvent)) {
*buf = KEY_MOUSE;
break;
}
}
continue;
}
}
return n;
returnCode(n);
}
static int