Issue795831
Created on 2003-08-27.06:52:17 by bab, last changed 2009-07-08.00:49:45 by pjenvey.
Files | ||||
---|---|---|---|---|
File name | Uploaded | Description | Edit | Remove |
jython-diff | bab, 2003-08-27.06:55:59 | Patch repeated with whitespace/indenting preserved |
Messages | |||
---|---|---|---|
msg2297 (view) | Author: Ben Burton (bab) | Date: 2003-08-27.06:52:17 | |
Below is the patch I recently posted to jython-dev allowing the use of the TAB key when working in an interactive jython interpreter with ReadlineConsole. Since python makes active use of indentation in defining the language, this resolves a serious usability problem when using jython with readline support. This patch works with the current CVS version of java-readline (to be released as version 0.8.1), though will not have any negative effects with earlier java-readline versions. Ben. diff -ru old/jython-2.1.0/org/python/util/ReadlineConsole.java jython-2.1.0/org/python/util/ReadlineConsole.java --- old/jython-2.1.0/org/python/util/ReadlineConsole.java 2003-08-27 13:49:20.000000000 +1000 +++ jython-2.1.0/org/python/util/ReadlineConsole.java 2003-08-27 15:45:11.000000000 +1000 @@ -26,6 +26,24 @@ // Will use a pure java fallback. } Readline.initReadline("jpython"); + + // Disable readline completion if we have a new enough Readline + // class, so that <TAB> characters can be input directly. + try { + java.lang.reflect.Field inhibitConstField = + Readline.class.getField("RL_INHIBIT_COMPLETION"); + if (inhibitConstField != null) { + Object inhibitConst = inhibitConstField.get(null); + Class[] setVarArgTypes = { inhibitConst.getClass(), + Integer.TYPE }; + java.lang.reflect.Method setVar = Readline.class.getMethod( + "setVar", setVarArgTypes); + if (setVar != null) { + Object[] args = { inhibitConst, new Integer(1) }; + setVar.invoke(null, args); + } + } + } catch (Exception exc) {} } |
|||
msg2298 (view) | Author: Ben Burton (bab) | Date: 2003-08-27.06:54:44 | |
Logged In: YES user_id=146613 Hmm, somewhere in the patch submission process the whitespace has been mangled. I'm attaching the patch again as a separate file with whitespace and indenting intact. Ben. |
|||
msg2299 (view) | Author: Samuele Pedroni (pedronis) | Date: 2005-01-09.19:44:32 | |
Logged In: YES user_id=61408 this touches the theme to wich extent do we want to invest improving readline support while staying with no default GPL linking. Needs discussion. |
|||
msg2300 (view) | Author: Ben Burton (bab) | Date: 2005-01-17.06:33:33 | |
Logged In: YES user_id=146613 > this touches the theme to wich extent do we want to invest > improving readline support while staying with no default GPL > linking. Needs discussion. The java-readline project works with several readline-style libraries, including the BSD-licensed libedit. Indeed the jython packages I make for debian use libedit and _not_ libreadline, precisely because of the GPL issue. This patch is certainly not exclusive to the GPLed libreadline. At any rate, given that you ship ReadlineConsole it's not clear to me why you'd prefer not to include the patch. It fixes a serious usability issue, and it's not as though you need to make a serious investment. The patch is ready and well tested, and has been for some time. Ben. |
|||
msg2301 (view) | Author: Philip Jenvey (pjenvey) | Date: 2007-09-03.01:37:21 | |
JLine is great in the fact that it's pure java, and in the future I'd like to see it even included with Jython to be used as the default console. However that's still no reason to not support readline, especially since it has more features than JLine and last time I checked, EditLine This patch is actually the wrong solution, I've discovered after digging into it some. The underlying problem is that readline defaults the tab key to complete and that CPython rebinds it to send an actual tab key. We don't want to disable completion completely, like this patch does. We still want the ability to do completion, but only if the user sets up his environment to do so, such as when they're using rlcompleter: http://docs.python.org/lib/module-rlcompleter.html (Note the rlcompleter docs instruct you to rebind tab back to readline's complete function) Sorry this ticket has lingered for so long Ben, I'll commit the CPython-like solution pretty soon |
|||
msg2302 (view) | Author: Philip Jenvey (pjenvey) | Date: 2007-09-03.05:36:39 | |
addendum: well it's the wrong solution for pure readline, anyway I committed r3466 to remap the tab key -- but the method used to remap keys is only available under pure Readline. EditLine can't remap keybindings, or at least Java readline provides no facility for doing so I can't get java-readline to work with the versions of libedit I have here. Does EditLine/libedit suffer from this issue? If so we could fallback to this patch for EditLine. It would break rlcompleter, but is probably worth doing so just that tab works |
|||
msg2303 (view) | Author: Philip Jenvey (pjenvey) | Date: 2007-10-24.23:53:00 | |
In reply to Patch #1817799 (a dupe of this): I'd be willing to commit a patch that disables completion via RL_INHIBIT_COMPLETION for *only* Editline #1817799's patch disables it comletely for both Editline and Readline. This will prevent the rlcompleter module from working with readline-using jythons if one wants to enable it: http://docs.python.org/lib/module-rlcompleter.html (notice the instructions have you rebind tab back to complete, opposite of what Python and now Jython do at startup) |
|||
msg4887 (view) | Author: Philip Jenvey (pjenvey) | Date: 2009-07-08.00:49:43 | |
So what's pending here is does ReadlineConsole with editline disable the tab key? I wasn't able to build java-readline with editline, so I'm not sure. So I'm closing this out until someone using editline encounters it This is of lower priority now anyway now that we ship with jline as default |
History | |||
---|---|---|---|
Date | User | Action | Args |
2009-07-08 00:49:45 | pjenvey | set | status: open -> closed resolution: fixed messages: + msg4887 |
2008-12-15 15:59:23 | fwierzbicki | set | components: + Core, - None |
2003-08-27 06:52:17 | bab | create |
Supported by Python Software Foundation,
Powered by Roundup