From unknown Mon Jun 23 04:14:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9761: proposed list-buffers change -- revert buffer if point is in *Buffer List* buffer Resent-From: Zachary Kanfer Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Oct 2011 04:24:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 9761 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 9761@debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.131865263322754 (code B ref -1); Sat, 15 Oct 2011 04:24:02 +0000 Received: (at submit) by debbugs.gnu.org; 15 Oct 2011 04:23:53 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1REvmr-0005ux-0A for submit@debbugs.gnu.org; Sat, 15 Oct 2011 00:23:53 -0400 Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1REvmo-0005ul-I4 for submit@debbugs.gnu.org; Sat, 15 Oct 2011 00:23:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1REvm6-0000v8-S9 for submit@debbugs.gnu.org; Sat, 15 Oct 2011 00:23:07 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,RCVD_IN_DNSWL_LOW,T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=unavailable version=3.3.1 Received: from lists.gnu.org ([140.186.70.17]:55987) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REvm6-0000v4-Qg for submit@debbugs.gnu.org; Sat, 15 Oct 2011 00:23:06 -0400 Received: from eggs.gnu.org ([140.186.70.92]:51953) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REvm5-0006rI-Pe for bug-gnu-emacs@gnu.org; Sat, 15 Oct 2011 00:23:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1REvm4-0000us-LS for bug-gnu-emacs@gnu.org; Sat, 15 Oct 2011 00:23:05 -0400 Received: from mail-gx0-f169.google.com ([209.85.161.169]:36634) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1REvm4-0000um-ID for bug-gnu-emacs@gnu.org; Sat, 15 Oct 2011 00:23:04 -0400 Received: by ggdk5 with SMTP id k5so2006314ggd.0 for ; Fri, 14 Oct 2011 21:23:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; bh=NwQfOSk+yAdFbZuVMEyRBhSw2zyQczlFmASQ4Yuizs0=; b=oOBTTQNOKondNtsJUs97P+6PRJ5KI4wUYHkq0fRsb2VAO3n7tnqorOQiVmbiBkkCnI KLjmHDjLBjNqN/fghzw6Rwttgrp9ilIMOTHTHZ/9xgiwxpMJmut7VsGggQ6ZGkO7ItgM yLeXzGV1IdaK2e4p7+hmmeZ8v7b0ilqA+5ghE= Received: by 10.68.26.168 with SMTP id m8mr21355005pbg.29.1318652583070; Fri, 14 Oct 2011 21:23:03 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.212.16 with HTTP; Fri, 14 Oct 2011 21:22:43 -0700 (PDT) From: Zachary Kanfer Date: Sat, 15 Oct 2011 00:22:43 -0400 Message-ID: Content-Type: multipart/alternative; boundary=bcaec5215725cbcc7d04af4eba8a X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.17 X-Spam-Score: -4.9 (----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -5.0 (-----) --bcaec5215725cbcc7d04af4eba8a Content-Type: text/plain; charset=ISO-8859-1 The command list-buffers always puts point at the end of the buffer. This patch changes the list-buffers command to simply revert the buffer if point is inside the *Buffer List* buffer. Since point is kept at the same line, the user can more easily see what changes have occurred. -Zachary Kanfer === modified file 'lisp/buff-menu.el' *** lisp/buff-menu.el 2011-09-18 20:43:20 +0000 --- lisp/buff-menu.el 2011-10-15 03:59:12 +0000 *************** Non-null optional arg FILES-ONLY means m *** 652,658 **** For more information, see the function `buffer-menu'." (interactive "P") ! (display-buffer (list-buffers-noselect files-only))) (defconst Buffer-menu-short-ellipsis ;; This file is preloaded, so we can't use char-displayable-p here --- 652,661 ---- For more information, see the function `buffer-menu'." (interactive "P") ! (if (string= (buffer-name) ! "*Buffer List*") ! (revert-buffer) ! (display-buffer (list-buffers-noselect files-only)))) (defconst Buffer-menu-short-ellipsis ;; This file is preloaded, so we can't use char-displayable-p here --bcaec5215725cbcc7d04af4eba8a Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable The command list-buffers always puts point at the end of the buffer. This p= atch changes the list-buffers command to simply revert the buffer if point = is inside the *Buffer List* buffer. Since point is kept at the same line, t= he user can more easily see what changes have occurred.
=A0-Zachary Kanfer


=3D=3D=3D modified file 'lisp/buff-menu.e= l'
*** lisp/buff-menu.el=A0=A0=A0 2011-09-18 20:43:20 +0000
--- l= isp/buff-menu.el=A0=A0=A0 2011-10-15 03:59:12 +0000
*************** Non-= null optional arg FILES-ONLY means m
*** 652,658 ****
=A0
=A0 For more information, see the function `buf= fer-menu'."
=A0=A0=A0 (interactive "P")
!=A0=A0 (d= isplay-buffer (list-buffers-noselect files-only)))
=A0
=A0 (defconst= Buffer-menu-short-ellipsis
=A0=A0=A0 ;; This file is preloaded, so we can't use char-displayable-p= here
--- 652,661 ----
=A0
=A0 For more information, see the func= tion `buffer-menu'."
=A0=A0=A0 (interactive "P")
!= =A0=A0 (if (string=3D (buffer-name)
!=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 "*Buffer List*")!=A0=A0=A0=A0=A0=A0 (revert-buffer)
!=A0=A0=A0=A0 (display-buffer (lis= t-buffers-noselect files-only))))
=A0
=A0 (defconst Buffer-menu-shor= t-ellipsis
=A0=A0=A0 ;; This file is preloaded, so we can't use char= -displayable-p here

--bcaec5215725cbcc7d04af4eba8a-- From unknown Mon Jun 23 04:14:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9761: proposed list-buffers change -- revert buffer if point is in *Buffer List* buffer Resent-From: martin rudalics Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Oct 2011 10:29:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9761 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Zachary Kanfer Cc: 9761@debbugs.gnu.org Received: via spool by 9761-submit@debbugs.gnu.org id=B9761.131867450729149 (code B ref 9761); Sat, 15 Oct 2011 10:29:01 +0000 Received: (at 9761) by debbugs.gnu.org; 15 Oct 2011 10:28:27 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RF1Td-0007a5-Ux for submit@debbugs.gnu.org; Sat, 15 Oct 2011 06:28:26 -0400 Received: from mailout-de.gmx.net ([213.165.64.23]) by debbugs.gnu.org with smtp (Exim 4.69) (envelope-from ) id 1RF1Tc-0007Zt-Eu for 9761@debbugs.gnu.org; Sat, 15 Oct 2011 06:28:25 -0400 Received: (qmail invoked by alias); 15 Oct 2011 10:27:39 -0000 Received: from 62-47-48-24.adsl.highway.telekom.at (EHLO [62.47.48.24]) [62.47.48.24] by mail.gmx.net (mp013) with SMTP; 15 Oct 2011 12:27:39 +0200 X-Authenticated: #14592706 X-Provags-ID: V01U2FsdGVkX183qY4n9u43SegR9D2UQqPrSnUPlmVZI17PGIInpD QEp3BugbOSyKE1 Message-ID: <4E99601A.6010801@gmx.at> Date: Sat, 15 Oct 2011 12:27:38 +0200 From: martin rudalics User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) MIME-Version: 1.0 References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Y-GMX-Trusted: 0 X-Spam-Score: -2.5 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.5 (--) > ! (if (string= (buffer-name) > ! "*Buffer List*") > ! (revert-buffer) This doesn't strike me as TRT when "*Buffer List*" is currently not visible in any window. So you probably want something like (if (and (string= (buffer-name) "*Buffer List*") (get-buffer-window (buffer-name) 0)) (revert-buffer) (display-buffer (list-buffers-noselect files-only))) here (but I don't use `list-buffers'). > ! (display-buffer (list-buffers-noselect files-only)))) martin From unknown Mon Jun 23 04:14:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9761: proposed list-buffers change -- revert buffer if point is in *Buffer List* buffer Resent-From: Chong Yidong Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Oct 2011 17:16:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9761 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Zachary Kanfer Cc: 9761@debbugs.gnu.org Received: via spool by 9761-submit@debbugs.gnu.org id=B9761.13186989413649 (code B ref 9761); Sat, 15 Oct 2011 17:16:01 +0000 Received: (at 9761) by debbugs.gnu.org; 15 Oct 2011 17:15:41 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RF7pk-0000wn-FS for submit@debbugs.gnu.org; Sat, 15 Oct 2011 13:15:40 -0400 Received: from vm-emlprdomr-03.its.yale.edu ([130.132.50.144]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RF7pi-0000wb-CX for 9761@debbugs.gnu.org; Sat, 15 Oct 2011 13:15:38 -0400 Received: from furball ([38.121.228.2]) (authenticated bits=0) by vm-emlprdomr-03.its.yale.edu (8.14.4/8.14.4) with ESMTP id p9FHEpJJ031093 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT); Sat, 15 Oct 2011 13:14:51 -0400 From: Chong Yidong References: Date: Sat, 15 Oct 2011 13:14:49 -0400 In-Reply-To: (Zachary Kanfer's message of "Sat, 15 Oct 2011 00:22:43 -0400") Message-ID: <87r52e89di.fsf@stupidchicken.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.90 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Scanned-By: MIMEDefang 2.71 on 130.132.50.144 X-Spam-Score: -2.6 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.6 (--) Zachary Kanfer writes: > The command list-buffers always puts point at the end of the > buffer. This patch changes the list-buffers command to simply revert > the buffer if point is inside the *Buffer List* buffer. Since point is > kept at the same line, the user can more easily see what changes have > occurred. This doesn't seem like a good idea. It is better for `list-buffers' to behave as unsurprisingly as possible, i.e. regardless of whether it's called from a buffer list. After all, the user can always call revert-buffer if that's what's desired. From unknown Mon Jun 23 04:14:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9761: proposed list-buffers change -- revert buffer if point is in *Buffer List* buffer Resent-From: Zachary Kanfer Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Oct 2011 18:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9761 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Chong Yidong Cc: 9761@debbugs.gnu.org Received: via spool by 9761-submit@debbugs.gnu.org id=B9761.13187017247674 (code B ref 9761); Sat, 15 Oct 2011 18:03:01 +0000 Received: (at 9761) by debbugs.gnu.org; 15 Oct 2011 18:02:04 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RF8Ye-0001zi-Aw for submit@debbugs.gnu.org; Sat, 15 Oct 2011 14:02:04 -0400 Received: from mail-yw0-f44.google.com ([209.85.213.44]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RF8Yb-0001zC-Vc for 9761@debbugs.gnu.org; Sat, 15 Oct 2011 14:02:03 -0400 Received: by ywb26 with SMTP id 26so506196ywb.3 for <9761@debbugs.gnu.org>; Sat, 15 Oct 2011 11:01:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=y3k6/f8m2m+TI0+U/p/eLGsoI2CGUiTGiZDqI6aKmnk=; b=u+G5NlXGA5t+0GXpJwytiqENbbj4q7lYqGO62to9C+tlDillcqFoMRtZJOucYhU4vg tzb1mirWT1JcuA7wCkBwWKAxnvErPQj0zZm1P/HpE5qp6jtdKVK1h1Vvn5WJUaPoF++m 40rBfgdIMwTbJB22CBC72U5P4wY4WfBdrah4k= Received: by 10.68.16.196 with SMTP id i4mr25219466pbd.97.1318701675166; Sat, 15 Oct 2011 11:01:15 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.212.16 with HTTP; Sat, 15 Oct 2011 11:00:55 -0700 (PDT) In-Reply-To: <87r52e89di.fsf@stupidchicken.com> References: <87r52e89di.fsf@stupidchicken.com> From: Zachary Kanfer Date: Sat, 15 Oct 2011 14:00:55 -0400 Message-ID: Content-Type: multipart/alternative; boundary=bcaec51dd7d5e9bde204af5a28a4 X-Spam-Score: -4.0 (----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.9 (---) --bcaec51dd7d5e9bde204af5a28a4 Content-Type: text/plain; charset=ISO-8859-1 I agree -- less surprising is better. To me, that means *not* moving point when it's called again. It makes it easier for the user to answer the question "what's changed?", which, at least for me, is a common question when I already have a buffer list window open. Would you be in favor of this change if I can use Martin's suggestion so that the behavior is the same no matter if point is in the Buffer List buffer or not? You are right, though -- the user can call revert-buffer (which is bound to 'g' in Buffer Menu mode) if desired. But for calling `list-buffers', I think that for the vast majority of cases, keeping point where it is is either superior to putting it at the bottom, or just as good. I can't think of too many cases where moving point to the bottom of the buffer is better. -Zachary On Sat, Oct 15, 2011 at 1:14 PM, Chong Yidong wrote: > Zachary Kanfer writes: > > > The command list-buffers always puts point at the end of the > > buffer. This patch changes the list-buffers command to simply revert > > the buffer if point is inside the *Buffer List* buffer. Since point is > > kept at the same line, the user can more easily see what changes have > > occurred. > > This doesn't seem like a good idea. It is better for `list-buffers' to > behave as unsurprisingly as possible, i.e. regardless of whether it's > called from a buffer list. > > After all, the user can always call revert-buffer if that's what's > desired. > > --bcaec51dd7d5e9bde204af5a28a4 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I agree -- less surprising is better. To me, that means *not* moving point = when it's called again. It makes it easier for the user to answer the q= uestion "what's changed?", which, at least for me, is a commo= n question when I already have a buffer list window open. Would you be in f= avor of this change if I can use Martin's suggestion so that the behavi= or is the same no matter if point is in the Buffer List buffer or not?

You are right, though -- the user can call revert-buffer (which is boun= d to 'g' in Buffer Menu mode) if desired. But for calling `list-buf= fers', I think that for the vast majority of cases, keeping point where= it is is either superior to putting it at the bottom, or just as good. I c= an't think of too many cases where moving point to the bottom of the bu= ffer is better.

-Zachary


--bcaec51dd7d5e9bde204af5a28a4-- From unknown Mon Jun 23 04:14:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9761: proposed list-buffers change -- revert buffer if point is in *Buffer List* buffer Resent-From: Stefan Monnier Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 16 Oct 2011 15:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9761 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Zachary Kanfer Cc: 9761@debbugs.gnu.org Received: via spool by 9761-submit@debbugs.gnu.org id=B9761.131878027730438 (code B ref 9761); Sun, 16 Oct 2011 15:52:02 +0000 Received: (at 9761) by debbugs.gnu.org; 16 Oct 2011 15:51:17 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RFSzd-0007ut-CF for submit@debbugs.gnu.org; Sun, 16 Oct 2011 11:51:17 -0400 Received: from fencepost.gnu.org ([140.186.70.10]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RFSzb-0007un-Un for 9761@debbugs.gnu.org; Sun, 16 Oct 2011 11:51:16 -0400 Received: from dsl-67-204-8-47.acanac.net ([67.204.8.47]:61536 helo=ceviche.home) by fencepost.gnu.org with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1RFSyr-0003sJ-BE; Sun, 16 Oct 2011 11:50:29 -0400 Received: by ceviche.home (Postfix, from userid 20848) id 29028660B6; Sun, 16 Oct 2011 11:50:28 -0400 (EDT) From: Stefan Monnier Message-ID: References: Date: Sun, 16 Oct 2011 11:50:28 -0400 In-Reply-To: (Zachary Kanfer's message of "Sat, 15 Oct 2011 00:22:43 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.90 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -6.0 (------) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -6.0 (------) > ! (display-buffer (list-buffers-noselect files-only))) [...] > ! (if (string= (buffer-name) > ! "*Buffer List*") > ! (revert-buffer) > ! (display-buffer (list-buffers-noselect files-only)))) I don't think calling revert-buffer is right. Much better would be for list-buffer-noselect to try to preserve point when reusing a buffer rather than creating a new one. Stefan From unknown Mon Jun 23 04:14:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9761: proposed list-buffers change -- revert buffer if point is in *Buffer List* buffer Resent-From: Zachary Kanfer Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 10 Dec 2011 06:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9761 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: 9761@debbugs.gnu.org Received: via spool by 9761-submit@debbugs.gnu.org id=B9761.132349980728850 (code B ref 9761); Sat, 10 Dec 2011 06:51:01 +0000 Received: (at 9761) by debbugs.gnu.org; 10 Dec 2011 06:50:07 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RZGl2-0007VC-HI for submit@debbugs.gnu.org; Sat, 10 Dec 2011 01:50:06 -0500 Received: from mail-pz0-f44.google.com ([209.85.210.44]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RZGky-0007Uh-BN for 9761@debbugs.gnu.org; Sat, 10 Dec 2011 01:50:01 -0500 Received: by dajz8 with SMTP id z8so3553061daj.3 for <9761@debbugs.gnu.org>; Fri, 09 Dec 2011 22:49:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=oQYMTVK0L2rdSyWOntjTbu9891Efk9gjumzoP8dqHkY=; b=MGQl9pxgnvP/ua777YYNVVM2DaUyp7NI80evdHcTFpnHpIEngrY0ceDO/JRc7ynjZU i4qkfyf8UAvXmbVaWsDXIe0ylXSawHRvnFEiazIyftqIg6ciFirfRZBWq3NuAl0cCe57 8kYFbF8R7obbjzKagHbNF5NQ5Qs+OKoT7kV6U= Received: by 10.68.191.8 with SMTP id gu8mr12937224pbc.36.1323499740349; Fri, 09 Dec 2011 22:49:00 -0800 (PST) MIME-Version: 1.0 Received: by 10.142.223.12 with HTTP; Fri, 9 Dec 2011 22:48:39 -0800 (PST) In-Reply-To: References: From: Zachary Kanfer Date: Sat, 10 Dec 2011 01:48:39 -0500 Message-ID: Content-Type: multipart/alternative; boundary=e89a8ff1c094e245e904b3b74bf1 X-Spam-Score: -3.0 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.9 (--) --e89a8ff1c094e245e904b3b74bf1 Content-Type: text/plain; charset=ISO-8859-1 I have included two diffs in this email. The first is the diff without whitespace, generated by bzr diff lisp/buff-menu.el --no-aliases --diff-options="-cp -w" . The second is the full diff, as generated by bzr diff lisp/buff-menu.el --no-aliases --diff-options=-cp . I introduced a `let` statement which wraps a large majority of the function, so a large part of the full diff is merely whitespace changes. The no-whitespace diff shows more clearly the code changes I've made. I could have used setq to avoid introducing a new level of nesting, but didn't want to leak new variables outside the function. I will change it, if advised that it's better practice. The majority of my changes happen near the end of the method. I get the *Buffer List* window, and the current window. If the *Buffer List* window exists, I select it. I then move point to the correct position, and restore the selected window if necessary. Diff #1 (diff ignoring whitespace): === modified file 'lisp/buff-menu.el' *** lisp/buff-menu.el 2011-09-18 20:43:20 +0000 --- lisp/buff-menu.el 2011-12-09 06:18:25 +0000 *************** For more information, see the function ` *** 807,812 **** --- 807,815 ---- (setq header (concat (propertize " " 'display '(space :align-to 0)) header))) (with-current-buffer (get-buffer-create "*Buffer List*") + (let ((line-number (line-number-at-pos)) + (column-number (current-column))) + (message (concat "line: " (number-to-string line-number) "\tcol: " (number-to-string column-number))) (setq buffer-read-only nil) (erase-buffer) (setq standard-output (current-buffer)) *************** For more information, see the function ` *** 857,863 **** ?\s))) (unless file ;; No visited file. Check local value of ! ;; list-buffers-directory and, for Info buffers, ;; Info-current-file. (cond ((and (boundp 'list-buffers-directory) list-buffers-directory) --- 860,866 ---- ?\s))) (unless file ;; No visited file. Check local value of ! ;; list-buffers-diectory and, for Info buffers, ;; Info-current-file. (cond ((and (boundp 'list-buffers-directory) list-buffers-directory) *************** For more information, see the function ` *** 896,903 **** (string< (nth Buffer-menu-sort-column a) (nth Buffer-menu-sort-column b))))) list)) - (if (eq (car buffer) old-buffer) - (setq desired-point (point))) (insert (cadr buffer) ;; Put the buffer name into a text property ;; so we don't have to extract it from the text. --- 899,904 ---- *************** For more information, see the function ` *** 929,941 **** (Buffer-menu-mode) (when Buffer-menu-use-header-line (setq header-line-format header)) ! ;; DESIRED-POINT doesn't have to be set; it is not when the ! ;; current buffer is not displayed for some reason. ! (and desired-point ! (goto-char desired-point)) (setq Buffer-menu-files-only files-only) (setq Buffer-menu--buffers buffer-list) (set-buffer-modified-p nil) ! (current-buffer)))) ;;; buff-menu.el ends here --- 930,950 ---- (Buffer-menu-mode) (when Buffer-menu-use-header-line (setq header-line-format header)) ! (let ((buffer-list-window (get-window-with-predicate ! (lambda (window) ! (string= "*Buffer List*" ! (buffer-name (window-buffer window)))))) ! (current-window (selected-window))) ! (when buffer-list-window ! (select-window buffer-list-window)) ! (goto-char (point-min)) ! (forward-line (1- line-number)) ! (forward-char column-number) ! (when buffer-list-window ! (select-window current-window))) (setq Buffer-menu-files-only files-only) (setq Buffer-menu--buffers buffer-list) (set-buffer-modified-p nil) ! (current-buffer))))) ;;; buff-menu.el ends here Diff #2 (full diff): === modified file 'lisp/buff-menu.el' *** lisp/buff-menu.el 2011-09-18 20:43:20 +0000 --- lisp/buff-menu.el 2011-12-09 06:18:25 +0000 *************** For more information, see the function ` *** 807,941 **** (setq header (concat (propertize " " 'display '(space :align-to 0)) header))) (with-current-buffer (get-buffer-create "*Buffer List*") ! (setq buffer-read-only nil) ! (erase-buffer) ! (setq standard-output (current-buffer)) ! ;; Force L2R direction, to avoid messing the display if the ! ;; first buffer in the list happens to begin with a strong R2L ! ;; character. ! (setq bidi-paragraph-direction 'left-to-right) ! (unless Buffer-menu-use-header-line ! ;; Use U+2014 (EM DASH) to underline if possible, else use ASCII ! ;; (i.e. U+002D, HYPHEN-MINUS). ! (let ((underline (if (char-displayable-p ?\u2014) ?\u2014 ?-))) ! (insert header ! (apply 'string ! (mapcar (lambda (c) ! (if (memq c '(?\n ?\s)) c underline)) ! header))))) ! ;; Collect info for every buffer we're interested in. ! (dolist (buffer (or buffer-list ! (buffer-list ! (when Buffer-menu-use-frame-buffer-list ! (selected-frame))))) ! (with-current-buffer buffer ! (let ((name (buffer-name)) ! (file buffer-file-name)) ! (unless (and (not buffer-list) ! (or ! ;; Don't mention internal buffers. ! (and (string= (substring name 0 1) " ") (null file)) ! ;; Maybe don't mention buffers without files. ! (and files-only (not file)) ! (string= name "*Buffer List*"))) ! ;; Otherwise output info. ! (let ((mode (concat (format-mode-line mode-name nil nil buffer) ! (if mode-line-process ! (format-mode-line mode-line-process ! nil nil buffer)))) ! (bits (string ! (if (eq buffer old-buffer) ?. ?\s) ! ;; Handle readonly status. The output buffer ! ;; is special cased to appear readonly; it is ! ;; actually made so at a later date. ! (if (or (eq buffer standard-output) ! buffer-read-only) ! ?% ?\s) ! ;; Identify modified buffers. ! (if (buffer-modified-p) ?* ?\s) ! ;; Space separator. ! ?\s))) ! (unless file ! ;; No visited file. Check local value of ! ;; list-buffers-directory and, for Info buffers, ! ;; Info-current-file. ! (cond ((and (boundp 'list-buffers-directory) ! list-buffers-directory) ! (setq file list-buffers-directory)) ! ((eq major-mode 'Info-mode) ! (setq file Info-current-file) ! (cond ! ((equal file "dir") ! (setq file "*Info Directory*")) ! ((eq file 'apropos) ! (setq file "*Info Apropos*")) ! ((eq file 'history) ! (setq file "*Info History*")) ! ((eq file 'toc) ! (setq file "*Info TOC*")) ! ((not (stringp file)) ;; avoid errors ! (setq file nil)) ! (t ! (setq file (concat "(" ! (file-name-nondirectory file) ! ") " ! Info-current-node))))))) ! (push (list buffer bits name (buffer-size) mode file) ! list)))))) ! ;; Preserve the original buffer-list ordering, just in case. ! (setq list (nreverse list)) ! ;; Place the buffers's info in the output buffer, sorted if necessary. ! (dolist (buffer ! (if Buffer-menu-sort-column ! (sort list ! (if (eq Buffer-menu-sort-column 3) ! (lambda (a b) ! (< (nth Buffer-menu-sort-column a) ! (nth Buffer-menu-sort-column b))) ! (lambda (a b) ! (string< (nth Buffer-menu-sort-column a) ! (nth Buffer-menu-sort-column b))))) ! list)) ! (if (eq (car buffer) old-buffer) ! (setq desired-point (point))) ! (insert (cadr buffer) ! ;; Put the buffer name into a text property ! ;; so we don't have to extract it from the text. ! ;; This way we avoid problems with unusual buffer names. ! (let ((name (nth 2 buffer)) ! (size (int-to-string (nth 3 buffer)))) ! (Buffer-menu-buffer+size name size ! `(buffer-name ,name ! buffer ,(car buffer) ! font-lock-face buffer-menu-buffer ! mouse-face highlight ! help-echo ! ,(if (>= (length name) ! (- Buffer-menu-buffer+size-width ! (max (length size) 3) ! 2)) ! name ! "mouse-2: select this buffer")))) ! " " ! (if (> (string-width (nth 4 buffer)) Buffer-menu-mode-width) ! (truncate-string-to-width (nth 4 buffer) ! Buffer-menu-mode-width) ! (nth 4 buffer))) ! (when (nth 5 buffer) ! (indent-to (+ Buffer-menu-buffer-column Buffer-menu-buffer+size-width ! Buffer-menu-mode-width 4) 1) ! (princ (abbreviate-file-name (nth 5 buffer)))) ! (princ "\n")) ! (Buffer-menu-mode) ! (when Buffer-menu-use-header-line ! (setq header-line-format header)) ! ;; DESIRED-POINT doesn't have to be set; it is not when the ! ;; current buffer is not displayed for some reason. ! (and desired-point ! (goto-char desired-point)) ! (setq Buffer-menu-files-only files-only) ! (setq Buffer-menu--buffers buffer-list) ! (set-buffer-modified-p nil) ! (current-buffer)))) ;;; buff-menu.el ends here --- 807,950 ---- (setq header (concat (propertize " " 'display '(space :align-to 0)) header))) (with-current-buffer (get-buffer-create "*Buffer List*") ! (let ((line-number (line-number-at-pos)) ! (column-number (current-column))) ! (message (concat "line: " (number-to-string line-number) "\tcol: " (number-to-string column-number))) ! (setq buffer-read-only nil) ! (erase-buffer) ! (setq standard-output (current-buffer)) ! ;; Force L2R direction, to avoid messing the display if the ! ;; first buffer in the list happens to begin with a strong R2L ! ;; character. ! (setq bidi-paragraph-direction 'left-to-right) ! (unless Buffer-menu-use-header-line ! ;; Use U+2014 (EM DASH) to underline if possible, else use ASCII ! ;; (i.e. U+002D, HYPHEN-MINUS). ! (let ((underline (if (char-displayable-p ?\u2014) ?\u2014 ?-))) ! (insert header ! (apply 'string ! (mapcar (lambda (c) ! (if (memq c '(?\n ?\s)) c underline)) ! header))))) ! ;; Collect info for every buffer we're interested in. ! (dolist (buffer (or buffer-list ! (buffer-list ! (when Buffer-menu-use-frame-buffer-list ! (selected-frame))))) ! (with-current-buffer buffer ! (let ((name (buffer-name)) ! (file buffer-file-name)) ! (unless (and (not buffer-list) ! (or ! ;; Don't mention internal buffers. ! (and (string= (substring name 0 1) " ") (null file)) ! ;; Maybe don't mention buffers without files. ! (and files-only (not file)) ! (string= name "*Buffer List*"))) ! ;; Otherwise output info. ! (let ((mode (concat (format-mode-line mode-name nil nil buffer) ! (if mode-line-process ! (format-mode-line mode-line-process ! nil nil buffer)))) ! (bits (string ! (if (eq buffer old-buffer) ?. ?\s) ! ;; Handle readonly status. The output buffer ! ;; is special cased to appear readonly; it is ! ;; actually made so at a later date. ! (if (or (eq buffer standard-output) ! buffer-read-only) ! ?% ?\s) ! ;; Identify modified buffers. ! (if (buffer-modified-p) ?* ?\s) ! ;; Space separator. ! ?\s))) ! (unless file ! ;; No visited file. Check local value of ! ;; list-buffers-diectory and, for Info buffers, ! ;; Info-current-file. ! (cond ((and (boundp 'list-buffers-directory) ! list-buffers-directory) ! (setq file list-buffers-directory)) ! ((eq major-mode 'Info-mode) ! (setq file Info-current-file) ! (cond ! ((equal file "dir") ! (setq file "*Info Directory*")) ! ((eq file 'apropos) ! (setq file "*Info Apropos*")) ! ((eq file 'history) ! (setq file "*Info History*")) ! ((eq file 'toc) ! (setq file "*Info TOC*")) ! ((not (stringp file)) ;; avoid errors ! (setq file nil)) ! (t ! (setq file (concat "(" ! (file-name-nondirectory file) ! ") " ! Info-current-node))))))) ! (push (list buffer bits name (buffer-size) mode file) ! list)))))) ! ;; Preserve the original buffer-list ordering, just in case. ! (setq list (nreverse list)) ! ;; Place the buffers's info in the output buffer, sorted if necessary. ! (dolist (buffer ! (if Buffer-menu-sort-column ! (sort list ! (if (eq Buffer-menu-sort-column 3) ! (lambda (a b) ! (< (nth Buffer-menu-sort-column a) ! (nth Buffer-menu-sort-column b))) ! (lambda (a b) ! (string< (nth Buffer-menu-sort-column a) ! (nth Buffer-menu-sort-column b))))) ! list)) ! (insert (cadr buffer) ! ;; Put the buffer name into a text property ! ;; so we don't have to extract it from the text. ! ;; This way we avoid problems with unusual buffer names. ! (let ((name (nth 2 buffer)) ! (size (int-to-string (nth 3 buffer)))) ! (Buffer-menu-buffer+size name size ! `(buffer-name ,name ! buffer ,(car buffer) ! font-lock-face buffer-menu-buffer ! mouse-face highlight ! help-echo ! ,(if (>= (length name) ! (- Buffer-menu-buffer+size-width ! (max (length size) 3) ! 2)) ! name ! "mouse-2: select this buffer")))) ! " " ! (if (> (string-width (nth 4 buffer)) Buffer-menu-mode-width) ! (truncate-string-to-width (nth 4 buffer) ! Buffer-menu-mode-width) ! (nth 4 buffer))) ! (when (nth 5 buffer) ! (indent-to (+ Buffer-menu-buffer-column Buffer-menu-buffer+size-width ! Buffer-menu-mode-width 4) 1) ! (princ (abbreviate-file-name (nth 5 buffer)))) ! (princ "\n")) ! (Buffer-menu-mode) ! (when Buffer-menu-use-header-line ! (setq header-line-format header)) ! (let ((buffer-list-window (get-window-with-predicate ! (lambda (window) ! (string= "*Buffer List*" ! (buffer-name (window-buffer window)))))) ! (current-window (selected-window))) ! (when buffer-list-window ! (select-window buffer-list-window)) ! (goto-char (point-min)) ! (forward-line (1- line-number)) ! (forward-char column-number) ! (when buffer-list-window ! (select-window current-window))) ! (setq Buffer-menu-files-only files-only) ! (setq Buffer-menu--buffers buffer-list) ! (set-buffer-modified-p nil) ! (current-buffer))))) ;;; buff-menu.el ends here -Zachary Kanfer On Sun, Oct 16, 2011 at 11:50 AM, Stefan Monnier wrote: > > ! (display-buffer (list-buffers-noselect files-only))) > [...] > > ! (if (string= (buffer-name) > > ! "*Buffer List*") > > ! (revert-buffer) > > ! (display-buffer (list-buffers-noselect files-only)))) > > I don't think calling revert-buffer is right. Much better would be for > list-buffer-noselect to try to preserve point when reusing a buffer > rather than creating a new one. > > > Stefan > --e89a8ff1c094e245e904b3b74bf1 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: base64 SSBoYXZlIGluY2x1ZGVkIHR3byBkaWZmcyBpbiB0aGlzIGVtYWlsLiBUaGUgZmlyc3QgaXMgdGhl IGRpZmYgd2l0aG91dCB3aGl0ZXNwYWNlLCBnZW5lcmF0ZWQgYnkgYnpyIGRpZmYgbGlzcC9idWZm LW1lbnUuZWwgLS1uby1hbGlhc2VzIC0tZGlmZi1vcHRpb25zPSZxdW90Oy1jcCAtdyZxdW90OyAu IFRoZSBzZWNvbmQgaXMgdGhlIGZ1bGwgZGlmZiwgYXMgZ2VuZXJhdGVkIGJ5IGJ6ciBkaWZmIGxp c3AvYnVmZi1tZW51LmVsIC0tbm8tYWxpYXNlcyAtLWRpZmYtb3B0aW9ucz0tY3AgLiBJIGludHJv ZHVjZWQgYSBgbGV0YCBzdGF0ZW1lbnQgd2hpY2ggd3JhcHMgYSBsYXJnZSBtYWpvcml0eSBvZiB0 aGUgZnVuY3Rpb24sIHNvIGEgbGFyZ2UgcGFydCBvZiB0aGUgZnVsbCBkaWZmIGlzIG1lcmVseSB3 aGl0ZXNwYWNlIGNoYW5nZXMuIFRoZSBuby13aGl0ZXNwYWNlIGRpZmYgc2hvd3MgbW9yZSBjbGVh cmx5IHRoZSBjb2RlIGNoYW5nZXMgSSYjMzk7dmUgbWFkZS4gSSBjb3VsZCBoYXZlIHVzZWQgc2V0 cSB0byBhdm9pZCBpbnRyb2R1Y2luZyBhIG5ldyBsZXZlbCBvZiBuZXN0aW5nLCBidXQgZGlkbiYj Mzk7dCB3YW50IHRvIGxlYWsgbmV3IHZhcmlhYmxlcyBvdXRzaWRlIHRoZSBmdW5jdGlvbi4gSSB3 aWxsIGNoYW5nZSBpdCwgaWYgYWR2aXNlZCB0aGF0IGl0JiMzOTtzIGJldHRlciBwcmFjdGljZS48 YnI+Cgo8YnI+VGhlIG1ham9yaXR5IG9mIG15IGNoYW5nZXMgaGFwcGVuIG5lYXIgdGhlIGVuZCBv ZiB0aGUgbWV0aG9kLiBJIGdldCB0aGUgKkJ1ZmZlciBMaXN0KiB3aW5kb3csIGFuZCB0aGUgY3Vy cmVudCB3aW5kb3cuIElmIHRoZSAqQnVmZmVyIExpc3QqIHdpbmRvdyBleGlzdHMsIEkgc2VsZWN0 IGl0LiBJIHRoZW4gbW92ZSBwb2ludCB0byB0aGUgY29ycmVjdCBwb3NpdGlvbiwgYW5kIHJlc3Rv cmUgdGhlIHNlbGVjdGVkIHdpbmRvdyBpZiBuZWNlc3NhcnkuPGJyPgoKPGJyPkRpZmYgIzEgKGRp ZmYgaWdub3Jpbmcgd2hpdGVzcGFjZSk6PGJyPjxicj49PT0gbW9kaWZpZWQgZmlsZSAmIzM5O2xp c3AvYnVmZi1tZW51LmVsJiMzOTs8YnI+KioqIGxpc3AvYnVmZi1tZW51LmVsoKCgIDIwMTEtMDkt MTggMjA6NDM6MjAgKzAwMDA8YnI+LS0tIGxpc3AvYnVmZi1tZW51LmVsoKCgIDIwMTEtMTItMDkg MDY6MTg6MjUgKzAwMDA8YnI+KioqKioqKioqKioqKioqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBz ZWUgdGhlIGZ1bmN0aW9uIGA8YnI+CgoqKiogODA3LDgxMiAqKioqPGJyPi0tLSA4MDcsODE1IC0t LS08YnI+oKCgoKCgoCAoc2V0cSBoZWFkZXIgKGNvbmNhdCAocHJvcGVydGl6ZSAmcXVvdDsgJnF1 b3Q7ICYjMzk7ZGlzcGxheSAmIzM5OyhzcGFjZSA6YWxpZ24tdG8gMCkpPGJyPqAgoKCgIKCgoCCg oKAgoKAgaGVhZGVyKSkpPGJyPqCgoKCgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVy LWNyZWF0ZSAmcXVvdDsqQnVmZmVyIExpc3QqJnF1b3Q7KTxicj4KCiugoKCgoKAgKGxldCAoKGxp bmUtbnVtYmVyIChsaW5lLW51bWJlci1hdC1wb3MpKTxicj4roKCgoKCgoKCgoKCgIChjb2x1bW4t bnVtYmVyIChjdXJyZW50LWNvbHVtbikpKTxicj4roKCgoKCgoKAgKG1lc3NhZ2UgKGNvbmNhdCAm cXVvdDtsaW5lOiAmcXVvdDsgKG51bWJlci10by1zdHJpbmcgbGluZS1udW1iZXIpICZxdW90O1x0 Y29sOiAmcXVvdDsgKG51bWJlci10by1zdHJpbmcgY29sdW1uLW51bWJlcikpKTxicj4KCqCgoKCg oKCgoCAoc2V0cSBidWZmZXItcmVhZC1vbmx5IG5pbCk8YnI+oKCgoKCgoKCgIChlcmFzZS1idWZm ZXIpPGJyPqCgoKCgoKCgoCAoc2V0cSBzdGFuZGFyZC1vdXRwdXQgKGN1cnJlbnQtYnVmZmVyKSk8 YnI+KioqKioqKioqKioqKioqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZ1bmN0aW9u IGA8YnI+KioqIDg1Nyw4NjMgKioqKjxicj6gIKCgoCCgoKAgoKCgIKCgID9ccykpKTxicj4KCqAg oKCgIKCgoCAodW5sZXNzIGZpbGU8YnI+oCCgoKAgoKCgIKAgOzsgTm8gdmlzaXRlZCBmaWxlLqAg Q2hlY2sgbG9jYWwgdmFsdWUgb2Y8YnI+ISCgoKAgoKCgIKAgOzsgbGlzdC1idWZmZXJzLWRpcmVj dG9yeSBhbmQsIGZvciBJbmZvIGJ1ZmZlcnMsPGJyPqAgoKCgIKCgoCCgIDs7IEluZm8tY3VycmVu dC1maWxlLjxicj6gIKCgoCCgoKAgoCAoY29uZCAoKGFuZCAoYm91bmRwICYjMzk7bGlzdC1idWZm ZXJzLWRpcmVjdG9yeSk8YnI+CgqgIKCgoCCgoKAgoKCgIKCgoKCgIGxpc3QtYnVmZmVycy1kaXJl Y3RvcnkpPGJyPi0tLSA4NjAsODY2IC0tLS08YnI+oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgID9ccykpKTxicj6goKCgoKCgoKCgoKCgoKCgoKCgICh1bmxlc3MgZmlsZTxicj6goKCgoKCg oKCgoKCgoKCgoKCgoKAgOzsgTm8gdmlzaXRlZCBmaWxlLqAgQ2hlY2sgbG9jYWwgdmFsdWUgb2Y8 YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgIDs7IGxpc3QtYnVmZmVycy1kaWVjdG9yeSBhbmQsIGZv ciBJbmZvIGJ1ZmZlcnMsPGJyPgoKoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDs7IEluZm8tY3VycmVu dC1maWxlLjxicj6goKCgoKCgoKCgoKCgoKCgoKCgoKAgKGNvbmQgKChhbmQgKGJvdW5kcCAmIzM5 O2xpc3QtYnVmZmVycy1kaXJlY3RvcnkpPGJyPqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoCBsaXN0LWJ1ZmZlcnMtZGlyZWN0b3J5KTxicj4qKioqKioqKioqKioqKiogRm9yIG1vcmUg aW5mb3JtYXRpb24sIHNlZSB0aGUgZnVuY3Rpb24gYDxicj4KCioqKiA4OTYsOTAzICoqKio8YnI+ oCCgoKAgoKCgIKCgoCCgoKCgIChzdHJpbmcmbHQ7IChudGggQnVmZmVyLW1lbnUtc29ydC1jb2x1 bW4gYSk8YnI+oCCgoKAgoKCgIKCgoCCgoKAgoKCgoKAgKG50aCBCdWZmZXItbWVudS1zb3J0LWNv bHVtbiBiKSkpKSk8YnI+oCCgoKAgoKCgIKBsaXN0KSk8YnI+LSCgoKAgKGlmIChlcSAoY2FyIGJ1 ZmZlcikgb2xkLWJ1ZmZlcik8YnI+LSCgoKAgoKCgIChzZXRxIGRlc2lyZWQtcG9pbnQgKHBvaW50 KSkpPGJyPgoKoCCgoKAgKGluc2VydCAoY2FkciBidWZmZXIpPGJyPqAgoKCgIKCgoCA7OyBQdXQg dGhlIGJ1ZmZlciBuYW1lIGludG8gYSB0ZXh0IHByb3BlcnR5PGJyPqAgoKCgIKCgoCA7OyBzbyB3 ZSBkb24mIzM5O3QgaGF2ZSB0byBleHRyYWN0IGl0IGZyb20gdGhlIHRleHQuPGJyPi0tLSA4OTks OTA0IC0tLS08YnI+KioqKioqKioqKioqKioqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhl IGZ1bmN0aW9uIGA8YnI+CgoqKiogOTI5LDk0MSAqKioqPGJyPqCgoKCgoKAgKEJ1ZmZlci1tZW51 LW1vZGUpPGJyPqCgoKCgoKAgKHdoZW4gQnVmZmVyLW1lbnUtdXNlLWhlYWRlci1saW5lPGJyPqAg oKCgIChzZXRxIGhlYWRlci1saW5lLWZvcm1hdCBoZWFkZXIpKTxicj4hoKCgoKCgIDs7IERFU0lS RUQtUE9JTlQgZG9lc24mIzM5O3QgaGF2ZSB0byBiZSBzZXQ7IGl0IGlzIG5vdCB3aGVuIHRoZTxi cj4hoKCgoKCgIDs7IGN1cnJlbnQgYnVmZmVyIGlzIG5vdCBkaXNwbGF5ZWQgZm9yIHNvbWUgcmVh c29uLjxicj4KCiGgoKCgoKAgKGFuZCBkZXNpcmVkLXBvaW50PGJyPiEgoKCgIKCgIChnb3RvLWNo YXIgZGVzaXJlZC1wb2ludCkpPGJyPqCgoKCgoKAgKHNldHEgQnVmZmVyLW1lbnUtZmlsZXMtb25s eSBmaWxlcy1vbmx5KTxicj6goKCgoKCgIChzZXRxIEJ1ZmZlci1tZW51LS1idWZmZXJzIGJ1ZmZl ci1saXN0KTxicj6goKCgoKCgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKTxicj4hoKCgoKCg IChjdXJyZW50LWJ1ZmZlcikpKSk8YnI+CgqgIDxicj6gIDs7OyBidWZmLW1lbnUuZWwgZW5kcyBo ZXJlPGJyPi0tLSA5MzAsOTUwIC0tLS08YnI+oKCgoKCgoKCgIChCdWZmZXItbWVudS1tb2RlKTxi cj6goKCgoKCgoKAgKHdoZW4gQnVmZmVyLW1lbnUtdXNlLWhlYWRlci1saW5lPGJyPqCgoKCgoKCg oKCgIChzZXRxIGhlYWRlci1saW5lLWZvcm1hdCBoZWFkZXIpKTxicj4hoKCgoKCgoKAgKGxldCAo KGJ1ZmZlci1saXN0LXdpbmRvdyAoZ2V0LXdpbmRvdy13aXRoLXByZWRpY2F0ZTxicj4KCiGgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCAobGFtYmRhICh3aW5kb3cpPGJyPiGgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCAoc3RyaW5nPSAmcXVvdDsqQnVm ZmVyIExpc3QqJnF1b3Q7PGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoCAoYnVmZmVyLW5hbWUgKHdpbmRvdy1idWZmZXIgd2luZG93KSkpKSkpPGJy PgoKIaCgoKCgoKCgoKCgoKCgIChjdXJyZW50LXdpbmRvdyAoc2VsZWN0ZWQtd2luZG93KSkpPGJy PiGgoKCgoKCgoKCgICh3aGVuIGJ1ZmZlci1saXN0LXdpbmRvdzxicj4hoKCgoKCgoKCgoKCgIChz ZWxlY3Qtd2luZG93IGJ1ZmZlci1saXN0LXdpbmRvdykpPGJyPiGgoKCgoKCgoKCgIChnb3RvLWNo YXIgKHBvaW50LW1pbikpPGJyPiGgoKCgoKCgoKCgIChmb3J3YXJkLWxpbmUgKDEtIGxpbmUtbnVt YmVyKSk8YnI+CgohoKCgoKCgoKCgoCAoZm9yd2FyZC1jaGFyIGNvbHVtbi1udW1iZXIpPGJyPiGg oKCgoKCgoKCgICh3aGVuIGJ1ZmZlci1saXN0LXdpbmRvdzxicj4hoKCgoKCgoKCgoKCgIChzZWxl Y3Qtd2luZG93IGN1cnJlbnQtd2luZG93KSkpPGJyPqCgoKCgoKCgoCAoc2V0cSBCdWZmZXItbWVu dS1maWxlcy1vbmx5IGZpbGVzLW9ubHkpPGJyPqCgoKCgoKCgoCAoc2V0cSBCdWZmZXItbWVudS0t YnVmZmVycyBidWZmZXItbGlzdCk8YnI+CgqgoKCgoKCgoKAgKHNldC1idWZmZXItbW9kaWZpZWQt cCBuaWwpPGJyPiGgoKCgoKCgoCAoY3VycmVudC1idWZmZXIpKSkpKTxicj6gIDxicj6gIDs7OyBi dWZmLW1lbnUuZWwgZW5kcyBoZXJlPGJyPjxicj48YnI+PGJyPkRpZmYgIzIgKGZ1bGwgZGlmZik6 PGJyPjxicj49PT0gbW9kaWZpZWQgZmlsZSAmIzM5O2xpc3AvYnVmZi1tZW51LmVsJiMzOTs8YnI+ KioqIGxpc3AvYnVmZi1tZW51LmVsoKCgIDIwMTEtMDktMTggMjA6NDM6MjAgKzAwMDA8YnI+Cgot LS0gbGlzcC9idWZmLW1lbnUuZWygoKAgMjAxMS0xMi0wOSAwNjoxODoyNSArMDAwMDxicj4qKioq KioqKioqKioqKiogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgZnVuY3Rpb24gYDxicj4q KiogODA3LDk0MSAqKioqPGJyPqCgoKCgoKAgKHNldHEgaGVhZGVyIChjb25jYXQgKHByb3BlcnRp emUgJnF1b3Q7ICZxdW90OyAmIzM5O2Rpc3BsYXkgJiMzOTsoc3BhY2UgOmFsaWduLXRvIDApKTxi cj4KCqAgoKCgIKCgoCCgoKAgoKAgaGVhZGVyKSkpPGJyPqCgoKCgICh3aXRoLWN1cnJlbnQtYnVm ZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAmcXVvdDsqQnVmZmVyIExpc3QqJnF1b3Q7KTxicj4hoKCg oKCgIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgbmlsKTxicj4hoKCgoKCgIChlcmFzZS1idWZmZXIp PGJyPiGgoKCgoKAgKHNldHEgc3RhbmRhcmQtb3V0cHV0IChjdXJyZW50LWJ1ZmZlcikpPGJyPgoK IaCgoKCgoCA7OyBGb3JjZSBMMlIgZGlyZWN0aW9uLCB0byBhdm9pZCBtZXNzaW5nIHRoZSBkaXNw bGF5IGlmIHRoZTxicj4hoKCgoKCgIDs7IGZpcnN0IGJ1ZmZlciBpbiB0aGUgbGlzdCBoYXBwZW5z IHRvIGJlZ2luIHdpdGggYSBzdHJvbmcgUjJMPGJyPiGgoKCgoKAgOzsgY2hhcmFjdGVyLjxicj4h oKCgoKCgIChzZXRxIGJpZGktcGFyYWdyYXBoLWRpcmVjdGlvbiAmIzM5O2xlZnQtdG8tcmlnaHQp PGJyPgoKIaCgoKCgoCAodW5sZXNzIEJ1ZmZlci1tZW51LXVzZS1oZWFkZXItbGluZTxicj4hoKCg oKCgoKAgOzsgVXNlIFUrMjAxNCAoRU0gREFTSCkgdG8gdW5kZXJsaW5lIGlmIHBvc3NpYmxlLCBl bHNlIHVzZSBBU0NJSTxicj4hoKCgoKCgoKAgOzsgKGkuZS4gVSswMDJELCBIWVBIRU4tTUlOVVMp Ljxicj4hIKCgoCAobGV0ICgodW5kZXJsaW5lIChpZiAoY2hhci1kaXNwbGF5YWJsZS1wID9cdTIw MTQpID9cdTIwMTQgPy0pKSk8YnI+CgohIKCgoCCgIChpbnNlcnQgaGVhZGVyPGJyPiEgoKCgIKCg oCCgIChhcHBseSAmIzM5O3N0cmluZzxicj4hIKCgoCCgoKAgoKCgIKAobWFwY2FyIChsYW1iZGEg KGMpPGJyPiEgoKCgIKCgoCCgoKAgoKCgIKCgIChpZiAobWVtcSBjICYjMzk7KD9cbiA/XHMpKSBj IHVuZGVybGluZSkpPGJyPiEgoKCgIKCgoCCgoKAgoKCgIKBoZWFkZXIpKSkpKTxicj4hoKCgoKCg IDs7IENvbGxlY3QgaW5mbyBmb3IgZXZlcnkgYnVmZmVyIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGlu Ljxicj4KCiGgoKCgoKAgKGRvbGlzdCAoYnVmZmVyIChvciBidWZmZXItbGlzdDxicj4hIKCgoCCg oKAgoKCgIKAgKGJ1ZmZlci1saXN0PGJyPiEgoKCgIKCgoCCgoKAgoKAgKHdoZW4gQnVmZmVyLW1l bnUtdXNlLWZyYW1lLWJ1ZmZlci1saXN0PGJyPiEgoKCgIKCgoCCgoKAgoKCgoCAoc2VsZWN0ZWQt ZnJhbWUpKSkpKTxicj4hIKCgoCAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXI8YnI+ISCgoKAg oCAobGV0ICgobmFtZSAoYnVmZmVyLW5hbWUpKTxicj4KCiEgoKCgIKCgoCAoZmlsZSBidWZmZXIt ZmlsZS1uYW1lKSk8YnI+ISCgoKAgoKCgICh1bmxlc3MgKGFuZCAobm90IGJ1ZmZlci1saXN0KTxi cj4hIKCgoCCgoKAgoKCgIKAob3I8YnI+ISCgoKAgoKCgIKCgoCCgIDs7IERvbiYjMzk7dCBtZW50 aW9uIGludGVybmFsIGJ1ZmZlcnMuPGJyPiEgoKCgIKCgoCCgoKAgoCAoYW5kIChzdHJpbmc9IChz dWJzdHJpbmcgbmFtZSAwIDEpICZxdW90OyAmcXVvdDspIChudWxsIGZpbGUpKTxicj4KCiEgoKCg IKCgoCCgoKAgoCA7OyBNYXliZSBkb24mIzM5O3QgbWVudGlvbiBidWZmZXJzIHdpdGhvdXQgZmls ZXMuPGJyPiEgoKCgIKCgoCCgoKAgoCAoYW5kIGZpbGVzLW9ubHkgKG5vdCBmaWxlKSk8YnI+ISCg oKAgoKCgIKCgoCCgIChzdHJpbmc9IG5hbWUgJnF1b3Q7KkJ1ZmZlciBMaXN0KiZxdW90OykpKTxi cj4hIKCgoCCgoKCgoCA7OyBPdGhlcndpc2Ugb3V0cHV0IGluZm8uPGJyPiEgoKCgIKCgoKCgIChs ZXQgKChtb2RlIChjb25jYXQgKGZvcm1hdC1tb2RlLWxpbmUgbW9kZS1uYW1lIG5pbCBuaWwgYnVm ZmVyKTxicj4KCiEgoKCgIKCgoCCgoKAgoKCgIKAgKGlmIG1vZGUtbGluZS1wcm9jZXNzPGJyPiEg oKCgIKCgoCCgoKAgoKCgIKCgoKCgIChmb3JtYXQtbW9kZS1saW5lIG1vZGUtbGluZS1wcm9jZXNz PGJyPiEgoKCgIKCgoCCgoKAgoKCgIKCgoCCgoKAgoKCgIG5pbCBuaWwgYnVmZmVyKSkpKTxicj4h IKCgoCCgoKAgoKCgIChiaXRzIChzdHJpbmc8YnI+ISCgoKAgoKCgIKCgoCCgoCAoaWYgKGVxIGJ1 ZmZlciBvbGQtYnVmZmVyKSA/LiA/XHMpPGJyPgoKISCgoKAgoKCgIKCgoCCgoCA7OyBIYW5kbGUg cmVhZG9ubHkgc3RhdHVzLqAgVGhlIG91dHB1dCBidWZmZXI8YnI+ISCgoKAgoKCgIKCgoCCgoCA7 OyBpcyBzcGVjaWFsIGNhc2VkIHRvIGFwcGVhciByZWFkb25seTsgaXQgaXM8YnI+ISCgoKAgoKCg IKCgoCCgoCA7OyBhY3R1YWxseSBtYWRlIHNvIGF0IGEgbGF0ZXIgZGF0ZS48YnI+ISCgoKAgoKCg IKCgoCCgoCAoaWYgKG9yIChlcSBidWZmZXIgc3RhbmRhcmQtb3V0cHV0KTxicj4KCiEgoKCgIKCg oCCgoKAgoKCgIKCgIGJ1ZmZlci1yZWFkLW9ubHkpPGJyPiEgoKCgIKCgoCCgoKAgoKCgoKCgID8l ID9ccyk8YnI+ISCgoKAgoKCgIKCgoCCgoCA7OyBJZGVudGlmeSBtb2RpZmllZCBidWZmZXJzLjxi cj4hIKCgoCCgoKAgoKCgIKCgIChpZiAoYnVmZmVyLW1vZGlmaWVkLXApID8qID9ccyk8YnI+ISCg oKAgoKCgIKCgoCCgoCA7OyBTcGFjZSBzZXBhcmF0b3IuPGJyPiEgoKCgIKCgoCCgoKAgoKAgP1xz KSkpPGJyPgoKISCgoKAgoKCgICh1bmxlc3MgZmlsZTxicj4hIKCgoCCgoKAgoCA7OyBObyB2aXNp dGVkIGZpbGUuoCBDaGVjayBsb2NhbCB2YWx1ZSBvZjxicj4hIKCgoCCgoKAgoCA7OyBsaXN0LWJ1 ZmZlcnMtZGlyZWN0b3J5IGFuZCwgZm9yIEluZm8gYnVmZmVycyw8YnI+ISCgoKAgoKCgIKAgOzsg SW5mby1jdXJyZW50LWZpbGUuPGJyPiEgoKCgIKCgoCCgIChjb25kICgoYW5kIChib3VuZHAgJiMz OTtsaXN0LWJ1ZmZlcnMtZGlyZWN0b3J5KTxicj4KCiEgoKCgIKCgoCCgoKAgoKCgoKAgbGlzdC1i dWZmZXJzLWRpcmVjdG9yeSk8YnI+ISCgoKAgoKCgIKCgoCCgKHNldHEgZmlsZSBsaXN0LWJ1ZmZl cnMtZGlyZWN0b3J5KSk8YnI+ISCgoKAgoKCgIKCgoCAoKGVxIG1ham9yLW1vZGUgJiMzOTtJbmZv LW1vZGUpPGJyPiEgoKCgIKCgoCCgoKAgoChzZXRxIGZpbGUgSW5mby1jdXJyZW50LWZpbGUpPGJy PiEgoKCgIKCgoCCgoKAgoChjb25kPGJyPgoKISCgoKAgoKCgIKCgoCCgICgoZXF1YWwgZmlsZSAm cXVvdDtkaXImcXVvdDspPGJyPiEgoKCgIKCgoCCgoKAgoKAgKHNldHEgZmlsZSAmcXVvdDsqSW5m byBEaXJlY3RvcnkqJnF1b3Q7KSk8YnI+ISCgoKAgoKCgIKCgoCCgICgoZXEgZmlsZSAmIzM5O2Fw cm9wb3MpPGJyPiEgoKCgIKCgoCCgoKAgoKAgKHNldHEgZmlsZSAmcXVvdDsqSW5mbyBBcHJvcG9z KiZxdW90OykpPGJyPiEgoKCgIKCgoCCgoKAgoCAoKGVxIGZpbGUgJiMzOTtoaXN0b3J5KTxicj4K CiEgoKCgIKCgoCCgoKAgoKAgKHNldHEgZmlsZSAmcXVvdDsqSW5mbyBIaXN0b3J5KiZxdW90Oykp PGJyPiEgoKCgIKCgoCCgoKAgoCAoKGVxIGZpbGUgJiMzOTt0b2MpPGJyPiEgoKCgIKCgoCCgoKAg oKAgKHNldHEgZmlsZSAmcXVvdDsqSW5mbyBUT0MqJnF1b3Q7KSk8YnI+ISCgoKAgoKCgIKCgoCCg ICgobm90IChzdHJpbmdwIGZpbGUpKaAgOzsgYXZvaWQgZXJyb3JzPGJyPiEgoKCgIKCgoCCgoKAg oKAgKHNldHEgZmlsZSBuaWwpKTxicj4KCiEgoKCgIKCgoCCgoKAgoCAodDxicj4hIKCgoCCgoKAg oKCgIKCgIChzZXRxIGZpbGUgKGNvbmNhdCAmcXVvdDsoJnF1b3Q7PGJyPiEgoKCgIKCgoCCgoKAg oKCgIKCgoCCgoKCgoCAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBmaWxlKTxicj4hIKCgoCCgoKAg oKCgIKCgoCCgoKAgoKCgoKAgJnF1b3Q7KSAmcXVvdDs8YnI+ISCgoKAgoKCgIKCgoCCgoKAgoKCg IKCgoKCgIEluZm8tY3VycmVudC1ub2RlKSkpKSkpKTxicj4KCiEgoKCgIKCgoCAocHVzaCAobGlz dCBidWZmZXIgYml0cyBuYW1lIChidWZmZXItc2l6ZSkgbW9kZSBmaWxlKTxicj4hIKCgoCCgoKAg oKCgoKAgbGlzdCkpKSkpKTxicj4hoKCgoKCgIDs7IFByZXNlcnZlIHRoZSBvcmlnaW5hbCBidWZm ZXItbGlzdCBvcmRlcmluZywganVzdCBpbiBjYXNlLjxicj4hoKCgoKCgIChzZXRxIGxpc3QgKG5y ZXZlcnNlIGxpc3QpKTxicj4hoKCgoKCgIDs7IFBsYWNlIHRoZSBidWZmZXJzJiMzOTtzIGluZm8g aW4gdGhlIG91dHB1dCBidWZmZXIsIHNvcnRlZCBpZiBuZWNlc3NhcnkuPGJyPgoKIaCgoKCgoCAo ZG9saXN0IChidWZmZXI8YnI+ISCgoKAgoKCgoKCgIChpZiBCdWZmZXItbWVudS1zb3J0LWNvbHVt bjxicj4hIKCgoCCgoKAgoKAgKHNvcnQgbGlzdDxicj4hIKCgoCCgoKAgoKCgIKAoaWYgKGVxIEJ1 ZmZlci1tZW51LXNvcnQtY29sdW1uIDMpPGJyPiEgoKCgIKCgoCCgoKAgoKCgoCAobGFtYmRhIChh IGIpPGJyPiEgoKCgIKCgoCCgoKAgoKCgoKCgICgmbHQ7IChudGggQnVmZmVyLW1lbnUtc29ydC1j b2x1bW4gYSk8YnI+CgohIKCgoCCgoKAgoKCgIKCgoCCgIChudGggQnVmZmVyLW1lbnUtc29ydC1j b2x1bW4gYikpKTxicj4hIKCgoCCgoKAgoKCgIKCgIChsYW1iZGEgKGEgYik8YnI+ISCgoKAgoKCg IKCgoCCgoKCgIChzdHJpbmcmbHQ7IChudGggQnVmZmVyLW1lbnUtc29ydC1jb2x1bW4gYSk8YnI+ ISCgoKAgoKCgIKCgoCCgoKAgoKCgoKAgKG50aCBCdWZmZXItbWVudS1zb3J0LWNvbHVtbiBiKSkp KSk8YnI+CiEgoKCgIKCgoCCgbGlzdCkpPGJyPgohIKCgoCAoaWYgKGVxIChjYXIgYnVmZmVyKSBv bGQtYnVmZmVyKTxicj4hIKCgoCCgoKAgKHNldHEgZGVzaXJlZC1wb2ludCAocG9pbnQpKSk8YnI+ ISCgoKAgKGluc2VydCAoY2FkciBidWZmZXIpPGJyPiEgoKCgIKCgoCA7OyBQdXQgdGhlIGJ1ZmZl ciBuYW1lIGludG8gYSB0ZXh0IHByb3BlcnR5PGJyPiEgoKCgIKCgoCA7OyBzbyB3ZSBkb24mIzM5 O3QgaGF2ZSB0byBleHRyYWN0IGl0IGZyb20gdGhlIHRleHQuPGJyPgoKISCgoKAgoKCgIDs7IFRo aXMgd2F5IHdlIGF2b2lkIHByb2JsZW1zIHdpdGggdW51c3VhbCBidWZmZXIgbmFtZXMuPGJyPiEg oKCgIKCgoCAobGV0ICgobmFtZSAobnRoIDIgYnVmZmVyKSk8YnI+ISCgoKAgoKCgIKCgoKCgIChz aXplIChpbnQtdG8tc3RyaW5nIChudGggMyBidWZmZXIpKSkpPGJyPiEgoKCgIKCgoCCgIChCdWZm ZXItbWVudS1idWZmZXIrc2l6ZSBuYW1lIHNpemU8YnI+ISCgoKAgoKCgIKCgoKCgoKCgIGAoYnVm ZmVyLW5hbWUgLG5hbWU8YnI+CgohIKCgoCCgoKAgoKCgIKCgoCCgoKCgoKAgYnVmZmVyICwoY2Fy IGJ1ZmZlcik8YnI+ISCgoKAgoKCgIKCgoCCgoKAgoKCgoKCgIGZvbnQtbG9jay1mYWNlIGJ1ZmZl ci1tZW51LWJ1ZmZlcjxicj4hIKCgoCCgoKAgoKCgIKCgoCCgoKCgoKAgbW91c2UtZmFjZSBoaWdo bGlnaHQ8YnI+ISCgoKAgoKCgIKCgoCCgoKAgoKCgoKCgIGhlbHAtZWNobzxicj4hIKCgoCCgoKAg oKCgIKCgoCCgoKCgoKAgLChpZiAoJmd0Oz0gKGxlbmd0aCBuYW1lKTxicj4KCiEgoKCgIKCgoCCg oKAgoKCgIKCgoCCgoKAgKC0gQnVmZmVyLW1lbnUtYnVmZmVyK3NpemUtd2lkdGg8YnI+ISCgoKAg oKCgIKCgoCCgoKAgoKCgIKCgoCCgoCAobWF4IChsZW5ndGggc2l6ZSkgMyk8YnI+ISCgoKAgoKCg IKCgoCCgoKAgoKCgIKCgoCCgoCAyKSk8YnI+ISCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoCBuYW1l PGJyPiEgoKCgIKCgoCCgoKAgoKCgIKCgoCCgICZxdW90O21vdXNlLTI6IHNlbGVjdCB0aGlzIGJ1 ZmZlciZxdW90OykpKSk8YnI+CgohIKCgoCCgoKAgJnF1b3Q7oCAmcXVvdDs8YnI+ISCgoKAgoKCg IChpZiAoJmd0OyAoc3RyaW5nLXdpZHRoIChudGggNCBidWZmZXIpKSBCdWZmZXItbWVudS1tb2Rl LXdpZHRoKTxicj4hIKCgoCCgoKAgoKCgICh0cnVuY2F0ZS1zdHJpbmctdG8td2lkdGggKG50aCA0 IGJ1ZmZlcik8YnI+ISCgoKAgoKCgIKCgoCCgoKAgoKCgIKCgoKCgIEJ1ZmZlci1tZW51LW1vZGUt d2lkdGgpPGJyPiEgoKCgIKCgoCCgIChudGggNCBidWZmZXIpKSk8YnI+CgohIKCgoCAod2hlbiAo bnRoIDUgYnVmZmVyKTxicj4hIKCgoCCgIChpbmRlbnQtdG8gKCsgQnVmZmVyLW1lbnUtYnVmZmVy LWNvbHVtbiBCdWZmZXItbWVudS1idWZmZXIrc2l6ZS13aWR0aDxicj4hIKCgoCCgoKAgoKCgIEJ1 ZmZlci1tZW51LW1vZGUtd2lkdGggNCkgMSk8YnI+ISCgoKAgoCAocHJpbmMgKGFiYnJldmlhdGUt ZmlsZS1uYW1lIChudGggNSBidWZmZXIpKSkpPGJyPiEgoKCgIChwcmluYyAmcXVvdDtcbiZxdW90 OykpPGJyPgoKIaCgoKCgoCAoQnVmZmVyLW1lbnUtbW9kZSk8YnI+IaCgoKCgoCAod2hlbiBCdWZm ZXItbWVudS11c2UtaGVhZGVyLWxpbmU8YnI+ISCgoKAgKHNldHEgaGVhZGVyLWxpbmUtZm9ybWF0 IGhlYWRlcikpPGJyPiGgoKCgoKAgOzsgREVTSVJFRC1QT0lOVCBkb2VzbiYjMzk7dCBoYXZlIHRv IGJlIHNldDsgaXQgaXMgbm90IHdoZW4gdGhlPGJyPiGgoKCgoKAgOzsgY3VycmVudCBidWZmZXIg aXMgbm90IGRpc3BsYXllZCBmb3Igc29tZSByZWFzb24uPGJyPgoKIaCgoKCgoCAoYW5kIGRlc2ly ZWQtcG9pbnQ8YnI+ISCgoKAgoKAgKGdvdG8tY2hhciBkZXNpcmVkLXBvaW50KSk8YnI+IaCgoKCg oCAoc2V0cSBCdWZmZXItbWVudS1maWxlcy1vbmx5IGZpbGVzLW9ubHkpPGJyPiGgoKCgoKAgKHNl dHEgQnVmZmVyLW1lbnUtLWJ1ZmZlcnMgYnVmZmVyLWxpc3QpPGJyPiGgoKCgoKAgKHNldC1idWZm ZXItbW9kaWZpZWQtcCBuaWwpPGJyPiGgoKCgoKAgKGN1cnJlbnQtYnVmZmVyKSkpKTxicj4KCqAg PGJyPqAgOzs7IGJ1ZmYtbWVudS5lbCBlbmRzIGhlcmU8YnI+LS0tIDgwNyw5NTAgLS0tLTxicj6g oKCgoKCgIChzZXRxIGhlYWRlciAoY29uY2F0IChwcm9wZXJ0aXplICZxdW90OyAmcXVvdDsgJiMz OTtkaXNwbGF5ICYjMzk7KHNwYWNlIDphbGlnbi10byAwKSk8YnI+oCCgoKAgoKCgIKCgoCCgoCBo ZWFkZXIpKSk8YnI+oKCgoKAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRl ICZxdW90OypCdWZmZXIgTGlzdComcXVvdDspPGJyPgoKIaCgoKCgoCAobGV0ICgobGluZS1udW1i ZXIgKGxpbmUtbnVtYmVyLWF0LXBvcykpPGJyPiGgoKCgoKCgoKCgoKAgKGNvbHVtbi1udW1iZXIg KGN1cnJlbnQtY29sdW1uKSkpPGJyPiGgoKCgoKCgoCAobWVzc2FnZSAoY29uY2F0ICZxdW90O2xp bmU6ICZxdW90OyAobnVtYmVyLXRvLXN0cmluZyBsaW5lLW51bWJlcikgJnF1b3Q7XHRjb2w6ICZx dW90OyAobnVtYmVyLXRvLXN0cmluZyBjb2x1bW4tbnVtYmVyKSkpPGJyPgoKIaCgoKCgoKCgIChz ZXRxIGJ1ZmZlci1yZWFkLW9ubHkgbmlsKTxicj4hoKCgoKCgoKAgKGVyYXNlLWJ1ZmZlcik8YnI+ IaCgoKCgoKCgIChzZXRxIHN0YW5kYXJkLW91dHB1dCAoY3VycmVudC1idWZmZXIpKTxicj4hoKCg oKCgoKAgOzsgRm9yY2UgTDJSIGRpcmVjdGlvbiwgdG8gYXZvaWQgbWVzc2luZyB0aGUgZGlzcGxh eSBpZiB0aGU8YnI+IaCgoKCgoKCgIDs7IGZpcnN0IGJ1ZmZlciBpbiB0aGUgbGlzdCBoYXBwZW5z IHRvIGJlZ2luIHdpdGggYSBzdHJvbmcgUjJMPGJyPgoKIaCgoKCgoKCgIDs7IGNoYXJhY3Rlci48 YnI+IaCgoKCgoKCgIChzZXRxIGJpZGktcGFyYWdyYXBoLWRpcmVjdGlvbiAmIzM5O2xlZnQtdG8t cmlnaHQpPGJyPiGgoKCgoKCgoCAodW5sZXNzIEJ1ZmZlci1tZW51LXVzZS1oZWFkZXItbGluZTxi cj4hoKCgoKCgoKCgoCA7OyBVc2UgVSsyMDE0IChFTSBEQVNIKSB0byB1bmRlcmxpbmUgaWYgcG9z c2libGUsIGVsc2UgdXNlIEFTQ0lJPGJyPgohoKCgoKCgoKCgoCA7OyAoaS5lLiBVKzAwMkQsIEhZ UEhFTi1NSU5VUykuPGJyPgohoKCgoKCgoKCgoCAobGV0ICgodW5kZXJsaW5lIChpZiAoY2hhci1k aXNwbGF5YWJsZS1wID9cdTIwMTQpID9cdTIwMTQgPy0pKSk8YnI+IaCgoKCgoKCgoKCgoCAoaW5z ZXJ0IGhlYWRlcjxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKAgKGFwcGx5ICYjMzk7c3RyaW5nPGJy PiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKG1hcGNhciAobGFtYmRhIChjKTxicj4hoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCAoaWYgKG1lbXEgYyAmIzM5Oyg/XG4g P1xzKSkgYyB1bmRlcmxpbmUpKTxicj4KCiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoCBoZWFkZXIpKSkpKTxicj4hoKCgoKCgoKAgOzsgQ29sbGVjdCBpbmZvIGZvciBldmVyeSBi dWZmZXIgd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4uPGJyPiGgoKCgoKCgoCAoZG9saXN0IChidWZm ZXIgKG9yIGJ1ZmZlci1saXN0PGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIChidWZm ZXItbGlzdDxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKHdoZW4gQnVmZmVyLW1l bnUtdXNlLWZyYW1lLWJ1ZmZlci1saXN0PGJyPgoKIaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKAgKHNlbGVjdGVkLWZyYW1lKSkpKSk8YnI+IaCgoKCgoKCgoKAgKHdpdGgtY3VycmVudC1i dWZmZXIgYnVmZmVyPGJyPiGgoKCgoKCgoKCgoKAgKGxldCAoKG5hbWUgKGJ1ZmZlci1uYW1lKSk8 YnI+IaCgoKCgoKCgoKCgoKCgoKCgoCAoZmlsZSBidWZmZXItZmlsZS1uYW1lKSk8YnI+IaCgoKCg oKCgoKCgoKCgICh1bmxlc3MgKGFuZCAobm90IGJ1ZmZlci1saXN0KTxicj4KCiGgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKAgKG9yPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDs7 IERvbiYjMzk7dCBtZW50aW9uIGludGVybmFsIGJ1ZmZlcnMuPGJyPiGgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgIChhbmQgKHN0cmluZz0gKHN1YnN0cmluZyBuYW1lIDAgMSkgJnF1b3Q7ICZx dW90OykgKG51bGwgZmlsZSkpPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDs7IE1h eWJlIGRvbiYjMzk7dCBtZW50aW9uIGJ1ZmZlcnMgd2l0aG91dCBmaWxlcy48YnI+CgohoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoCAoYW5kIGZpbGVzLW9ubHkgKG5vdCBmaWxlKSk8YnI+IaCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKHN0cmluZz0gbmFtZSAmcXVvdDsqQnVmZmVyIExp c3QqJnF1b3Q7KSkpPGJyPiGgoKCgoKCgoKCgoKCgoKCgIDs7IE90aGVyd2lzZSBvdXRwdXQgaW5m by48YnI+IaCgoKCgoKCgoKCgoKCgoKAgKGxldCAoKG1vZGUgKGNvbmNhdCAoZm9ybWF0LW1vZGUt bGluZSBtb2RlLW5hbWUgbmlsIG5pbCBidWZmZXIpPGJyPgoKIaCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoCAoaWYgbW9kZS1saW5lLXByb2Nlc3M8YnI+IaCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKGZvcm1hdC1tb2RlLWxpbmUgbW9kZS1saW5lLXBy b2Nlc3M8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKAgbmlsIG5pbCBidWZmZXIpKSkpPGJyPgoKIaCgoKCgoKCgoKCgoKCgoKCgoKCg oKAgKGJpdHMgKHN0cmluZzxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKGlmIChl cSBidWZmZXIgb2xkLWJ1ZmZlcikgPy4gP1xzKTxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKAgOzsgSGFuZGxlIHJlYWRvbmx5IHN0YXR1cy6gIFRoZSBvdXRwdXQgYnVmZmVyPGJyPiGg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCA7OyBpcyBzcGVjaWFsIGNhc2VkIHRvIGFwcGVh ciByZWFkb25seTsgaXQgaXM8YnI+CgohoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgOzsg YWN0dWFsbHkgbWFkZSBzbyBhdCBhIGxhdGVyIGRhdGUuPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoCAoaWYgKG9yIChlcSBidWZmZXIgc3RhbmRhcmQtb3V0cHV0KTxicj4hoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCBidWZmZXItcmVhZC1vbmx5KTxicj4hoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgID8lID9ccyk8YnI+CgohoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKAgOzsgSWRlbnRpZnkgbW9kaWZpZWQgYnVmZmVycy48YnI+IaCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIChpZiAoYnVmZmVyLW1vZGlmaWVkLXApID8qID9ccyk8 YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIDs7IFNwYWNlIHNlcGFyYXRvci48YnI+ IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgID9ccykpKTxicj4KCiGgoKCgoKCgoKCgoKCg oKCgoKAgKHVubGVzcyBmaWxlPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoCA7OyBObyB2aXNpdGVk IGZpbGUuoCBDaGVjayBsb2NhbCB2YWx1ZSBvZjxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKAgOzsg bGlzdC1idWZmZXJzLWRpZWN0b3J5IGFuZCwgZm9yIEluZm8gYnVmZmVycyw8YnI+IaCgoKCgoKCg oKCgoKCgoKCgoKCgIDs7IEluZm8tY3VycmVudC1maWxlLjxicj4KCiGgoKCgoKCgoKCgoKCgoKCg oKCgoCAoY29uZCAoKGFuZCAoYm91bmRwICYjMzk7bGlzdC1idWZmZXJzLWRpcmVjdG9yeSk8YnI+ IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIGxpc3QtYnVmZmVycy1kaXJlY3Rvcnkp PGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKHNldHEgZmlsZSBsaXN0LWJ1ZmZlcnMt ZGlyZWN0b3J5KSk8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgICgoZXEgbWFqb3ItbW9k ZSAmIzM5O0luZm8tbW9kZSk8YnI+CgohoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIChzZXRx IGZpbGUgSW5mby1jdXJyZW50LWZpbGUpPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAg KGNvbmQ8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKChlcXVhbCBmaWxlICZxdW90 O2RpciZxdW90Oyk8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIChzZXRxIGZpbGUg JnF1b3Q7KkluZm8gRGlyZWN0b3J5KiZxdW90OykpPGJyPgoKIaCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKAgKChlcSBmaWxlICYjMzk7YXByb3Bvcyk8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgIChzZXRxIGZpbGUgJnF1b3Q7KkluZm8gQXByb3BvcyomcXVvdDspKTxicj4hoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCAoKGVxIGZpbGUgJiMzOTtoaXN0b3J5KTxicj4hoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKHNldHEgZmlsZSAmcXVvdDsqSW5mbyBIaXN0b3J5 KiZxdW90OykpPGJyPgoKIaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKChlcSBmaWxlICYj Mzk7dG9jKTxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKHNldHEgZmlsZSAmcXVv dDsqSW5mbyBUT0MqJnF1b3Q7KSk8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKChu b3QgKHN0cmluZ3AgZmlsZSkpoCA7OyBhdm9pZCBlcnJvcnM8YnI+IaCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgIChzZXRxIGZpbGUgbmlsKSk8YnI+CgohoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoCAodDxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKHNldHEgZmlsZSAo Y29uY2F0ICZxdW90OygmcXVvdDs8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoCAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBmaWxlKTxicj4hoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgICZxdW90OykgJnF1b3Q7 PGJyPgoKIaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCBJ bmZvLWN1cnJlbnQtbm9kZSkpKSkpKSk8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoCAocHVzaCAobGlz dCBidWZmZXIgYml0cyBuYW1lIChidWZmZXItc2l6ZSkgbW9kZSBmaWxlKTxicj4hoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgIGxpc3QpKSkpKSk8YnI+IaCgoKCgoKCgIDs7IFByZXNlcnZlIHRoZSBv cmlnaW5hbCBidWZmZXItbGlzdCBvcmRlcmluZywganVzdCBpbiBjYXNlLjxicj4KCiGgoKCgoKCg oCAoc2V0cSBsaXN0IChucmV2ZXJzZSBsaXN0KSk8YnI+IaCgoKCgoKCgIDs7IFBsYWNlIHRoZSBi dWZmZXJzJiMzOTtzIGluZm8gaW4gdGhlIG91dHB1dCBidWZmZXIsIHNvcnRlZCBpZiBuZWNlc3Nh cnkuPGJyPiGgoKCgoKCgoCAoZG9saXN0IChidWZmZXI8YnI+IaCgoKCgoKCgoKCgoKCgoKCgIChp ZiBCdWZmZXItbWVudS1zb3J0LWNvbHVtbjxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgIChzb3J0 IGxpc3Q8YnI+CgohoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIChpZiAoZXEgQnVmZmVyLW1l bnUtc29ydC1jb2x1bW4gMyk8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKGxh bWJkYSAoYSBiKTxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgICgmbHQ7IChu dGggQnVmZmVyLW1lbnUtc29ydC1jb2x1bW4gYSk8YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoCAobnRoIEJ1ZmZlci1tZW51LXNvcnQtY29sdW1uIGIpKSk8YnI+CgohoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKGxhbWJkYSAoYSBiKTxicj4hoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoCAoc3RyaW5nJmx0OyAobnRoIEJ1ZmZlci1tZW51LXNvcnQtY29s dW1uIGEpPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIChudGgg QnVmZmVyLW1lbnUtc29ydC1jb2x1bW4gYikpKSkpPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgIGxp c3QpKTxicj4KCiGgoKCgoKCgoKCgIChpbnNlcnQgKGNhZHIgYnVmZmVyKTxicj4hoKCgoKCgoKCg oKCgoKCgoKCgIDs7IFB1dCB0aGUgYnVmZmVyIG5hbWUgaW50byBhIHRleHQgcHJvcGVydHk8YnI+ IaCgoKCgoKCgoKCgoKCgoKCgoCA7OyBzbyB3ZSBkb24mIzM5O3QgaGF2ZSB0byBleHRyYWN0IGl0 IGZyb20gdGhlIHRleHQuPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKAgOzsgVGhpcyB3YXkgd2UgYXZv aWQgcHJvYmxlbXMgd2l0aCB1bnVzdWFsIGJ1ZmZlciBuYW1lcy48YnI+CgohoKCgoKCgoKCgoKCg oKCgoKCgIChsZXQgKChuYW1lIChudGggMiBidWZmZXIpKTxicj4hoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgIChzaXplIChpbnQtdG8tc3RyaW5nIChudGggMyBidWZmZXIpKSkpPGJyPiGgoKCgoKCg oKCgoKCgoKCgoKCgoCAoQnVmZmVyLW1lbnUtYnVmZmVyK3NpemUgbmFtZSBzaXplPGJyPiGgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgYChidWZmZXItbmFtZSAs bmFtZTxicj4KCiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoCBidWZmZXIgLChjYXIgYnVmZmVyKTxicj4hoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgZm9udC1sb2NrLWZhY2Ug YnVmZmVyLW1lbnUtYnVmZmVyPGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCBtb3VzZS1mYWNlIGhpZ2hsaWdodDxicj4KCiGgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCBo ZWxwLWVjaG88YnI+IaCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgICwoaWYgKCZndDs9IChsZW5ndGggbmFtZSk8YnI+IaCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg ICgtIEJ1ZmZlci1tZW51LWJ1ZmZlcitzaXplLXdpZHRoPGJyPgoKIaCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgICht YXggKGxlbmd0aCBzaXplKSAzKTxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgMikpPGJyPiGgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgIG5h bWU8YnI+CgohoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKAgJnF1b3Q7bW91c2UtMjogc2VsZWN0IHRoaXMgYnVmZmVyJnF1b3Q7KSkp KTxicj4hoKCgoKCgoKCgoKCgoKCgoKCgICZxdW90O6AgJnF1b3Q7PGJyPiGgoKCgoKCgoKCgoKCg oKCgoKAgKGlmICgmZ3Q7IChzdHJpbmctd2lkdGggKG50aCA0IGJ1ZmZlcikpIEJ1ZmZlci1tZW51 LW1vZGUtd2lkdGgpPGJyPgoKIaCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKHRydW5jYXRlLXN0cmlu Zy10by13aWR0aCAobnRoIDQgYnVmZmVyKTxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgIEJ1ZmZlci1tZW51LW1vZGUtd2lkdGgpPGJyPiGgoKCgoKCg oKCgoKCgoKCgoKCgoCAobnRoIDQgYnVmZmVyKSkpPGJyPiGgoKCgoKCgoKCgICh3aGVuIChudGgg NSBidWZmZXIpPGJyPgoKIaCgoKCgoKCgoKCgoCAoaW5kZW50LXRvICgrIEJ1ZmZlci1tZW51LWJ1 ZmZlci1jb2x1bW4gQnVmZmVyLW1lbnUtYnVmZmVyK3NpemUtd2lkdGg8YnI+IaCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgIEJ1ZmZlci1tZW51LW1vZGUtd2lkdGggNCkgMSk8YnI+IaCgoKCgoKCg oKCgoCAocHJpbmMgKGFiYnJldmlhdGUtZmlsZS1uYW1lIChudGggNSBidWZmZXIpKSkpPGJyPiGg oKCgoKCgoKCgIChwcmluYyAmcXVvdDtcbiZxdW90OykpPGJyPgoKIaCgoKCgoKCgIChCdWZmZXIt bWVudS1tb2RlKTxicj4hoKCgoKCgoKAgKHdoZW4gQnVmZmVyLW1lbnUtdXNlLWhlYWRlci1saW5l PGJyPiGgoKCgoKCgoKCgIChzZXRxIGhlYWRlci1saW5lLWZvcm1hdCBoZWFkZXIpKTxicj4hoKCg oKCgoKAgKGxldCAoKGJ1ZmZlci1saXN0LXdpbmRvdyAoZ2V0LXdpbmRvdy13aXRoLXByZWRpY2F0 ZTxicj4hoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAgKGxhbWJkYSAod2luZG93 KTxicj4KCiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCAoc3RyaW5n PSAmcXVvdDsqQnVmZmVyIExpc3QqJnF1b3Q7PGJyPiGgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCAoYnVmZmVyLW5hbWUgKHdpbmRvdy1idWZmZXIgd2lu ZG93KSkpKSkpPGJyPiGgoKCgoKCgoKCgoKCgoCAoY3VycmVudC13aW5kb3cgKHNlbGVjdGVkLXdp bmRvdykpKTxicj4KCiGgoKCgoKCgoKCgICh3aGVuIGJ1ZmZlci1saXN0LXdpbmRvdzxicj4hoKCg oKCgoKCgoKCgIChzZWxlY3Qtd2luZG93IGJ1ZmZlci1saXN0LXdpbmRvdykpPGJyPiGgoKCgoKCg oKCgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpPGJyPiGgoKCgoKCgoKCgIChmb3J3YXJkLWxpbmUg KDEtIGxpbmUtbnVtYmVyKSk8YnI+IaCgoKCgoKCgoKAgKGZvcndhcmQtY2hhciBjb2x1bW4tbnVt YmVyKTxicj4KCiGgoKCgoKCgoKCgICh3aGVuIGJ1ZmZlci1saXN0LXdpbmRvdzxicj4hoKCgoKCg oKCgoKCgIChzZWxlY3Qtd2luZG93IGN1cnJlbnQtd2luZG93KSkpPGJyPiGgoKCgoKCgoCAoc2V0 cSBCdWZmZXItbWVudS1maWxlcy1vbmx5IGZpbGVzLW9ubHkpPGJyPiGgoKCgoKCgoCAoc2V0cSBC dWZmZXItbWVudS0tYnVmZmVycyBidWZmZXItbGlzdCk8YnI+IaCgoKCgoKCgIChzZXQtYnVmZmVy LW1vZGlmaWVkLXAgbmlsKTxicj4KCiGgoKCgoKCgoCAoY3VycmVudC1idWZmZXIpKSkpKTxicj6g IDxicj6gIDs7OyBidWZmLW1lbnUuZWwgZW5kcyBoZXJlPGJyPjxicj4tWmFjaGFyeSBLYW5mZXI8 YnI+PGJyPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gU3VuLCBPY3QgMTYsIDIwMTEg YXQgMTE6NTAgQU0sIFN0ZWZhbiBNb25uaWVyIDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0i bWFpbHRvOm1vbm5pZXJAaXJvLnVtb250cmVhbC5jYSI+bW9ubmllckBpcm8udW1vbnRyZWFsLmNh PC9hPiZndDs8L3NwYW4+IHdyb3RlOjxicj4KCjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90 ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3Bh ZGRpbmctbGVmdDoxZXgiPiZndDsgISCgIChkaXNwbGF5LWJ1ZmZlciAobGlzdC1idWZmZXJzLW5v c2VsZWN0IGZpbGVzLW9ubHkpKSk8YnI+ClsuLi5dPGJyPgo8ZGl2IGNsYXNzPSJpbSI+Jmd0OyAh IKAgKGlmIChzdHJpbmc9IChidWZmZXItbmFtZSk8YnI+CiZndDsgISCgIKAgoCCgIKAgoCCgIKAm cXVvdDsqQnVmZmVyIExpc3QqJnF1b3Q7KTxicj4KJmd0OyAhIKAgoCCgIChyZXZlcnQtYnVmZmVy KTxicj4KPC9kaXY+Jmd0OyAhIKAgoCAoZGlzcGxheS1idWZmZXIgKGxpc3QtYnVmZmVycy1ub3Nl bGVjdCBmaWxlcy1vbmx5KSkpKTxicj4KPGJyPgpJIGRvbiYjMzk7dCB0aGluayBjYWxsaW5nIHJl dmVydC1idWZmZXIgaXMgcmlnaHQuIKBNdWNoIGJldHRlciB3b3VsZCBiZSBmb3I8YnI+Cmxpc3Qt YnVmZmVyLW5vc2VsZWN0IHRvIHRyeSB0byBwcmVzZXJ2ZSBwb2ludCB3aGVuIHJldXNpbmcgYSBi dWZmZXI8YnI+CnJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3IG9uZS48YnI+CjxzcGFuIGNsYXNz PSJIT0VuWmIiPjxmb250IGNvbG9yPSIjODg4ODg4Ij48YnI+Cjxicj4KIKAgoCCgIKBTdGVmYW48 YnI+CjwvZm9udD48L3NwYW4+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj4K --e89a8ff1c094e245e904b3b74bf1-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 07 04:22:08 2012 Received: (at control) by debbugs.gnu.org; 7 Jan 2012 09:22:08 +0000 Received: from localhost ([127.0.0.1]:47731 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RjSTX-00073o-KZ for submit@debbugs.gnu.org; Sat, 07 Jan 2012 04:22:08 -0500 Received: from fencepost.gnu.org ([140.186.70.10]:36343 ident=Debian-exim) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1RjSTW-00073i-Gq for control@debbugs.gnu.org; Sat, 07 Jan 2012 04:22:07 -0500 Received: from bb220-255-176-96.singnet.com.sg ([220.255.176.96]:47845 helo=furball) by fencepost.gnu.org with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1RjSTU-0003H8-4X for control@debbugs.gnu.org; Sat, 07 Jan 2012 04:22:04 -0500 From: Chong Yidong To: control@debbugs.gnu.org Subject: tags 9761 + patch Date: Sat, 07 Jan 2012 17:21:51 +0800 Message-ID: <87fwfrvpe8.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -4.2 (----) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -4.2 (----) tags 9761 + patch thanks From unknown Mon Jun 23 04:14:44 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9761: proposed list-buffers change -- revert buffer if point is in *Buffer List* buffer Resent-From: Lars Ingebrigtsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 25 Feb 2016 06:41:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9761 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Zachary Kanfer Cc: 9761@debbugs.gnu.org Received: via spool by 9761-submit@debbugs.gnu.org id=B9761.14563824314433 (code B ref 9761); Thu, 25 Feb 2016 06:41:02 +0000 Received: (at 9761) by debbugs.gnu.org; 25 Feb 2016 06:40:31 +0000 Received: from localhost ([127.0.0.1]:44632 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aYpbD-00019R-3h for submit@debbugs.gnu.org; Thu, 25 Feb 2016 01:40:31 -0500 Received: from hermes.netfonds.no ([80.91.224.195]:41291) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aYpbB-00019J-LU for 9761@debbugs.gnu.org; Thu, 25 Feb 2016 01:40:29 -0500 Received: from [175.103.25.178] (helo=mouse) by hermes.netfonds.no with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1aYpan-00053J-O9; Thu, 25 Feb 2016 07:40:06 +0100 From: Lars Ingebrigtsen References: Date: Thu, 25 Feb 2016 17:10:01 +1030 In-Reply-To: (Zachary Kanfer's message of "Sat, 15 Oct 2011 00:22:43 -0400") Message-ID: <87y4a9uwce.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-MailScanner-ID: 1aYpan-00053J-O9 X-Netfonds-MailScanner: Found to be clean X-Netfonds-MailScanner-From: larsi@gnus.org MailScanner-NULL-Check: 1456987206.73279@FZricywg/KMLhUc5/7/8jA X-Spam-Status: No X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) Zachary Kanfer writes: > The command list-buffers always puts point at the end of the > buffer. This patch changes the list-buffers command to simply revert > the buffer if point is inside the *Buffer List* buffer. Since point is > kept at the same line, the user can more easily see what changes have > occurred. I think it makes sense to have `M-x list-buffers' always place the point in the same place. If the user wants to update the list, then the `g' command is available and handy, and doesn't move the point around. So I'm closing this bug report. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 25 01:40:38 2016 Received: (at control) by debbugs.gnu.org; 25 Feb 2016 06:40:38 +0000 Received: from localhost ([127.0.0.1]:44635 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aYpbK-00019k-Ap for submit@debbugs.gnu.org; Thu, 25 Feb 2016 01:40:38 -0500 Received: from hermes.netfonds.no ([80.91.224.195]:41297) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aYpbI-00019d-LO for control@debbugs.gnu.org; Thu, 25 Feb 2016 01:40:36 -0500 Received: from [175.103.25.178] (helo=mouse) by hermes.netfonds.no with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1aYpav-00055f-3A for control@debbugs.gnu.org; Thu, 25 Feb 2016 07:40:13 +0100 Date: Thu, 25 Feb 2016 17:10:09 +1030 Message-Id: <87wpptuwc6.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #9761 X-MailScanner-ID: 1aYpav-00055f-3A X-Netfonds-MailScanner: Found to be clean X-Netfonds-MailScanner-From: larsi@gnus.org MailScanner-NULL-Check: 1456987214.58162@YQDh5dyRK0acrze9Fu8gnQ X-Spam-Status: No X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) tags 9761 wontfix close 9761