From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Carlos Pita Newsgroups: gmane.emacs.bugs Subject: bug#19755: python.el: native completion: more problems (and solutions) Date: Tue, 3 Feb 2015 09:40:21 -0300 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a1134dbbcff81a5050e2e6052 X-Trace: ger.gmane.org 1422967272 13418 80.91.229.3 (3 Feb 2015 12:41:12 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 3 Feb 2015 12:41:12 +0000 (UTC) Cc: galli.87@gmail.com To: 19755@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Feb 03 13:41:11 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1YIcn1-0004k4-92 for geb-bug-gnu-emacs@m.gmane.org; Tue, 03 Feb 2015 13:41:11 +0100 Original-Received: from localhost ([::1]:59030 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcn0-0004r1-KE for geb-bug-gnu-emacs@m.gmane.org; Tue, 03 Feb 2015 07:41:10 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:39111) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcmu-0004q1-JK for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:41:06 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YIcms-0004zT-TD for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:41:04 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:41488) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcms-0004zM-Qo for bug-gnu-emacs@gnu.org; Tue, 03 Feb 2015 07:41:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1YIcms-0005hb-BD; Tue, 03 Feb 2015 07:41:02 -0500 X-Loop: help-debbugs@gnu.org 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 X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: galli.87@gmail.com Original-Received: via spool by submit@debbugs.gnu.org id=B.142296725921901 (code B ref -1); Tue, 03 Feb 2015 12:41:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 3 Feb 2015 12:40:59 +0000 Original-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 Original-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 Original-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 Original-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 Original-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 Original-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 Original-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 Original-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) Original-Received: by 10.112.124.202 with HTTP; Tue, 3 Feb 2015 04:40:21 -0800 (PST) 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:99013 Archived-At: --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--