Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
curs_mouse(3X)			 Library calls			curs_mouse(3X)

NAME
       has_mouse,  getmouse,  ungetmouse,  mousemask,  wenclose,  mouse_trafo,
       wmouse_trafo, mouseinterval - get mouse events in curses

SYNOPSIS
       #include	<curses.h>

       typedef unsigned	long mmask_t;

       typedef struct {
	   short id;	     /*	ID to distinguish multiple devices */
	   int x, y, z;	     /*	event coordinates */
	   mmask_t bstate;   /*	button state bits */
       } MEVENT;

       bool has_mouse(void);

       mmask_t mousemask(mmask_t newmask, mmask_t *oldmask);

       int getmouse(MEVENT *event);
       int ungetmouse(MEVENT *event);

       bool wenclose(const WINDOW *win,	int y, int x);

       bool mouse_trafo(int* pY, int* pX, bool to_screen);
       bool wmouse_trafo(const WINDOW* win,
			 int* pY, int* pX, bool	to_screen);

       int mouseinterval(int erval);

DESCRIPTION
       These functions provide an interface to mouse events from  ncurses(3X).
       Mouse  events  are  represented	by  KEY_MOUSE pseudo-key values	in the
       wgetch(3X) input	stream.

   has_mouse
       The has_mouse function returns TRUE if the mouse	driver has  been  suc-
       cessfully initialized, and FALSE	otherwise.

       Mouse events are	ignored	when input is in cooked	mode, and cause	an er-
       ror  beep when cooked mode is being simulated in	a window by a function
       such as getstr that expects a linefeed for input-loop termination.

   mousemask
       To make mouse events visible, use the mousemask	function.   This  sets
       the  mouse  events to be	reported.  By default, no mouse	events are re-
       ported.

          The function	returns	an updated copy	of newmask to  indicate	 which
	   of the specified mouse events can be	reported.

	   If the screen has not been initialized, or if the terminal does not
	   support mouse-events, this function returns 0.

          If  oldmask is non-NULL, this function fills	the indicated location
	   with	the previous value of the current screen's mouse event mask.

       As a side effect, setting a zero	mouse mask  may	 turn  off  the	 mouse
       pointer;	 setting  a nonzero mask may turn it on.  Whether this happens
       is device-dependent.

   Mouse Events
       Here are	the mouse event	type masks which may be	defined:

       Name			Description
       ------------------------------------------------------------------------
       BUTTON1_PRESSED		mouse button 1 down
       BUTTON1_RELEASED		mouse button 1 up
       BUTTON1_CLICKED		mouse button 1 clicked
       BUTTON1_DOUBLE_CLICKED	mouse button 1 double clicked
       BUTTON1_TRIPLE_CLICKED	mouse button 1 triple clicked
       ------------------------------------------------------------------------
       BUTTON2_PRESSED		mouse button 2 down
       BUTTON2_RELEASED		mouse button 2 up
       BUTTON2_CLICKED		mouse button 2 clicked
       BUTTON2_DOUBLE_CLICKED	mouse button 2 double clicked
       BUTTON2_TRIPLE_CLICKED	mouse button 2 triple clicked
       ------------------------------------------------------------------------
       BUTTON3_PRESSED		mouse button 3 down
       BUTTON3_RELEASED		mouse button 3 up
       BUTTON3_CLICKED		mouse button 3 clicked
       BUTTON3_DOUBLE_CLICKED	mouse button 3 double clicked
       BUTTON3_TRIPLE_CLICKED	mouse button 3 triple clicked
       ------------------------------------------------------------------------
       BUTTON4_PRESSED		mouse button 4 down
       BUTTON4_RELEASED		mouse button 4 up
       BUTTON4_CLICKED		mouse button 4 clicked
       BUTTON4_DOUBLE_CLICKED	mouse button 4 double clicked
       BUTTON4_TRIPLE_CLICKED	mouse button 4 triple clicked
       ------------------------------------------------------------------------
       BUTTON5_PRESSED		mouse button 5 down
       BUTTON5_RELEASED		mouse button 5 up
       BUTTON5_CLICKED		mouse button 5 clicked
       BUTTON5_DOUBLE_CLICKED	mouse button 5 double clicked
       BUTTON5_TRIPLE_CLICKED	mouse button 5 triple clicked
       ------------------------------------------------------------------------
       BUTTON_SHIFT		shift was down during button state change
       BUTTON_CTRL		control	was down during	button state change
       BUTTON_ALT		alt was	down during button state change
       ALL_MOUSE_EVENTS		report all button state	changes
       REPORT_MOUSE_POSITION	report mouse movement
       ------------------------------------------------------------------------

   getmouse
       Once a class of mouse events has	been made visible in a window, calling
       the wgetch function on that window may return KEY_MOUSE as an indicator
       that a mouse event has been queued.  To read the	event data and pop the
       event off the queue, call getmouse.  This function will return OK if  a
       mouse  event  is	 actually  visible in the given	window,	ERR otherwise.
       When getmouse returns OK, the data deposited as y and x	in  the	 event
       structure  coordinates  will  be	screen-relative	character-cell coordi-
       nates.  The returned state mask will have exactly one bit set to	 indi-
       cate the	event type.  The corresponding data in the queue is marked in-
       valid.  A subsequent call to getmouse will retrieve the next older item
       from the	queue.

   ungetmouse
       The  ungetmouse	function  behaves analogously to ungetch.  It pushes a
       KEY_MOUSE event onto the	input queue, and associates  with  that	 event
       the given state data and	screen-relative	character-cell coordinates.

   wenclose
       The  wenclose  function	tests  whether a given pair of screen-relative
       character-cell coordinates is enclosed by  a  given  window,  returning
       TRUE  if	 it is and FALSE otherwise.  It	is useful for determining what
       subset of the screen windows enclose the	location of a mouse event.

       If the parameter	is a pad, wenclose uses	the most recent	screen coordi-
       nates used for this pad in prefresh(3X) or pnoutrefresh(3X).

   wmouse_trafo
       The wmouse_trafo	function transforms a given pair of  coordinates  from
       stdscr-relative coordinates to coordinates relative to the given	window
       or  vice	 versa.	 The resulting stdscr-relative coordinates are not al-
       ways identical to screen	coordinates due	to the	mechanism  to  reserve
       lines  on  top  or  bottom  of  the  screen for other purposes (see the
       ripoffline(3X) and slk_init(3X) calls, for example).

          If the parameter to_screen is TRUE, the pointers pY,	pX must	refer-
	   ence	the coordinates	of a location inside the window	win.  They are
	   converted to	stdscr-relative	coordinates and	returned  through  the
	   pointers.   If  the conversion was successful, the function returns
	   TRUE.

	   If one of the parameters was	NULL or	the location is	not inside the
	   window, FALSE is returned.

          If  to_screen  is  FALSE,  the  pointers  pY,  pX  must   reference
	   stdscr-relative coordinates.	 They are converted to window-relative
	   coordinates	if  the	 window	win encloses this point.  In this case
	   the function	returns	TRUE.

	   If one of the parameters is NULL or the point  is  not  inside  the
	   window, FALSE is returned.

       The  referenced	coordinates are	only replaced by the converted coordi-
       nates if	the transformation was successful.

   mouse_trafo
       The mouse_trafo function	performs the same translation as wmouse_trafo,
       using stdscr for	win.

   mouseinterval
       The mouseinterval function sets the maximum time	 (in  thousands	 of  a
       second) that can	elapse between press and release events	for them to be
       resolved	 as  a click.  An application might interpret button press and
       release events separated	by more	than the mouse	interval  as  a	 "long
       press", or, with	motion,	as a "drag".

       Calling	mouseinterval(0)  disables click resolution.  When ncurses de-
       tects a mouse event, it awaits further input activity up	to this	inter-
       val, and	then checks for	a subsequent mouse event which can be combined
       with the	first event.  If the timeout expires  without  input  activity
       (which  would  happen  with  a zero interval), then no click resolution
       will occur.

       This   function	 returns   the	 previous   interval	value.	   Use
       mouseinterval(-1) to obtain the interval	without	altering it.

       The mouse interval is set to one	sixth of a second when the correspond-
       ing screen is initialized, e.g.,	in initscr(3X) or setupterm(3X).

