[Philip]
> A few of these issues marked (the 2 high priority ones too) don't seem
> JConsole related, though:
>
> http://bugs.jython.org/issue1133 (really more about fixing stuff upstream)
> http://bugs.jython.org/issue1460 (isn't this a parser problem?)
> http://bugs.jython.org/issue1807 (nothing to do w/ JLine)
> http://bugs.jython.org/issue1972 (I just commented on this: I doubt the
*original* issue actually involves JLine AFAICT)
Thanks Philip. I've taken the "console" keyword off those issues.
Which leaves us with the following set (currently 8 issues)
http://bugs.jython.org/issue?%40search_text=&title=&%40columns=title&id=&%40columns=id&creation=&creator=&activity=&%40columns=activity&%40sort=activity&actor=&nosy=&type=&components=&versions=&severity=&dependencies=&assignee=&keywords=6&priority=&%40group=priority&status=1&%40columns=status&resolution=&%40pagesize=50&%40startwith=0&%40queryname=&%40old-queryname=&%40action=search
>From what I can see the major issues are
1. Ctrl-c handling is broken
A: On windows and cygwin, it is treated as an ordinary textual character,
appearing as a heart symbol. The intended function of ctrl-c is completely
unavailable on these platforms. This is obviously jline related, and should
be possible to fix, since cpython and the old jython interactive console
both behave as expected on windows. This is sufficiently broken that it
cannot be left as is. (Is there something about the jline architecture that
prevents correct implementation of Ctrl-C handling? I spent 2 hours or so
playing with the jline properties and our java code for it, trying what
looked like good solutions, some I found in various JIRAs and blog posts:
none of them worked)
B: On some unixes, although apparently not OSX, which is the platform of
the developer who introduced jline, Ctrl-C does not behave as expected.
Instead of generating a KeyboardInterrupt exception which can be caught, it
instead forces a process quit: the exception cannot be caught, which makes
for a very poor experience for developers distributing jython software on
these platforms, since their software cannot exit cleanly. It needs to be
fixed. The only proposed fixes seem to involve the use of signal-handling
facilities, which are specific to the Sun/Oracle JVM. Such JVM specific
workarounds are not really workable in a multi-JVM context. The old
InteractiveConsole seemed to handle it OK. What is about jline that
prevents the implementation of Ctrl-C handling without resorting to signals?
2. Interference with System.console().readline()
This issue is also experienced by Scala, and possibly jruby, and neither
seems to have found a solution.
https://issues.scala-lang.org/browse/SI-3442
This is a major issue for those needing System.console() to work properly.
[Frank]
> Is it cygwin only or is it all windows?
As discussed above, there are separate issues on Windows, Cygwin and
various unixen, including linux. (but apparently not Mac OSX, which is
perhaps why all you guys are not seeing it ;-)
[Frank]
> Only disabling on the specific
> platforms actually does sound like a good idea, especially in 2.5.x
> since it would be a loss of backwards compatibility. If it really is
> only cygwin then we could expect reasonably sophisticated users who
> should be able to handle a registry switch.
If we decide to go ahead with platform-specific terminals, there are two
ways to do it
1. We specialise the installer to customise the registry file at
installation time. I'm not keen on this option, since there is no
templating or other similar functionality in the installer. Here's how I
had to add to the Windows batch file.
http://hg.python.org/jython/rev/67fea7719593
2. We introduce an amended naming convention in the registry file, to
permit platform specific installation options. For example
####################
#
# Jython ships with a JLine console (http://jline.sourceforge.net/)
# out of the box. Setting this to the name of a different console class,
# new console features can be enabled. Readline support is such an
# example:
#python.console=org.python.util.ReadlineConsole
#python.console.readlinelib=JavaReadline
# To activate the legacy Jython console:
#python.console=org.python.util.InteractiveConsole
#
# Now we specialise for different platforms, and change console
initialisation at runtime.
#
python.console.windows=org.python.util.InteractiveConsole
python.console.cygwin=org.python.util.InteractiveConsole
#
####################
[Frank]
> I wonder if JLine 2 has fixed these issues - eventually we'll need to
> look into that I think. If we could get JLine bug free it is much
> nicer than the old console...
Agreed that is nicer for those lucky enough to run platforms on which it
works.
It would be good to reach out the jruby folks to see if they have advice or
experience to offer.
Alan.
|