mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
0f6a699478
Rationale: I use the mouse with my terminal to select and copy text. In gdb, I use the mouse to select a function name to set a breakpoint, or a variable name to print, for example. When gdb is compiled with ncurses mouse support, gdb's TUI mode intercepts mouse events. Left-clicking and dragging, which would normally select text, seems to do nothing. This means I cannot select text using my mouse anymore. This makes it harder to set breakpoints, print variables, etc. Solution: I tried to fix this issue by editing the 'mousemask' call to only enable buttons 4 and 5. However, this still caused my terminal (gnome-terminal) to not allow text to be selected. The only way I could make it work is by calling 'mousemask (0, NULL);'. But doing so disables the mouse code entirely, which other people might want. I therefore decided to make a setting in gdb called 'tui mouse-events'. If enabled (the default), the behavior is as it is now: terminal mouse events are given to gdb, disabling the terminal's default behavior. If disabled (opt-in), the behavior is as it was before the year 2020: terminal mouse events are not given to gdb, therefore the mouse can be used to select and copy text. Notes: I am not attached to the setting name or its description. Feel free to suggest better wording. Testing: I tested this change in gnome-terminal by performing the following steps manually: 1. Run: gdb --args ./myprogram 2. Enable TUI: press ctrl-x ctrl-a 3. Click and drag text with the mouse. Observe no selection. 4. Input: set tui mouse-events off 5. Click and drag text with the mouse. Observe that selection works now. 6. Input: set tui mouse-events on. 7. Click and drag text with the mouse. Observe no selection.
65 lines
2.0 KiB
C
65 lines
2.0 KiB
C
/* TUI window generic functions.
|
|
|
|
Copyright (C) 1998-2023 Free Software Foundation, Inc.
|
|
|
|
Contributed by Hewlett-Packard Company.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef TUI_TUI_WIN_H
|
|
#define TUI_TUI_WIN_H
|
|
|
|
#include "tui/tui-data.h"
|
|
|
|
extern void tui_set_win_focus_to (struct tui_win_info *);
|
|
extern void tui_resize_all (void);
|
|
extern void tui_refresh_all_win (void);
|
|
extern void tui_rehighlight_all (void);
|
|
|
|
extern chtype tui_border_ulcorner;
|
|
extern chtype tui_border_urcorner;
|
|
extern chtype tui_border_lrcorner;
|
|
extern chtype tui_border_llcorner;
|
|
extern chtype tui_border_vline;
|
|
extern chtype tui_border_hline;
|
|
extern int tui_border_attrs;
|
|
extern int tui_active_border_attrs;
|
|
|
|
extern bool tui_update_variables ();
|
|
|
|
extern void tui_initialize_win (void);
|
|
|
|
/* Update gdb's knowledge of the terminal size. */
|
|
extern void tui_update_gdb_sizes (void);
|
|
|
|
/* Create or get the TUI command list. */
|
|
struct cmd_list_element **tui_get_cmd_list (void);
|
|
|
|
/* Whether compact source display should be used. */
|
|
extern bool compact_source;
|
|
|
|
/* Whether the TUI should intercept terminal mouse events. */
|
|
extern bool tui_enable_mouse;
|
|
|
|
/* Whether to style the source and assembly code highlighted by the TUI's
|
|
current position indicator. */
|
|
extern bool style_tui_current_position;
|
|
|
|
/* Whether to replace the spaces in the left margin with '_' and '0'. */
|
|
extern bool tui_left_margin_verbose;
|
|
|
|
#endif /* TUI_TUI_WIN_H */
|