Путеводитель по Руководству Linux

  User  |  Syst  |  Libr  |  Device  |  Files  |  Other  |  Admin  |  Head  |



   wenclose.3x    ( 3 )

интерфейс курсора мыши с помощью библиотеки Curses (mouse interface through curses)

  Name  |  Synopsis  |  Description  |  Return value  |    Portability    |  Bugs  |  See also  |

Портативность (Portability)

These calls were designed for ncurses(3X), and are not found in SVr4 curses, 4.4BSD curses, or any other previous version of curses.

SVr4 curses had support for the mouse in a variant of xterm. It is mentioned in a few places, but with no supporting documentation:

• the 'libcurses' manual page lists functions for this feature which are prototyped 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);

• the '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 capability.

Those features required a terminal which had been modified to work with 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 compatibility with the escape sequences.

The feature macro NCURSES_MOUSE_VERSION is provided so the preprocessor can be used to test whether these features are present. If the interface is changed, the value of NCURSES_MOUSE_VERSION will be incremented. These values for NCURSES_MOUSE_VERSION may be specified when configuring ncurses:

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

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

The order of the MEVENT structure members is not guaranteed. Additional fields may be added to the structure in the future.

Under ncurses(3X), 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(3X) (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 intended 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.