From patchwork Fri Jul 10 13:13:44 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 7627 Received: (qmail 76146 invoked by alias); 10 Jul 2015 13:13:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 76128 invoked by uid 89); 10 Jul 2015 13:13:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 X-HELO: mail-wg0-f44.google.com Received: from mail-wg0-f44.google.com (HELO mail-wg0-f44.google.com) (74.125.82.44) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 10 Jul 2015 13:13:52 +0000 Received: by wgck11 with SMTP id k11so249324466wgc.0 for ; Fri, 10 Jul 2015 06:13:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=hFsG0rNL9YFhuOrwwPqHLN8kIamOS4pKOvawkWR4Dcs=; b=ReEeOvzDoi2htPBaqbt3WRpfyU7IuatyPZPkPgtGyKK0102y9z5/pGBjGG+U4IGDvR azmHHtS5l3fHpFm0wi5SNrXTXdnQ9wJDQ/CbBbOp0zEyEWRgYELD7FcJxPThu0pjtEi7 wKLVdCwOxZm/mPVBl+NMXNIDs5efHuuM9ZdLtvKuI9zUyfycW75OrQzqpUjxTCrv1yCW wES8db1jtz2XiM8ZliSSnSKqkgs0hQLJTwcKDg15YUIXmSIvVmx4Cn4fr245LfcjbMHA HeQ9G1GaCfQNd0215LT09M1Szz93EtA/jf35U+oiJexuJFmUH90llZsOKeXqw+R1m005 L1vA== X-Gm-Message-State: ALoCoQkPBiD1FHwsk+DPgRBDsIbQqN3tW+SfPctejoDFMLswfrJsaFS7WxtjHtm32PAb2rzmgCB9 X-Received: by 10.180.90.241 with SMTP id bz17mr5654022wib.95.1436534028956; Fri, 10 Jul 2015 06:13:48 -0700 (PDT) Received: from localhost (host81-158-4-174.range81-158.btcentralplus.com. [81.158.4.174]) by smtp.gmail.com with ESMTPSA id k2sm2928636wif.4.2015.07.10.06.13.47 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Jul 2015 06:13:48 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCH] gdb/tui: Add command completion to winheight command. Date: Fri, 10 Jul 2015 14:13:44 +0100 Message-Id: <1436534024-23458-1-git-send-email-andrew.burgess@embecosm.com> X-IsSubscribed: yes Share the window name completion code from the focus command with the winheight command, providing window name completion for the winheight command. gdb/ChangeLog: * tui/tui-win.c (window_name_completer): New function. (focus_completer): Call window_name_completer. All old content moved into window_name_completer. (winheight_completer): New function. (_initialize_tui_win): Rename variable. Add completer to winheight command. Update doc string on winheight. --- gdb/ChangeLog | 9 ++++++ gdb/tui/tui-win.c | 91 ++++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 72 insertions(+), 28 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8ab1330..8f69009 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,14 @@ 2015-07-10 Andrew Burgess + * tui/tui-win.c (window_name_completer): New function. + (focus_completer): Call window_name_completer. All old content + moved into window_name_completer. + (winheight_completer): New function. + (_initialize_tui_win): Rename variable. Add completer to + winheight command. Update doc string on winheight. + +2015-07-10 Andrew Burgess + * tui/tui-win.c (tui_set_win_height): Use a cleanup to free the string copy. (parse_scrolling_args): Likewise. diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index cdf322b..aa22205 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -354,45 +354,53 @@ tui_set_var_cmd (char *null_args, int from_tty, struct cmd_list_element *c) 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 + too by TEXT and WORD. If INCLUDE_NEXT_PREV_P is true then the special + window names 'next' and 'prev' are also included in the list of possible + completions (if appropriate). */ static VEC (char_ptr) * -focus_completer (struct cmd_list_element *ignore, - const char *text, const char *word) +window_name_completer (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++) + if (tui_active) { - const char *completion_name = NULL; + int win_type; - /* We can't focus on an invisible window. */ - if (tui_win_list[win_type] == NULL - || !tui_win_list[win_type]->generic.is_visible) - continue; + for (win_type = SRC_WIN; win_type < MAX_MAJOR_WINDOWS; win_type++) + { + const char *completion_name = NULL; - completion_name = tui_win_name (&tui_win_list [win_type]->generic); - gdb_assert (completion_name != NULL); - VEC_safe_push (const_char_ptr, completion_name_vec, completion_name); - } + /* We can't focus on an invisible window. */ + if (tui_win_list[win_type] == NULL + || !tui_win_list[win_type]->generic.is_visible) + continue; - /* If no windows are considered visible then the TUI has not yet been - initialized. But still "focus src" and "focus cmd" will work because - invoking the focus command will entail initializing the TUI which sets the - default layout to SRC_COMMAND. */ - if (VEC_length (const_char_ptr, completion_name_vec) == 0) + completion_name = tui_win_name (&tui_win_list [win_type]->generic); + gdb_assert (completion_name != NULL); + VEC_safe_push (const_char_ptr, completion_name_vec, completion_name); + } + } + else { + /* If the tui is not yet active then we should still offer up the two + initial windows 'src' and 'cmd'. All tui commands will + auto-activate the tui, which means these windows are valid for + use. */ VEC_safe_push (const_char_ptr, completion_name_vec, SRC_NAME); 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"); + } + VEC_safe_push (const_char_ptr, completion_name_vec, NULL); matches_vec = complete_on_enum (VEC_address (const_char_ptr, completion_name_vec), text, word); @@ -402,6 +410,32 @@ focus_completer (struct cmd_list_element *ignore, 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 VEC (char_ptr) * +focus_completer (struct cmd_list_element *ignore, + const char *text, const char *word) +{ + return window_name_completer (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 VEC (char_ptr) * +winheight_completer (struct cmd_list_element *ignore, + 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 NULL; + + return window_name_completer (0, text, word); +} + /* Function to initialize gdb commands, for tui window manipulation. */ @@ -413,7 +447,7 @@ _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. */ @@ -431,8 +465,8 @@ _initialize_tui_win (void) add_com ("tabset", class_tui, tui_set_tab_width_command, _("\ Set the width (in characters) of tab stops.\n\ Usage: tabset \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 [+ | -] <#lines>\n\ Window names are:\n\ src : the source window\n\ @@ -440,9 +474,10 @@ cmd : the command 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 { | next | prev}\n\ Valid Window names are:\n\ @@ -451,7 +486,7 @@ asm : the disassembly window\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"));