RETURN VALUE
       has_mouse, wenclose, mouse_trafo, and wmouse_trafo return TRUE or FALSE
       as noted	above.

       getmouse	and ungetmouse return ERR upon failure and OK upon success.

       getmouse	fails if:

          no mouse driver was initialized,

          the mask of reportable events is zero,

          a mouse event was detected that does	not match the mask,

          or if no more events	remain in the queue.

       ungetmouse returns an error if the event	queue is full.

       mousemask returns the mask of reportable	events.

       mouseinterval  returns the previous interval value, unless the terminal
       was not initialized.  In	that case, it  returns	the  maximum  interval
       value (166).

NOTES
       The  order  of  the  MEVENT structure members is	not guaranteed.	 Addi-
       tional fields may be added to the structure in the future.

       Under ncurses, these calls are implemented using	either xterm's	built-
       in mouse-tracking API or	platform-specific drivers including

	     Alessandro Rubini's gpm server

	     FreeBSD sysmouse

	     OS/2 EMX

       If you are using	an unsupported configuration, mouse events will	not be
       visible to ncurses (and the mousemask function will always return 0).

       If  the	terminfo entry contains	a XM string, this is used in the xterm
       mouse driver to control the way the terminal is initialized  for	 mouse
       operation.   The	 default,  if  XM is not found,	corresponds to private
       mode 1000 of xterm:

	  \E[?1000%?%p1%{1}%=%th%el%;

       The mouse driver	also recognizes	a newer	xterm private mode 1006, e.g.,

	  \E[?1006;1000%?%p1%{1}%=%th%el%;

       The z member in the event structure is not presently used.  It  is  in-
       tended  for use with touch screens (which may be	pressure-sensitive) or
       with 3D-mice/trackballs/power gloves.

       The ALL_MOUSE_EVENTS  class  does  not  include	REPORT_MOUSE_POSITION.
       They  are  distinct.   For example, in xterm, wheel/scrolling mice send
       position	reports	as a sequence of presses of buttons  4	or  5  without
       matching	button-releases.

EXTENSIONS
       These  functions	 were  designed	 for ncurses(3X), and are not found in
       SVr4 curses, 4.4BSD curses, or any other	 previous  curses  implementa-
       tion.   (SVr4  curses did have a	getmouse function, which took no argu-
       ment and	returned a different type.)

PORTABILITY
       Applications employing the ncurses mouse	extension should condition its
       use on the visibility of	the NCURSES_MOUSE_VERSION preprocessor	macro.
       When  the  interface  changes,  the macro's value increments.  Multiple
       versions	are available when ncurses is configured; see section  "ALTER-
       NATE CONFIGURATIONS" of ncurses(3X).  The following values may be spec-
       ified.

	  1  has definitions for reserved events.  The mask uses 28 bits.

	  2  adds  definitions	for  button 5, removes the definitions for re-
	     served events.  The mask uses 29 bits.

       SVr4 curses had support for the mouse in	a variant of xterm(1).	It  is
       mentioned in a few places, with little supporting documentation.

          Its "libcurses" manual page lists functions for this	feature	proto-
	   typed in curses.h.

	       extern int mouse_set(long int);
	       extern int mouse_on(long	int);
	       extern int mouse_off(long int);
	       extern int request_mouse_pos(void);
	       extern int map_button(unsigned long);
	       extern void wmouse_position(WINDOW *, int *, int	*);
	       extern unsigned long getmouse(void), getbmap(void);

          Its "terminfo" manual page lists capabilities for the feature.
	       buttons	       btns    BT   Number of buttons on the mouse
	       get_mouse       getm    Gm   Curses should get button events
	       key_mouse       kmous   Km   0631, Mouse	event has occurred
	       mouse_info      minfo   Mi   Mouse status information
	       req_mouse_pos   reqmp   RQ   Request mouse position report

          The	interface  made	assumptions (as	does ncurses) about the	escape
	   sequences sent to and received from the terminal.

	   For instance, the SVr4 curses library used the get_mouse capability
	   to tell the terminal	which mouse  button  events  it	 should	 send,
	   passing  the	mouse-button bit mask to the terminal.	Also, it could
	   ask the terminal where the mouse was	using the req_mouse_pos	 capa-
	   bility.

	   Those  features  required a terminal	program	that had been modified
	   to work with	SVr4 curses.  They were	not part of the	X Consortium's
	   xterm.

       When developing the xterm mouse support for ncurses in September	 1995,
       Eric  Raymond  was  uninterested	in using the same interface due	to its
       lack of documentation.  Later, in 1998, Mark Hesseling provided support
       in PDCurses 2.3 using the SVr4 interface.  PDCurses, however, does  not
       use  video  terminals, making it	unnecessary to be concerned about com-
       patibility with the escape sequences.

BUGS
       Mouse events from xterm are not ignored in cooked  mode	if  they  have
       been  enabled  by  mousemask.  Instead, the xterm mouse report sequence
       appears in the string read.

       Mouse event reports from	xterm are not detected correctly in  a	window
       with  keypad application	mode disabled, since they are interpreted as a
       variety of function key.	 Set the terminal's terminfo capability	 kmous
       to  "\E[M" (the beginning of the	response from xterm for	mouse clicks).
       Other values of kmous are permitted under the same assumption, that is,
       the report begins with that sequence.

       Because there are no standard response sequences	that serve to identify
       terminals supporting the	xterm mouse protocol, ncurses assumes that  if
       kmous is	defined	in the terminal	description, or	if the terminal	type's
       primary	name  or aliases contain the string "xterm", then the terminal
       may send	mouse events.  The kmous capability is checked first, allowing
       use of newer xterm mouse	protocols, such	as its private mode 1006.

SEE ALSO
       curses(3X),     curs_inopts(3X),	    curs_kernel(3X),	 curs_pad(3X),
       curs_slk(3X), curs_variables(3X)

ncurses	6.5			  2024-04-20			curs_mouse(3X)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | NOTES | EXTENSIONS | PORTABILITY | BUGS | SEE ALSO

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=curs_mouse&sektion=3&manpath=FreeBSD+14.2-RELEASE+and+Ports>

home | help