/* TUI window generic functions.
- Copyright (C) 1998-2015 Free Software Foundation, Inc.
+ Copyright (C) 1998-2017 Free Software Foundation, Inc.
Contributed by Hewlett-Packard Company.
static enum tui_status tui_adjust_win_heights (struct tui_win_info *,
int);
static int new_height_ok (struct tui_win_info *, int);
-static void tui_set_tab_width_command (char *, int);
-static void tui_refresh_all_command (char *, int);
-static void tui_set_win_height_command (char *, int);
-static void tui_all_windows_info (char *, int);
-static void tui_set_focus_command (char *, int);
-static void tui_scroll_forward_command (char *, int);
-static void tui_scroll_backward_command (char *, int);
-static void tui_scroll_left_command (char *, int);
-static void tui_scroll_right_command (char *, int);
-static void parse_scrolling_args (char *,
+static void tui_set_tab_width_command (const char *, int);
+static void tui_refresh_all_command (const char *, int);
+static void tui_set_win_height_command (const char *, int);
+static void tui_all_windows_info (const char *, int);
+static void tui_set_focus_command (const char *, int);
+static void tui_scroll_forward_command (const char *, int);
+static void tui_scroll_backward_command (const char *, int);
+static void tui_scroll_left_command (const char *, int);
+static void tui_scroll_right_command (const char *, int);
+static void parse_scrolling_args (const char *,
struct tui_win_info **,
int *);
}
static void
-set_tui_cmd (char *args, int from_tty)
+set_tui_cmd (const char *args, int from_tty)
{
}
static void
-show_tui_cmd (char *args, int from_tty)
+show_tui_cmd (const char *args, int from_tty)
{
}
static struct cmd_list_element *tuilist;
static void
-tui_command (char *args, int from_tty)
+tui_command (const char *args, int from_tty)
{
printf_unfiltered (_("\"tui\" must be followed by the name of a "
"tui command.\n"));
/* The set_func hook of "set tui ..." commands that affect the window
borders on the TUI display. */
void
-tui_set_var_cmd (char *null_args, int from_tty, struct cmd_list_element *c)
+tui_set_var_cmd (const char *null_args,
+ int from_tty, struct cmd_list_element *c)
{
if (tui_update_variables () && tui_active)
tui_rehighlight_all ();
}
-/* Complete possible window names to focus on. TEXT is the complete text
- entered so far, WORD is the word currently being completed. */
+/* Generic window name completion function. Complete window name pointed
+ to by TEXT and WORD. If INCLUDE_NEXT_PREV_P is true then the special
+ window names 'next' and 'prev' will also be considered as possible
+ completions of the window name. */
-static VEC (char_ptr) *
-focus_completer (struct cmd_list_element *ignore,
- const char *text, const char *word)
+static void
+window_name_completer (completion_tracker &tracker,
+ int include_next_prev_p,
+ const char *text, const char *word)
{
VEC (const_char_ptr) *completion_name_vec = NULL;
- VEC (char_ptr) *matches_vec;
int win_type;
for (win_type = SRC_WIN; win_type < MAX_MAJOR_WINDOWS; win_type++)
VEC_safe_push (const_char_ptr, completion_name_vec, CMD_NAME);
}
- VEC_safe_push (const_char_ptr, completion_name_vec, "next");
- VEC_safe_push (const_char_ptr, completion_name_vec, "prev");
- VEC_safe_push (const_char_ptr, completion_name_vec, NULL);
+ if (include_next_prev_p)
+ {
+ VEC_safe_push (const_char_ptr, completion_name_vec, "next");
+ VEC_safe_push (const_char_ptr, completion_name_vec, "prev");
+ }
- matches_vec
- = complete_on_enum (VEC_address (const_char_ptr, completion_name_vec),
- text, word);
+ VEC_safe_push (const_char_ptr, completion_name_vec, NULL);
+ complete_on_enum (tracker,
+ VEC_address (const_char_ptr, completion_name_vec),
+ text, word);
VEC_free (const_char_ptr, completion_name_vec);
+}
- return matches_vec;
+/* Complete possible window names to focus on. TEXT is the complete text
+ entered so far, WORD is the word currently being completed. */
+
+static void
+focus_completer (struct cmd_list_element *ignore,
+ completion_tracker &tracker,
+ const char *text, const char *word)
+{
+ window_name_completer (tracker, 1, text, word);
+}
+
+/* Complete possible window names for winheight command. TEXT is the
+ complete text entered so far, WORD is the word currently being
+ completed. */
+
+static void
+winheight_completer (struct cmd_list_element *ignore,
+ completion_tracker &tracker,
+ const char *text, const char *word)
+{
+ /* The first word is the window name. That we can complete. Subsequent
+ words can't be completed. */
+ if (word != text)
+ return;
+
+ window_name_completer (tracker, 0, text, word);
}
/* Function to initialize gdb commands, for tui window
manipulation. */
-/* Provide a prototype to silence -Wmissing-prototypes. */
-extern initialize_file_ftype _initialize_tui_win;
-
void
_initialize_tui_win (void)
{
static struct cmd_list_element *tui_setlist;
static struct cmd_list_element *tui_showlist;
- struct cmd_list_element *focus_cmd;
+ struct cmd_list_element *cmd;
/* Define the classes of commands.
They will appear in the help list in the reverse of this order. */
add_com ("tabset", class_tui, tui_set_tab_width_command, _("\
Set the width (in characters) of tab stops.\n\
Usage: tabset <n>\n"));
- add_com ("winheight", class_tui, tui_set_win_height_command, _("\
-Set the height of a specified window.\n\
+ cmd = add_com ("winheight", class_tui, tui_set_win_height_command, _("\
+Set or modify the height of a specified window.\n\
Usage: winheight <win_name> [+ | -] <#lines>\n\
Window names are:\n\
src : the source window\n\
asm : the disassembly window\n\
regs : the register display\n"));
add_com_alias ("wh", "winheight", class_tui, 0);
+ set_cmd_completer (cmd, winheight_completer);
add_info ("win", tui_all_windows_info,
_("List of all displayed windows.\n"));
- focus_cmd = add_com ("focus", class_tui, tui_set_focus_command, _("\
+ cmd = add_com ("focus", class_tui, tui_set_focus_command, _("\
Set focus to named window or next/prev window.\n\
Usage: focus {<win> | next | prev}\n\
Valid Window names are:\n\
regs : the register display\n\
cmd : the command window\n"));
add_com_alias ("fs", "focus", class_tui, 0);
- set_cmd_completer (focus_cmd, focus_completer);
+ set_cmd_completer (cmd, focus_completer);
add_com ("+", class_tui, tui_scroll_forward_command, _("\
Scroll window forward.\n\
Usage: + [win] [n]\n"));
&& !tui_win_list[win_type]->generic.is_visible)
{
tui_free_window (tui_win_list[win_type]);
- tui_win_list[win_type] = (struct tui_win_info *) NULL;
+ tui_win_list[win_type] = NULL;
}
}
/* Turn keypad back on, unless focus is in the command
static void
-tui_scroll_forward_command (char *arg, int from_tty)
+tui_scroll_forward_command (const char *arg, int from_tty)
{
int num_to_scroll = 1;
struct tui_win_info *win_to_scroll;
static void
-tui_scroll_backward_command (char *arg, int from_tty)
+tui_scroll_backward_command (const char *arg, int from_tty)
{
int num_to_scroll = 1;
struct tui_win_info *win_to_scroll;
static void
-tui_scroll_left_command (char *arg, int from_tty)
+tui_scroll_left_command (const char *arg, int from_tty)
{
int num_to_scroll;
struct tui_win_info *win_to_scroll;
static void
-tui_scroll_right_command (char *arg, int from_tty)
+tui_scroll_right_command (const char *arg, int from_tty)
{
int num_to_scroll;
struct tui_win_info *win_to_scroll;
/* Set focus to the window named by 'arg'. */
static void
-tui_set_focus (char *arg, int from_tty)
+tui_set_focus (const char *arg, int from_tty)
{
if (arg != (char *) NULL)
{
char *buf_ptr = (char *) xstrdup (arg);
int i;
- struct tui_win_info *win_info = (struct tui_win_info *) NULL;
+ struct tui_win_info *win_info = NULL;
for (i = 0; (i < strlen (buf_ptr)); i++)
buf_ptr[i] = tolower (arg[i]);
}
static void
-tui_set_focus_command (char *arg, int from_tty)
+tui_set_focus_command (const char *arg, int from_tty)
{
/* Make sure the curses mode is enabled. */
tui_enable ();
static void
-tui_all_windows_info (char *arg, int from_tty)
+tui_all_windows_info (const char *arg, int from_tty)
{
int type;
struct tui_win_info *win_with_focus = tui_win_with_focus ();
static void
-tui_refresh_all_command (char *arg, int from_tty)
+tui_refresh_all_command (const char *arg, int from_tty)
{
/* Make sure the curses mode is enabled. */
tui_enable ();
/* Set the tab width of the specified window. */
static void
-tui_set_tab_width_command (char *arg, int from_tty)
+tui_set_tab_width_command (const char *arg, int from_tty)
{
/* Make sure the curses mode is enabled. */
tui_enable ();
/* Set the height of the specified window. */
static void
-tui_set_win_height (char *arg, int from_tty)
+tui_set_win_height (const char *arg, int from_tty)
{
/* Make sure the curses mode is enabled. */
tui_enable ();
if (arg != (char *) NULL)
{
- char *buf = xstrdup (arg);
+ std::string copy = arg;
+ char *buf = ©[0];
char *buf_ptr = buf;
- char *wname = (char *) NULL;
+ char *wname = NULL;
int new_height, i;
struct tui_win_info *win_info;
}
else
printf_filtered (WIN_HEIGHT_USAGE);
-
- if (buf != (char *) NULL)
- xfree (buf);
}
else
printf_filtered (WIN_HEIGHT_USAGE);
/* Set the height of the specified window, with va_list. */
static void
-tui_set_win_height_command (char *arg, int from_tty)
+tui_set_win_height_command (const char *arg, int from_tty)
{
/* Make sure the curses mode is enabled. */
tui_enable ();
&((struct tui_win_element *)
win_info->generic.content[i])->which_element.data_window;
tui_delete_win (gen_win_info->handle);
- gen_win_info->handle = (WINDOW *) NULL;
+ gen_win_info->handle = NULL;
}
break;
default:
tui_display_all_data ();
break;
case CMD_WIN:
- win_info->detail.command_info.cur_line = 0;
- win_info->detail.command_info.curch = 0;
#ifdef HAVE_WRESIZE
wresize (TUI_CMD_WIN->generic.handle,
TUI_CMD_WIN->generic.height,
mvwin (TUI_CMD_WIN->generic.handle,
TUI_CMD_WIN->generic.origin.y,
TUI_CMD_WIN->generic.origin.x);
- wmove (win_info->generic.handle,
- win_info->detail.command_info.cur_line,
- win_info->detail.command_info.curch);
+ wmove (win_info->generic.handle, 0, 0);
break;
default:
break;
static void
-parse_scrolling_args (char *arg,
+parse_scrolling_args (const char *arg,
struct tui_win_info **win_to_scroll,
int *num_to_scroll)
{
window name arg. */
if (arg != (char *) NULL)
{
- char *buf, *buf_ptr;
+ char *buf_ptr;
/* Process the number of lines to scroll. */
- buf = buf_ptr = xstrdup (arg);
+ std::string copy = arg;
+ buf_ptr = ©[0];
if (isdigit (*buf_ptr))
{
char *num_str;
/* Process the window name if one is specified. */
if (buf_ptr != (char *) NULL)
{
- char *wname;
- int i;
+ const char *wname;
if (*buf_ptr == ' ')
while (*(++buf_ptr) == ' ')
if (*buf_ptr != (char) 0)
{
- wname = buf_ptr;
-
/* Validate the window name. */
- for (i = 0; i < strlen (wname); i++)
- wname[i] = tolower (wname[i]);
+ for (char *p = buf_ptr; *p != '\0'; p++)
+ *p = tolower (*p);
+
+ wname = buf_ptr;
}
else
wname = "?";
else if (*win_to_scroll == TUI_CMD_WIN)
*win_to_scroll = (tui_source_windows ())->list[0];
}
- xfree (buf);
}
}