From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31004 invoked by alias); 27 Jul 2012 17:56:10 -0000 Received: (qmail 30994 invoked by uid 22791); 27 Jul 2012 17:56:09 -0000 X-SWARE-Spam-Status: No, hits=-6.5 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,SPF_HELO_PASS,TW_CP,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 27 Jul 2012 17:55:50 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q6RHtlVr011010 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 27 Jul 2012 13:55:47 -0400 Received: from barimba (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q6RHtjCF029725 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Fri, 27 Jul 2012 13:55:46 -0400 From: Tom Tromey To: Yao Qi Cc: Subject: Re: [PATCH 1/6] new observer command_option_changed. References: <1343402543-665-1-git-send-email-yao@codesourcery.com> <1343402543-665-2-git-send-email-yao@codesourcery.com> Date: Fri, 27 Jul 2012 17:56:00 -0000 In-Reply-To: <1343402543-665-2-git-send-email-yao@codesourcery.com> (Yao Qi's message of "Fri, 27 Jul 2012 23:22:18 +0800") Message-ID: <87sjcday1q.fsf@fleche.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-07/txt/msg00704.txt.bz2 >>>>> "Yao" == Yao Qi writes: Yao> 1. Move notifying 'command_option_changed' observer out of Yao> do_setshow_command to its caller, execute_command, so that we can Yao> get the full command line to send MI notification for multi-word Yao> options. Yao> + if (do_set_command (arg, from_tty, c) && c->notify_observer_p) Yao> + { Yao> + /* Skip 'set ' */ Yao> + int len = arg - orig - 4; Yao> + char *option = xmalloc (len); Yao> + Yao> + memcpy (option, orig + 4, len - 1); Yao> + option[len - 1] = 0; Yao> + Yao> + observer_notify_command_option_changed (option, arg); What happens here if the user enters an abbreviation for the command? For example, "set print ele 5" works fine -- but the observer should still see "print elements" as the argument name. I think the code above will do the wrong thing. do_set_command doesn't always just use the plain value of ARG to set the parameter. So, passing that to the observer can sometimes result in the client being out of sync. For example, tilde expansion won't be seen. Likewise, I wonder about "maint" commands like "maint set profile". Perhaps these could be automatically excluded; maybe based on class_maintenance? Tom