From unknown Sun Jun 22 04:13:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19755: python.el: native completion: more problems (and solutions) Resent-From: Carlos Pita Original-Sender: "Debbugs-submit" Resent-CC: galli.87@gmail.com, bug-gnu-emacs@gnu.org Resent-Date: Tue, 03 Feb 2015 12:41:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 19755 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 19755@debbugs.gnu.org Cc: galli.87@gmail.com X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: galli.87@gmail.com Received: via spool by submit@debbugs.gnu.org id=B.142296725921901 (code B ref -1); Tue, 03 Feb 2015 12:41:02 +0000 Received: (at submit) by debbugs.gnu.org; 3 Feb 2015 12:40:59 +0000 Received: from localhost ([127.0.0.1]:60960 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YIcmo-0005hA-DW for submit@debbugs.gnu.org; Tue, 03 Feb 2015 07:40:59 -0500 Received: from eggs.gnu.org ([208.118.235.92]:37281) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YIcml-0005gw-Sr for submit@debbugs.gnu.org; Tue, 03 Feb 2015 07:40:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YIcme-0004ra-Kh for submit@debbugs.gnu.org; Tue, 03 Feb 2015 07:40:50 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:60355) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcme-0004rW-HA for submit@debbugs.gnu.org; Tue, 03 Feb 2015 07:40:48 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38952) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcmb-0004bZ-MI for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:40:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YIcmZ-0004pa-KF for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:40:45 -0500 Received: from mail-la0-x235.google.com ([2a00:1450:4010:c03::235]:41452) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcmZ-0004p3-3n for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:40:43 -0500 Received: by mail-la0-f53.google.com with SMTP id gq15so51126956lab.12 for ; Tue, 03 Feb 2015 04:40:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=iaAqTuhg3YDwG5NlSISMiVtNAK+0wm70M5ledOscVUQ=; b=LAZEiOud818o89BxlmGiaJdxCcBeoVvgJtuGei6Os24f3/GBXyYvN4iGXLastayWu8 UajQuLicRqgtgJsgRyVLvS58FSAJl9lFyVlqK9Ld73X0O782ajXkVks05n59FHC6Bljf jEuqlbV6FCuu6rIJcYpSnE/DLmm41VbQswxcZJGOadPJcqP1XXVu1Rt/+N5u5Sfpyu+d KjG5X0Gw4ZsSBVhrs3CB4M3kKydPI9N739vmbSLvTm+wTe6Gt9lMNyHe/mzrKpeG8as+ +a2lbYrTDNmOjTu4IX9Qr1ZjtT4qe12CWnY0owbtRHSqORSGNyxCAHPrXCsuxzP6XtaZ e8Dg== X-Received: by 10.152.226.134 with SMTP id rs6mr15429266lac.98.1422967242143; Tue, 03 Feb 2015 04:40:42 -0800 (PST) MIME-Version: 1.0 Received: by 10.112.124.202 with HTTP; Tue, 3 Feb 2015 04:40:21 -0800 (PST) From: Carlos Pita Date: Tue, 3 Feb 2015 09:40:21 -0300 Message-ID: Content-Type: multipart/mixed; boundary=001a1134dbbcff81a5050e2e6052 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: -4.0 (----) --001a1134dbbcff81a5050e2e6052 Content-Type: text/plain; charset=UTF-8 X-Debbugs-CC: galli.87@gmail.com Tags: patch Hi Fabian, besides the ones l have already reported and patched in [1] there are some remaining problems with the native completion approach: 1) The waiting timeout is too low for import completions, as imports take a bit more time than simple dirs. But making the timeout larger is bad for cases when there really is no completion at all for the current prefix. I want to avoid this trade off. 2) When all the completions share a common prefix, readline completes inline up to this common prefix, so the delete-line-command sequence length is wrong. For example, say the current prefix is "x" and that its completions are "xxy", "xxz". Readline will complete "xx" inline, but delete-line-command will only delete one "x". 3) A pager could be enabled to show long lists of completions. My solutions for 1 and 2 simply extend the dummy completion hack I introduced in [1]: 1') Ensure there is always one completion at least (a fortiori, I'm ensuring there are at least two completions, to force listing instead of inline completion). So we can set a larger timeout *just for the first* accept-process-output without the risk of waiting too much when there is really no completion available. 2') Ensure there is a completion with a different prefix, by providing a dummy randomly prefixed completion. For 3 I just disabled paged completions for readline, but I don't know how to do that for libedit. Attached is a patch with all the described changes, applied on top of my patch for [1]. Anyway, it should be easy to selectively apply the changes manually. All in all I find the solution pretty simple and it leverages my previous trick. The completer is a bit more complex now as it has to keep track of a couple of states in order to generate the correct sequence of completions (dummies included): def completer(text, state, real_completer=readline.get_completer(), last_state=[None]): completion = None if state == 0: last_state[0] = None if last_state[0] is None: completion = real_completer(text, state) if not completion: last_state[0] = state if (state == last_state[0] or state - 1 == last_state[0] == 0): import random completion = '%s%d__dummy_completion__' % ( text, random.randint(1000, 10000)) return completion readline.set_completer(completer) Cheers -- Carlos [1] http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19736 --001a1134dbbcff81a5050e2e6052 Content-Type: text/x-patch; charset=US-ASCII; name="native-compl.patch" Content-Disposition: attachment; filename="native-compl.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i5pa0ixp0 ZGlmZiAtLWdpdCBhLy5lbWFjcy5kL2xpc3AvcHl0aG9uLmVsIGIvLmVtYWNzLmQvbGlzcC9weXRo b24uZWwKaW5kZXggY2E2OWI2OC4uMTUwNDFhMyAxMDA2NDQKLS0tIGEvLmVtYWNzLmQvbGlzcC9w eXRob24uZWwKKysrIGIvLmVtYWNzLmQvbGlzcC9weXRob24uZWwKQEAgLTMwNzEsMjggKzMwNzEs MzggQEAgV2hlbiBhIG1hdGNoIGlzIGZvdW5kLCBuYXRpdmUgY29tcGxldGlvbiBpcyBkaXNhYmxl ZC4iCiAgICJUcnkgdG8gc2V0dXAgbmF0aXZlIGNvbXBsZXRpb24sIHJldHVybiBub24tbmlsIG9u IHN1Y2Nlc3MuIgogICAobGV0ICgocHJvY2VzcyAocHl0aG9uLXNoZWxsLWdldC1wcm9jZXNzKSkp CiAgICAgKHB5dGhvbi1zaGVsbC1zZW5kLXN0cmluZwotICAgICAoZnVuY2FsbAotICAgICAgJ21h cGNvbmNhdAotICAgICAgIydpZGVudGl0eQotICAgICAgKGxpc3QKLSAgICAgICAidHJ5OiIKLSAg ICAgICAiICAgIGltcG9ydCByZWFkbGluZSIKLSAgICAgICAiICAgIGRlZiBjb21wbGV0ZXIodGV4 dCwgc3RhdGUsIGM9cmVhZGxpbmUuZ2V0X2NvbXBsZXRlcigpKToiCi0gICAgICAgIiAgICAgICAg Y29tcGxldGlvbiA9IGModGV4dCwgc3RhdGUpIgotICAgICAgICIgICAgICAgIGlmIG5vdCBjb21w bGV0aW9uIGFuZCBzdGF0ZSA9PSAxOiIKLSAgICAgICAiICAgICAgICAgICAgcmV0dXJuIHRleHQg KyAnX19kdW1teV9jb21wbGV0aW9uX18nIgotICAgICAgICIgICAgICAgIGVsc2U6IgotICAgICAg ICIgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbiIKLSAgICAgICAiICAgIHJlYWRsaW5lLnNl dF9jb21wbGV0ZXIoY29tcGxldGVyKSIKLSAgICAgICAiICAgIGlmIHJlYWRsaW5lLl9fZG9jX18g YW5kICdsaWJlZGl0JyBpbiByZWFkbGluZS5fX2RvY19fOiIKLSAgICAgICAiICAgICAgICByZWFk bGluZS5wYXJzZV9hbmRfYmluZCgnYmluZCBeSSBybF9jb21wbGV0ZScpIgotICAgICAgICIgICAg ZWxzZToiCi0gICAgICAgIiAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29t cGxldGUnKSIKLSAgICAgICAiICAgIHByaW50ICgncHl0aG9uLmVsOiByZWFkbGluZSBpcyBhdmFp bGFibGUnKSIKLSAgICAgICAiICAgIGRlbCBjb21wbGV0ZXIsIHJlYWRsaW5lICAjIFNvbWUgY2xl YW51cCIKLSAgICAgICAiZXhjZXB0OiIKLSAgICAgICAiICAgIHByaW50ICgncHl0aG9uLmVsOiBy ZWFkbGluZSBub3QgYXZhaWxhYmxlJykiKQotICAgICAgIlxuIikKKyAgICAgOzsgRW5zdXJlIGF0 IGxlYXN0IHR3byBjb21wbGV0aW9uczoKKyAgICAgOzsgIC0gUmFuZG9tIHByZWZpeCBhdm9pZHMg Y29tbW9uIHByZWZpeCBpbmxpbmUgY29tcGxldGlvbgorICAgICA7OyAgLSBUd28gY29tcGxldGlv bnMgYXZvaWQgc2luZ2xlIGlubGluZSBjb21wbGV0aW9uCisgICAgIDs7ICAtIE9uZSBzdXJlIGNv bXBsZXRpb24gYXZvaWRzIHdhaXRpbmcgb3V0cHV0IHRpbWVvdXQKKyAgICAgInRyeToKKyAgICBp bXBvcnQgcmVhZGxpbmUKKyAgICBkZWYgY29tcGxldGVyKHRleHQsIHN0YXRlLAorICAgICAgICAg ICAgICAgICAgcmVhbF9jb21wbGV0ZXI9cmVhZGxpbmUuZ2V0X2NvbXBsZXRlcigpLAorICAgICAg ICAgICAgICAgICAgbGFzdF9zdGF0ZT1bTm9uZV0pOgorICAgICAgICBjb21wbGV0aW9uID0gTm9u ZQorICAgICAgICBpZiBzdGF0ZSA9PSAwOgorICAgICAgICAgICAgbGFzdF9zdGF0ZVswXSA9IE5v bmUKKyAgICAgICAgaWYgbGFzdF9zdGF0ZVswXSBpcyBOb25lOgorICAgICAgICAgICAgY29tcGxl dGlvbiA9IHJlYWxfY29tcGxldGVyKHRleHQsIHN0YXRlKQorICAgICAgICAgICAgaWYgbm90IGNv bXBsZXRpb246CisgICAgICAgICAgICAgICAgbGFzdF9zdGF0ZVswXSA9IHN0YXRlCisgICAgICAg IGlmIChzdGF0ZSA9PSBsYXN0X3N0YXRlWzBdIG9yCisgICAgICAgICAgICBzdGF0ZSAtIDEgPT0g bGFzdF9zdGF0ZVswXSA9PSAwKToKKyAgICAgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAg ICAgIGNvbXBsZXRpb24gPSAnJXMlZF9fZHVtbXlfY29tcGxldGlvbl9fJyAlICgKKyAgICAgICAg ICAgICAgICB0ZXh0LCByYW5kb20ucmFuZGludCgxMDAwLCAxMDAwMCkpCisgICAgICAgIHJldHVy biBjb21wbGV0aW9uCisgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihjb21wbGV0ZXIpCisgICAg aWYgcmVhZGxpbmUuX19kb2NfXyBhbmQgJ2xpYmVkaXQnIGluIHJlYWRsaW5lLl9fZG9jX186Cisg ICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCdiaW5kIF5JIHJsX2NvbXBsZXRlJykKKyAg ICBlbHNlOgorICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgndGFiOiBjb21wbGV0ZScp CisgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCdzZXQgcGFnZS1jb21wbGV0aW9ucyBv ZmYnKQorICAgIHByaW50KCdweXRob24uZWw6IHJlYWRsaW5lIGlzIGF2YWlsYWJsZScpCisgICAg ZGVsIGNvbXBsZXRlciwgcmVhZGxpbmUgICMgRW52IGNsZWFudXAKK2V4Y2VwdDoKKyAgICBwcmlu dCgncHl0aG9uLmVsOiByZWFkbGluZSBub3QgYXZhaWxhYmxlJykiCiAgICAgIHByb2Nlc3MpCiAg ICAgKHB5dGhvbi1zaGVsbC1hY2NlcHQtcHJvY2Vzcy1vdXRwdXQgcHJvY2VzcykKICAgICAod2hl biAoc2F2ZS1leGN1cnNpb24KQEAgLTMyMDYsOSArMzIxNiw3IEBAIGNvbXBsZXRpb24uIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMnY29taW50LXJlZGlyZWN0LWZpbHRlciBvcmlnaW5h bC1maWx0ZXItZm4pKQogICAgICAgICAgICAgICAgIChzZXQtcHJvY2Vzcy1maWx0ZXIgcHJvY2Vz cyAjJ2NvbWludC1yZWRpcmVjdC1maWx0ZXIpKQogICAgICAgICAgICAgICAocHJvY2Vzcy1zZW5k LXN0cmluZyBwcm9jZXNzIGlucHV0LXRvLXNlbmQpCi0gICAgICAgICAgICAgIChhY2NlcHQtcHJv Y2Vzcy1vdXRwdXQKLSAgICAgICAgICAgICAgIHByb2Nlc3MKLSAgICAgICAgICAgICAgIHB5dGhv bi1zaGVsbC1jb21wbGV0aW9uLW5hdGl2ZS1vdXRwdXQtdGltZW91dCkKKyAgICAgICAgICAgICAg KGFjY2VwdC1wcm9jZXNzLW91dHB1dCBwcm9jZXNzIDAuMykKICAgICAgICAgICAgICAgOzsgWFhY OiBjYW4ndCB1c2UgYHB5dGhvbi1zaGVsbC1hY2NlcHQtcHJvY2Vzcy1vdXRwdXQnCiAgICAgICAg ICAgICAgIDs7IGhlcmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBvbiBob3cgb3V0 cHV0CiAgICAgICAgICAgICAgIDs7IGVuZHMuICBUaGUgd29ya2Fyb3VuZCBoZXJlIGlzIHRvIGNh bGwKQEAgLTMyMTcsMTMgKzMyMjUsMTIgQEAgY29tcGxldGlvbi4iCiAgICAgICAgICAgICAgICh3 aGlsZSAoYWNjZXB0LXByb2Nlc3Mtb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vz cwogICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLW5hdGl2ZS1v dXRwdXQtdGltZW91dCkpCi0gICAgICAgICAgICAgIChjbC1yZW1vdmUKLSAgICAgICAgICAgICAg IChjb25jYXQgaW5wdXQgIl9fZHVtbXlfY29tcGxldGlvbl9fIikKKyAgICAgICAgICAgICAgKGNs LXJlbW92ZS1pZgorICAgICAgICAgICAgICAgKGxhbWJkYSAoYykgKHN0cmluZy1tYXRjaCAiX19k dW1teV9jb21wbGV0aW9uX18iIGMpKQogICAgICAgICAgICAgICAgKHNwbGl0LXN0cmluZwogICAg ICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMKICAgICAgICAgICAg ICAgICAgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCi0gICAgICAgICAgICAgICAgc2VwYXJhdG9y cyB0KQotICAgICAgICAgICAgICAgOnRlc3QgIydzdHJpbmc9KSkpCisgICAgICAgICAgICAgICAg c2VwYXJhdG9ycyB0KSkpKQogICAgICAgICAoc2V0LXByb2Nlc3MtZmlsdGVyIHByb2Nlc3Mgb3Jp Z2luYWwtZmlsdGVyLWZuKSkpKSkKIAogKGRlZnVuIHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLWdl dC1jb21wbGV0aW9ucyAocHJvY2VzcyBpbXBvcnQgaW5wdXQpCg== --001a1134dbbcff81a5050e2e6052-- From unknown Sun Jun 22 04:13:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19755: Acknowledgement (python.el: native completion: more problems (and solutions)) Resent-From: Carlos Pita Original-Sender: "Debbugs-submit" Resent-CC: galli.87@gmail.com, bug-gnu-emacs@gnu.org Resent-Date: Tue, 03 Feb 2015 16:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19755 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 19755@debbugs.gnu.org Cc: galli.87@gmail.com X-Debbugs-Original-Xcc: galli.87@gmail.com Received: via spool by 19755-submit@debbugs.gnu.org id=B19755.142298227018107 (code B ref 19755); Tue, 03 Feb 2015 16:52:02 +0000 Received: (at 19755) by debbugs.gnu.org; 3 Feb 2015 16:51:10 +0000 Received: from localhost ([127.0.0.1]:33093 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YIggv-0004hz-TC for submit@debbugs.gnu.org; Tue, 03 Feb 2015 11:51:10 -0500 Received: from mail-la0-f54.google.com ([209.85.215.54]:43293) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YIggt-0004hc-2c for 19755@debbugs.gnu.org; Tue, 03 Feb 2015 11:51:07 -0500 Received: by mail-la0-f54.google.com with SMTP id hv19so53209974lab.13 for <19755@debbugs.gnu.org>; Tue, 03 Feb 2015 08:51:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=oar9jEBxiBS5EIkBMTQctdWb6OjVpj0DtrsNk7iKwvI=; b=tUvS/VQSDVeK020KuVWDiW65BtXNJACpvG005eg/+mQtPNDG5UTnH5Oi7jw9bZ18Rn PKoTPE8Z9nowmYFeaqr3elfsWhuPwiRLUt0876+Jra8RNoiKmdbef3yW9uL2jQ6+6qPc Mc2ktEVoWgrwUwYBmboGiuY0ZHl0ZmtZjjc+pxtPrQF7it6w538r7khCd9YnCuaWw/L8 M1OnVCQ5stMnhmwhd1BBWnqZdzczCyAaoQkRHynjkFKj3rK6pJxiqA2WId2ReJeoosKp Q444c9f5NJ9ZhC+6e4zSi2hSrJfAN6eV2X6licMgPhTp/ureCodiXk5K85rZHP2/vy4w dbfg== X-Received: by 10.152.37.106 with SMTP id x10mr26232717laj.52.1422982260937; Tue, 03 Feb 2015 08:51:00 -0800 (PST) MIME-Version: 1.0 Received: by 10.112.124.202 with HTTP; Tue, 3 Feb 2015 08:50:40 -0800 (PST) In-Reply-To: References: From: Carlos Pita Date: Tue, 3 Feb 2015 13:50:40 -0300 Message-ID: Content-Type: text/plain; charset=UTF-8 X-Spam-Score: 0.3 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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.7 (/) X-Debbugs-CC: galli.87@gmail.com After investing some hours on the many border cases of native completion I sadly came to realize that there is a simpler and not so fragile approach: as we're already assuming readline is available, why don't we just get the current readline completer and use it directly? This is not so different from the legacy completion mechanism, except that we don't create the completer but use the same one that readline is using. I think the completion code (legacy and native) could be unified around a completer function and a lot of cruft related to process interaction trickery (timeouts, control char sequences, output parsing, etc.) could be wiped out from the code for good. Am I missing something? Despite having to throw away so many hours of unpleasant work I would like to simplify the completion code and I'm offering to do it myself if you want. Just let me know what do you think about this idea... maybe I'm not seeing an obvious reason why we should go through readline user interface instead of readline programmer interface. On Tue, Feb 3, 2015 at 9:41 AM, GNU bug Tracking System wrote: > Thank you for filing a new bug report with debbugs.gnu.org. > > This is an automatically generated reply to let you know your message > has been received. > > Your message is being forwarded to the package maintainers and other > interested parties for their attention; they will reply in due course. > > As you requested using X-Debbugs-CC, your message was also forwarded to > galli.87@gmail.com > (after having been given a bug report number, if it did not have one). > > Your message has been sent to the package maintainer(s): > bug-gnu-emacs@gnu.org > > If you wish to submit further information on this problem, please > send it to 19755@debbugs.gnu.org. > > Please do not send mail to help-debbugs@gnu.org unless you wish > to report a problem with the Bug-tracking system. > > -- > 19755: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19755 > GNU Bug Tracking System > Contact help-debbugs@gnu.org with problems From unknown Sun Jun 22 04:13:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19755: python.el: native completion: more problems (and solutions) References: In-Reply-To: Resent-From: Carlos Pita Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 05 Feb 2015 14:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19755 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 19755@debbugs.gnu.org Cc: fgallina@gnu.org Received: via spool by 19755-submit@debbugs.gnu.org id=B19755.142314636330859 (code B ref 19755); Thu, 05 Feb 2015 14:27:02 +0000 Received: (at 19755) by debbugs.gnu.org; 5 Feb 2015 14:26:03 +0000 Received: from localhost ([127.0.0.1]:34600 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YJNNZ-00081e-Vl for submit@debbugs.gnu.org; Thu, 05 Feb 2015 09:26:02 -0500 Received: from mail-lb0-f175.google.com ([209.85.217.175]:50840) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YJNNV-00081G-Qt for 19755@debbugs.gnu.org; Thu, 05 Feb 2015 09:25:58 -0500 Received: by mail-lb0-f175.google.com with SMTP id n10so3420749lbv.6 for <19755@debbugs.gnu.org>; Thu, 05 Feb 2015 06:25:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:cc:content-type; bh=4MEtZDKx02HOTd+QXoHt1DVg7gHGM24g0E5b/V6wOtc=; b=UCKv7MLS3opG01/xOBwhIM9wzizto10HuH3rQYYGemvgA77idzB6yOnHi4Fwnb8Q3I 9JuR6ukfZwaMrpNM3hq44VYvuuydt6Iy9UN54uUkuEcnlLpZisZQ5oPs9RbzTN08b+ku /z7GMj/0aP33X3lisRSY5+uYvTfM6HYz/GfkkruChMn0XK2oNSrCmpiy4zuj9D3axCcH +Umcn2OUH6csaE0xGykqmleRfVXaWKQ1hExPLEDSX+Sp1k6HQdQb+fVto9RGW7qBt3j9 /tUcKD3DJPAHk7xOzh4uMWl+ad97WaXmVo36cDjtRNPB5nr5A5rynVVg05PCnAQQlstc 1NtQ== X-Received: by 10.152.181.129 with SMTP id dw1mr295774lac.101.1423146351975; Thu, 05 Feb 2015 06:25:51 -0800 (PST) MIME-Version: 1.0 Received: by 10.112.124.202 with HTTP; Thu, 5 Feb 2015 06:25:31 -0800 (PST) From: Carlos Pita Date: Thu, 5 Feb 2015 11:25:31 -0300 Message-ID: Content-Type: text/plain; charset=UTF-8 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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.7 (/) Ok, after a conversation with Fabian I understood which are the shortcomings of the legacy mechanism: 1) While inside a block of code asking a completion to the shell makes it believe that you're not inside the block anymore. 2) Spurious prompt number increments take place each time a completion is requested to the shell. So it's not just a matter of the completer being the preinstalled by the shell or some other one that python.el instantiates itself during the setup phase. Another solution could be to open a simple python helper thread that listens on a socket. This thread could provide documentation for eldoc or for help buffers (I'm about to post a RFE for this feature), besides the completions. Another adventage is that it will be possible to unify the completion mechanisms again. What do you think? Cheers -- Carlos From unknown Sun Jun 22 04:13:35 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19755: python.el: native completion: more problems (and solutions) References: In-Reply-To: Resent-From: Carlos Pita Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 06 Feb 2015 02:23:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19755 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 19755@debbugs.gnu.org Cc: =?UTF-8?Q?Fabi=C3=A1n?= Ezequiel Gallina Received: via spool by 19755-submit@debbugs.gnu.org id=B19755.142318936714700 (code B ref 19755); Fri, 06 Feb 2015 02:23:01 +0000 Received: (at 19755) by debbugs.gnu.org; 6 Feb 2015 02:22:47 +0000 Received: from localhost ([127.0.0.1]:35124 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YJYZC-0003oz-Gs for submit@debbugs.gnu.org; Thu, 05 Feb 2015 21:22:47 -0500 Received: from mail-lb0-f176.google.com ([209.85.217.176]:33004) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YJYZA-0003oc-Ct for 19755@debbugs.gnu.org; Thu, 05 Feb 2015 21:22:45 -0500 Received: by mail-lb0-f176.google.com with SMTP id u10so659503lbd.7 for <19755@debbugs.gnu.org>; Thu, 05 Feb 2015 18:22:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:cc:content-type; bh=eivLdXQujWQrsGfOStgNZf+9/9kObCzrNwwTzbwUFu4=; b=TuUMnwj/fo5UEIWIA4eR3c1w6+UzqTddupITMVt1OFdUywt28hm1/3IL1X0HmkjqUT B/P7KkCtvLITnaJs8Jr8l2/W/DhIzdHDiTVvNSo37a6HOoSoAM4WgbCPrlbcrRz+VOYc o3KclxSinaD/nZSNfZvahSX/N/zbJaDJzyyiO4+RHDX7GDnsN14Sxde6Fy8JFUWxHVmw DrK5PYmXH8F3PgpjnT6xoTLpP0c5Vc4O6LMwPIlLKt0v5ODrDvprmKN4bGFDpM690cuP JPzHlgjgEx3DsOly3nJD3pQEG7xpP9GxITcTk59IBmWJ4AN/v8zd74VrQhdMGWH/pEvO Dikg== X-Received: by 10.112.212.42 with SMTP id nh10mr812019lbc.102.1423189358165; Thu, 05 Feb 2015 18:22:38 -0800 (PST) MIME-Version: 1.0 Received: by 10.112.124.202 with HTTP; Thu, 5 Feb 2015 18:22:17 -0800 (PST) From: Carlos Pita Date: Thu, 5 Feb 2015 23:22:17 -0300 Message-ID: Content-Type: text/plain; charset=UTF-8 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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.7 (/) Here is a quick prototype of how the client/server approach would look like. The setup code could be structured around a single class PythonElHelper, say. The class will listen on a socket in a dedicated thread. I have coded its output as json in order to allow to pass structured information to the elisp side and easily parse this information as elisp data with json-read-from-string. I don't see a need to use a full-fledged http server, although that could be done with url.el if desired. The server would provide tooltips for eldoc, documentation for the help buffer and completions for completion-at-point in a way that doesn't interfere with history, prompt numbers, block editing, etc. and doesn't require to deal with the shell input/output. Do you think this approach is sensible? I'm available for coding this along the next two months or so. ######################## python server ################# class PythonElServer: def __init__(self): # detect python2/3, ipython, readline, set completer, etc pass def complete(self, symbol): return ["a", "b", "c"] def tooltip(self, symbol): return "func(a, b, c)" def documentation(self, symbol): return "A function that does something" def serve(self, port): import socket, json server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('', port)) server.listen(1) (client, address) = server.accept() while True: request = client.recv(1024) action, symbol = request.split() response = getattr(self, action)(symbol) client.send(json.dumps(response)) PythonElServer().serve(9090) ######################## elisp client ################# ;; -*- lexical-binding: t -*- (setq python-shell-server (open-network-stream "pyserver" "pyserver" "localhost" 9091)) (defun python-shell-server-request (action symbol) (set-process-filter python-shell-server (lambda (proc out) (let ((response (json-read-from-string out))) (pcase action (`complete (python-shell-complete response)) (`tooltip (python-shell-tooltip response)) (`documentation (python-shell-documentation response)))))) (process-send-string python-shell-server (concat (symbol-name action) " " symbol))) (defun python-shell-complete (response) (print (concat "complete: " response))) (defun python-shell-tooltip (response) (print (concat "tooltip: " response))) (defun python-shell-documentation (response) (print (concat "documentation: " response))) (python-shell-server-request 'documentation "xxx") From unknown Sun Jun 22 04:13:35 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.503 (Entity 5.503) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Carlos Pita Subject: bug#19755: closed (python.el: native completion: more problems (and solutions)) Message-ID: References: <87zj6ineeo.fsf@gnu.org> X-Gnu-PR-Message: they-closed 19755 X-Gnu-PR-Package: emacs X-Gnu-PR-Keywords: patch Reply-To: 19755@debbugs.gnu.org Date: Thu, 09 Apr 2015 03:57:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1428551822-28415-1" This is a multi-part message in MIME format... ------------=_1428551822-28415-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #19755: python.el: native completion: more problems (and solutions) which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 19755@debbugs.gnu.org. --=20 19755: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D19755 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1428551822-28415-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 19755-done) by debbugs.gnu.org; 9 Apr 2015 03:56:05 +0000 Received: from localhost ([127.0.0.1]:49832 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Yg3ZU-0007N6-MO for submit@debbugs.gnu.org; Wed, 08 Apr 2015 23:56:04 -0400 Received: from fencepost.gnu.org ([208.118.235.10]:54841 ident=Debian-exim) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Yg3ZT-0007Mw-C9 for 19755-done@debbugs.gnu.org; Wed, 08 Apr 2015 23:56:03 -0400 Received: from [190.246.172.180] (port=45873 helo=localhost) by fencepost.gnu.org with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1Yg3ZS-0000gH-6Q for 19755-done@debbugs.gnu.org; Wed, 08 Apr 2015 23:56:02 -0400 From: fgallina@gnu.org (=?utf-8?Q?Fabi=C3=A1n?= Ezequiel Gallina) To: 19755-done@debbugs.gnu.org Subject: python.el: native completion: more problems (and solutions) Date: Thu, 09 Apr 2015 00:55:59 -0300 Message-ID: <87zj6ineeo.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -5.0 (-----) X-Debbugs-Envelope-To: 19755-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: -5.0 (-----) Hola Carlos, I pushed a fix for this at revno 911ed2e in the master branch. I'll be slowly catching up, sorry for the long delay. Cheers, Fabi=C3=A1n. ------------=_1428551822-28415-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 3 Feb 2015 12:40:59 +0000 Received: from localhost ([127.0.0.1]:60960 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YIcmo-0005hA-DW for submit@debbugs.gnu.org; Tue, 03 Feb 2015 07:40:59 -0500 Received: from eggs.gnu.org ([208.118.235.92]:37281) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YIcml-0005gw-Sr for submit@debbugs.gnu.org; Tue, 03 Feb 2015 07:40:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YIcme-0004ra-Kh for submit@debbugs.gnu.org; Tue, 03 Feb 2015 07:40:50 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:60355) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcme-0004rW-HA for submit@debbugs.gnu.org; Tue, 03 Feb 2015 07:40:48 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38952) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcmb-0004bZ-MI for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:40:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YIcmZ-0004pa-KF for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:40:45 -0500 Received: from mail-la0-x235.google.com ([2a00:1450:4010:c03::235]:41452) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcmZ-0004p3-3n for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:40:43 -0500 Received: by mail-la0-f53.google.com with SMTP id gq15so51126956lab.12 for ; Tue, 03 Feb 2015 04:40:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=iaAqTuhg3YDwG5NlSISMiVtNAK+0wm70M5ledOscVUQ=; b=LAZEiOud818o89BxlmGiaJdxCcBeoVvgJtuGei6Os24f3/GBXyYvN4iGXLastayWu8 UajQuLicRqgtgJsgRyVLvS58FSAJl9lFyVlqK9Ld73X0O782ajXkVks05n59FHC6Bljf jEuqlbV6FCuu6rIJcYpSnE/DLmm41VbQswxcZJGOadPJcqP1XXVu1Rt/+N5u5Sfpyu+d KjG5X0Gw4ZsSBVhrs3CB4M3kKydPI9N739vmbSLvTm+wTe6Gt9lMNyHe/mzrKpeG8as+ +a2lbYrTDNmOjTu4IX9Qr1ZjtT4qe12CWnY0owbtRHSqORSGNyxCAHPrXCsuxzP6XtaZ e8Dg== X-Received: by 10.152.226.134 with SMTP id rs6mr15429266lac.98.1422967242143; Tue, 03 Feb 2015 04:40:42 -0800 (PST) MIME-Version: 1.0 Received: by 10.112.124.202 with HTTP; Tue, 3 Feb 2015 04:40:21 -0800 (PST) From: Carlos Pita Date: Tue, 3 Feb 2015 09:40:21 -0300 Message-ID: Subject: python.el: native completion: more problems (and solutions) To: bug-gnu-emacs@gnu.org Content-Type: multipart/mixed; boundary=001a1134dbbcff81a5050e2e6052 X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 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: -4.0 (----) --001a1134dbbcff81a5050e2e6052 Content-Type: text/plain; charset=UTF-8 X-Debbugs-CC: galli.87@gmail.com Tags: patch Hi Fabian, besides the ones l have already reported and patched in [1] there are some remaining problems with the native completion approach: 1) The waiting timeout is too low for import completions, as imports take a bit more time than simple dirs. But making the timeout larger is bad for cases when there really is no completion at all for the current prefix. I want to avoid this trade off. 2) When all the completions share a common prefix, readline completes inline up to this common prefix, so the delete-line-command sequence length is wrong. For example, say the current prefix is "x" and that its completions are "xxy", "xxz". Readline will complete "xx" inline, but delete-line-command will only delete one "x". 3) A pager could be enabled to show long lists of completions. My solutions for 1 and 2 simply extend the dummy completion hack I introduced in [1]: 1') Ensure there is always one completion at least (a fortiori, I'm ensuring there are at least two completions, to force listing instead of inline completion). So we can set a larger timeout *just for the first* accept-process-output without the risk of waiting too much when there is really no completion available. 2') Ensure there is a completion with a different prefix, by providing a dummy randomly prefixed completion. For 3 I just disabled paged completions for readline, but I don't know how to do that for libedit. Attached is a patch with all the described changes, applied on top of my patch for [1]. Anyway, it should be easy to selectively apply the changes manually. All in all I find the solution pretty simple and it leverages my previous trick. The completer is a bit more complex now as it has to keep track of a couple of states in order to generate the correct sequence of completions (dummies included): def completer(text, state, real_completer=readline.get_completer(), last_state=[None]): completion = None if state == 0: last_state[0] = None if last_state[0] is None: completion = real_completer(text, state) if not completion: last_state[0] = state if (state == last_state[0] or state - 1 == last_state[0] == 0): import random completion = '%s%d__dummy_completion__' % ( text, random.randint(1000, 10000)) return completion readline.set_completer(completer) Cheers -- Carlos [1] http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19736 --001a1134dbbcff81a5050e2e6052 Content-Type: text/x-patch; charset=US-ASCII; name="native-compl.patch" Content-Disposition: attachment; filename="native-compl.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i5pa0ixp0 ZGlmZiAtLWdpdCBhLy5lbWFjcy5kL2xpc3AvcHl0aG9uLmVsIGIvLmVtYWNzLmQvbGlzcC9weXRo b24uZWwKaW5kZXggY2E2OWI2OC4uMTUwNDFhMyAxMDA2NDQKLS0tIGEvLmVtYWNzLmQvbGlzcC9w eXRob24uZWwKKysrIGIvLmVtYWNzLmQvbGlzcC9weXRob24uZWwKQEAgLTMwNzEsMjggKzMwNzEs MzggQEAgV2hlbiBhIG1hdGNoIGlzIGZvdW5kLCBuYXRpdmUgY29tcGxldGlvbiBpcyBkaXNhYmxl ZC4iCiAgICJUcnkgdG8gc2V0dXAgbmF0aXZlIGNvbXBsZXRpb24sIHJldHVybiBub24tbmlsIG9u IHN1Y2Nlc3MuIgogICAobGV0ICgocHJvY2VzcyAocHl0aG9uLXNoZWxsLWdldC1wcm9jZXNzKSkp CiAgICAgKHB5dGhvbi1zaGVsbC1zZW5kLXN0cmluZwotICAgICAoZnVuY2FsbAotICAgICAgJ21h cGNvbmNhdAotICAgICAgIydpZGVudGl0eQotICAgICAgKGxpc3QKLSAgICAgICAidHJ5OiIKLSAg ICAgICAiICAgIGltcG9ydCByZWFkbGluZSIKLSAgICAgICAiICAgIGRlZiBjb21wbGV0ZXIodGV4 dCwgc3RhdGUsIGM9cmVhZGxpbmUuZ2V0X2NvbXBsZXRlcigpKToiCi0gICAgICAgIiAgICAgICAg Y29tcGxldGlvbiA9IGModGV4dCwgc3RhdGUpIgotICAgICAgICIgICAgICAgIGlmIG5vdCBjb21w bGV0aW9uIGFuZCBzdGF0ZSA9PSAxOiIKLSAgICAgICAiICAgICAgICAgICAgcmV0dXJuIHRleHQg KyAnX19kdW1teV9jb21wbGV0aW9uX18nIgotICAgICAgICIgICAgICAgIGVsc2U6IgotICAgICAg ICIgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbiIKLSAgICAgICAiICAgIHJlYWRsaW5lLnNl dF9jb21wbGV0ZXIoY29tcGxldGVyKSIKLSAgICAgICAiICAgIGlmIHJlYWRsaW5lLl9fZG9jX18g YW5kICdsaWJlZGl0JyBpbiByZWFkbGluZS5fX2RvY19fOiIKLSAgICAgICAiICAgICAgICByZWFk bGluZS5wYXJzZV9hbmRfYmluZCgnYmluZCBeSSBybF9jb21wbGV0ZScpIgotICAgICAgICIgICAg ZWxzZToiCi0gICAgICAgIiAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29t cGxldGUnKSIKLSAgICAgICAiICAgIHByaW50ICgncHl0aG9uLmVsOiByZWFkbGluZSBpcyBhdmFp bGFibGUnKSIKLSAgICAgICAiICAgIGRlbCBjb21wbGV0ZXIsIHJlYWRsaW5lICAjIFNvbWUgY2xl YW51cCIKLSAgICAgICAiZXhjZXB0OiIKLSAgICAgICAiICAgIHByaW50ICgncHl0aG9uLmVsOiBy ZWFkbGluZSBub3QgYXZhaWxhYmxlJykiKQotICAgICAgIlxuIikKKyAgICAgOzsgRW5zdXJlIGF0 IGxlYXN0IHR3byBjb21wbGV0aW9uczoKKyAgICAgOzsgIC0gUmFuZG9tIHByZWZpeCBhdm9pZHMg Y29tbW9uIHByZWZpeCBpbmxpbmUgY29tcGxldGlvbgorICAgICA7OyAgLSBUd28gY29tcGxldGlv bnMgYXZvaWQgc2luZ2xlIGlubGluZSBjb21wbGV0aW9uCisgICAgIDs7ICAtIE9uZSBzdXJlIGNv bXBsZXRpb24gYXZvaWRzIHdhaXRpbmcgb3V0cHV0IHRpbWVvdXQKKyAgICAgInRyeToKKyAgICBp bXBvcnQgcmVhZGxpbmUKKyAgICBkZWYgY29tcGxldGVyKHRleHQsIHN0YXRlLAorICAgICAgICAg ICAgICAgICAgcmVhbF9jb21wbGV0ZXI9cmVhZGxpbmUuZ2V0X2NvbXBsZXRlcigpLAorICAgICAg ICAgICAgICAgICAgbGFzdF9zdGF0ZT1bTm9uZV0pOgorICAgICAgICBjb21wbGV0aW9uID0gTm9u ZQorICAgICAgICBpZiBzdGF0ZSA9PSAwOgorICAgICAgICAgICAgbGFzdF9zdGF0ZVswXSA9IE5v bmUKKyAgICAgICAgaWYgbGFzdF9zdGF0ZVswXSBpcyBOb25lOgorICAgICAgICAgICAgY29tcGxl dGlvbiA9IHJlYWxfY29tcGxldGVyKHRleHQsIHN0YXRlKQorICAgICAgICAgICAgaWYgbm90IGNv bXBsZXRpb246CisgICAgICAgICAgICAgICAgbGFzdF9zdGF0ZVswXSA9IHN0YXRlCisgICAgICAg IGlmIChzdGF0ZSA9PSBsYXN0X3N0YXRlWzBdIG9yCisgICAgICAgICAgICBzdGF0ZSAtIDEgPT0g bGFzdF9zdGF0ZVswXSA9PSAwKToKKyAgICAgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAg ICAgIGNvbXBsZXRpb24gPSAnJXMlZF9fZHVtbXlfY29tcGxldGlvbl9fJyAlICgKKyAgICAgICAg ICAgICAgICB0ZXh0LCByYW5kb20ucmFuZGludCgxMDAwLCAxMDAwMCkpCisgICAgICAgIHJldHVy biBjb21wbGV0aW9uCisgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihjb21wbGV0ZXIpCisgICAg aWYgcmVhZGxpbmUuX19kb2NfXyBhbmQgJ2xpYmVkaXQnIGluIHJlYWRsaW5lLl9fZG9jX186Cisg ICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCdiaW5kIF5JIHJsX2NvbXBsZXRlJykKKyAg ICBlbHNlOgorICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgndGFiOiBjb21wbGV0ZScp CisgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCdzZXQgcGFnZS1jb21wbGV0aW9ucyBv ZmYnKQorICAgIHByaW50KCdweXRob24uZWw6IHJlYWRsaW5lIGlzIGF2YWlsYWJsZScpCisgICAg ZGVsIGNvbXBsZXRlciwgcmVhZGxpbmUgICMgRW52IGNsZWFudXAKK2V4Y2VwdDoKKyAgICBwcmlu dCgncHl0aG9uLmVsOiByZWFkbGluZSBub3QgYXZhaWxhYmxlJykiCiAgICAgIHByb2Nlc3MpCiAg ICAgKHB5dGhvbi1zaGVsbC1hY2NlcHQtcHJvY2Vzcy1vdXRwdXQgcHJvY2VzcykKICAgICAod2hl biAoc2F2ZS1leGN1cnNpb24KQEAgLTMyMDYsOSArMzIxNiw3IEBAIGNvbXBsZXRpb24uIgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMnY29taW50LXJlZGlyZWN0LWZpbHRlciBvcmlnaW5h bC1maWx0ZXItZm4pKQogICAgICAgICAgICAgICAgIChzZXQtcHJvY2Vzcy1maWx0ZXIgcHJvY2Vz cyAjJ2NvbWludC1yZWRpcmVjdC1maWx0ZXIpKQogICAgICAgICAgICAgICAocHJvY2Vzcy1zZW5k LXN0cmluZyBwcm9jZXNzIGlucHV0LXRvLXNlbmQpCi0gICAgICAgICAgICAgIChhY2NlcHQtcHJv Y2Vzcy1vdXRwdXQKLSAgICAgICAgICAgICAgIHByb2Nlc3MKLSAgICAgICAgICAgICAgIHB5dGhv bi1zaGVsbC1jb21wbGV0aW9uLW5hdGl2ZS1vdXRwdXQtdGltZW91dCkKKyAgICAgICAgICAgICAg KGFjY2VwdC1wcm9jZXNzLW91dHB1dCBwcm9jZXNzIDAuMykKICAgICAgICAgICAgICAgOzsgWFhY OiBjYW4ndCB1c2UgYHB5dGhvbi1zaGVsbC1hY2NlcHQtcHJvY2Vzcy1vdXRwdXQnCiAgICAgICAg ICAgICAgIDs7IGhlcmUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gZ3VhcmFudGVlcyBvbiBob3cgb3V0 cHV0CiAgICAgICAgICAgICAgIDs7IGVuZHMuICBUaGUgd29ya2Fyb3VuZCBoZXJlIGlzIHRvIGNh bGwKQEAgLTMyMTcsMTMgKzMyMjUsMTIgQEAgY29tcGxldGlvbi4iCiAgICAgICAgICAgICAgICh3 aGlsZSAoYWNjZXB0LXByb2Nlc3Mtb3V0cHV0CiAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vz cwogICAgICAgICAgICAgICAgICAgICAgIHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLW5hdGl2ZS1v dXRwdXQtdGltZW91dCkpCi0gICAgICAgICAgICAgIChjbC1yZW1vdmUKLSAgICAgICAgICAgICAg IChjb25jYXQgaW5wdXQgIl9fZHVtbXlfY29tcGxldGlvbl9fIikKKyAgICAgICAgICAgICAgKGNs LXJlbW92ZS1pZgorICAgICAgICAgICAgICAgKGxhbWJkYSAoYykgKHN0cmluZy1tYXRjaCAiX19k dW1teV9jb21wbGV0aW9uX18iIGMpKQogICAgICAgICAgICAgICAgKHNwbGl0LXN0cmluZwogICAg ICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMKICAgICAgICAgICAg ICAgICAgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCi0gICAgICAgICAgICAgICAgc2VwYXJhdG9y cyB0KQotICAgICAgICAgICAgICAgOnRlc3QgIydzdHJpbmc9KSkpCisgICAgICAgICAgICAgICAg c2VwYXJhdG9ycyB0KSkpKQogICAgICAgICAoc2V0LXByb2Nlc3MtZmlsdGVyIHByb2Nlc3Mgb3Jp Z2luYWwtZmlsdGVyLWZuKSkpKSkKIAogKGRlZnVuIHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLWdl dC1jb21wbGV0aW9ucyAocHJvY2VzcyBpbXBvcnQgaW5wdXQpCg== --001a1134dbbcff81a5050e2e6052-- ------------=_1428551822-28415-1--