RFR: JDK-8214491: Upgrade to JLine 3.9.0

Robert Field robert.field at oracle.com
Sun Dec 9 15:40:05 UTC 2018


Ok. Go ahead and incorporate the text.  I'll make a separate bug to sync 
the representation of keys in the other help entries.

Robert


On December 9, 2018 6:36:26 AM Jan Lahoda <jan.lahoda at oracle.com> wrote:

> Hi Robert,
>
> On 9.12.2018 02:40, Robert Field wrote:
>> OK, here is my thinking on a /help keys entry.  Note: I'm using the
>
> I think this looks great!
>
>> representation for keys used by the User's Guide -- which I assume is
>> the official tech pubs style -- seems we should be consistent; If we are
>> however, the other /help entries should be brought into compliance (they
>> seem to be all over the map already).  May make sense to spin this off
>> as a separate bug, which I'd be happy to take on.
>
> I'm happy with a separate bug, if you prefer/are OK with that. Or I can
> incorporate the text into upgrade patch, whichever you prefer.
>
> I've updated my current patch with only a rename "editing" -> "keys" and
> the fix to the jshell tool name:
> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.02/
>
> Delta from last:
> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.delta.01.02/
>
> Jan
>
>>
>> Comments welcome ---
>>
>> __________________________________________________________________________________________________________________________
>>
>>
>> /help keys
>> ==========
>>
>> The jshell tool provides line editing support to allow you to navigate
>> within and edit snippets and commands. The current command/snippet can
>> be edited, or prior commands/snippets can be retrieved from history,
>> edited, and executed. This support is similar to readline/editline with
>> simple emacs-like bindings.  There are also jshell tool specific key
>> sequences.
>>
>> --- Line and history navigation ---
>>
>> Return
>>    Enters the current snippet
>> Left-arrow or Ctrl+B
>>    Moves backward one character
>> Right-arrow or Ctrl+F
>>    Moves forward one character
>> Up-arrow or Ctrl+P
>>    Moves up one line, backward through history
>> Down arrow or Ctrl+N
>>    Moves down one line, forward through history
>> Ctrl+A
>>    Moves to the beginning of the line
>> Ctrl+E
>>    Moves to the end of the line
>> Meta+B
>>    Moves backward one word
>> Meta+F
>>    Moves forward one word
>> Ctrl+R
>>    Search backward through history
>>
>>
>> --- Line and history basic editing ---
>>
>> Meta+Return or Ctrl+Return (depending on platform)
>>    Insert a new line in snippet
>> Ctrl+_ (underscore may require shift key) or Ctrl-X then Ctrl-U
>>    Undo edit - repeat to undo more edits
>> Delete
>>    Deletes the character at or after the cursor, depending on the
>> operating system
>> Backspace
>>    Deletes the character before the cursor
>> Ctrl+K
>>    Deletes the text from the cursor to the end of the line
>> Meta+D
>>    Deletes the text from the cursor to the end of the word
>> Ctrl+W
>>    Deletes the text from the cursor to the previous white space
>> Ctrl+Y
>>    Pastes the most recently deleted text into the line
>> Meta+Y
>>    After Ctrl+Y, Meta+Y cycles through previously deleted text
>> Ctrl+X then Ctrl+K
>>    Delete whole snippet
>>
>>
>> --- Shortcuts for jshell tool ---
>>
>> For details, see: /help shortcuts
>>
>> Tab
>>    Complete Java identifier or jshell command
>> Shift+Tab then v
>>    Convert expression to variable declaration
>> Shift+Tab then m
>>    Convert statement to method declaration
>> Shift+Tab then i
>>    Add imports for this identifier
>>
>>
>> --- More line and history editing ---
>>
>> Ctrl+L
>>    Clear screen and reprint snippet
>> Ctrl+U
>>    Kill whole line
>> Ctrl+T
>>    Transpose characters
>> Ctrl+X then Ctrl+B
>>    Navigate to matching bracket, parenthesis, ...
>> Ctrl+X then =
>>    Enter show current character position mode
>> Ctrl+X then Ctrl+O
>>    Toggle overwrite characters vs insert characters
>> Meta+C
>>    Capitalize word
>> Meta+U
>>    Convert word to uppercase
>> Meta+L
>>    Convert word to lowercase
>> Meta+0 through Meta+9 then key
>>    Repeat the specified number of times
>>
>> Where, for example, "Ctrl+A" means hold down the control key and press A.
>> Where "Meta" is "Alt" on many keyboards.
>> Line editing support is derived from JLine 3.
>>
>> _______________________________________________________________________________
>>
>>
>>
>> -Robert
>>
>>
>>
>> On 12/8/18 11:47 AM, Jan Lahoda wrote:
>>> On 8.12.2018 20:39, Robert Field wrote:
>>>> Thanks for updating.
>>>>
>>>> Good to have /help for line editing keys, however:
>>>>    (1) The supported keys should be listed without requiring that the
>>>> user knows or looks-up readline. More so, since only some readline keys
>>>> are supposed.
>>>>    (2) "/edit" is a command, so with this change, typing "/help edit"
>>>> would give both the /edit and editing help -- which would be confusing.
>>>> I suggest "/help keys", there are no "k" help items.
>>>
>>> Will do.
>>>
>>>>    (3) In jshell tool online docs the tool is spelled "jshell tool"
>>>> I'd be happy to write up suggested text.
>>>
>>> Thanks, that would be very welcome!
>>>
>>>>
>>>> As to the alternative patch: I understand the motivation, it would be
>>>> nice to just use the natural "Enter" as new line. Unfortunately it's
>>>> functionality is then overloaded.  I believe the alternative will be
>>>> confusing and awkward:
>>>>    (1) It breaks backward compatibility in user experience, Enter has
>>>> always been accept/evaluate
>>>>    (2) It would be very awkward and non-intuitive (particularly in a
>>>> long multiline snippet) to have to navigate to the end of the snippet to
>>>> accept.
>>>>         Note: must be the end both vertically and horizontally.
>>>>    (3) It is inconsistent: Mid snippet Enter on one line does accept.
>>>> However, on a continuation line (say after "int x =") it adds a new line
>>>> instead.
>>>>    (4) It doesn't solve the problem for the most common location for
>>>> adding a new line, the end of snippet -- thus introducing more
>>>> inconsistency.
>>>
>>> Ok. This was meant more as a backup in case there's no reasonable
>>> shortcut we could use to add new lines.
>>>
>>> Thanks for the comments!
>>>
>>> Jan
>>>
>>>>
>>>> Thanks,
>>>> Robert
>>>>
>>>>
>>>> On 12/8/18 7:21 AM, Jan Lahoda wrote:
>>>>> Hi,
>>>>>
>>>>> I've updated the patch to reflect the comments so far, the current
>>>>> version is here:
>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.01/
>>>>> Delta since the previous version is here for convenience:
>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.delta.00.01/
>>>>>
>>>>> In this version, while editing a snippet, a new line can be added
>>>>> using Alt-Enter (on platforms that support that), or Ctrl-Enter (on
>>>>> Windows).
>>>>>
>>>>>
>>>>> And alternative patch is here:
>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.01a/
>>>>> Delta:
>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.delta.00.01a/
>>>>>
>>>>> In the alternative version, Enter will only "confirm" multi-line
>>>>> snippet when the cursor is at the end of the snippet, otherwise it
>>>>> will add a new line (so that a special shortcut is not needed; but a
>>>>> snippet cannot be "confirmed" by pressing Enter in the middle of a
>>>>> multi-line snippet.)
>>>>>
>>>>> The only difference between the .01 and .01a patches is the way they
>>>>> allow to add new lines into the multi-line snippets. Other changes are
>>>>> the same.
>>>>>
>>>>> Any feedback on this is welcome.
>>>>>
>>>>> Thanks!
>>>>>
>>>>> Jan
>>>>>
>>>>> On 5.12.2018 18:18, Jan Lahoda wrote:
>>>>>> Hi Robert,
>>>>>>
>>>>>> On 4.12.2018 23:59, Robert Field wrote:
>>>>>>> I saw no issues with JShell tool and test portions of the webrev.  I
>>>>>>> did
>>>>>>> not review the nashorn changes.
>>>>>>
>>>>>> Thanks for looking at this!
>>>>>>
>>>>>>>
>>>>>>> Testing it: editing multi-line snippets is vastly easier and more
>>>>>>> intuitive.
>>>>>>> There is one issue, with the old mechanism, as horridly clunky as it
>>>>>>> was, you could add new lines of code (a frequently needed
>>>>>>> functionality).
>>>>>>> Since <return> is accept, I could find no way to add lines with this
>>>>>>> JLine 3 version.  Thoughts?
>>>>>>
>>>>>> One possibility that comes to mind: pressing Enter inside the snippet
>>>>>> would add a new line, Enter at the very end of a (complete) snippet
>>>>>> would confirm that snippet. Could be fairly convenient/intuitive. What
>>>>>> do you think?
>>>>>>
>>>>>>>
>>>>>>> I looked into readline commands as an approach to addressing this,
>>>>>>> found
>>>>>>> nothing.  However, most readline commands worked. Ctrl-u however did
>>>>>>> not
>>>>>>> behave as documented in readline (instead deleting to the
>>>>>>> beginning of
>>>>>>> the line).  I notice that the there is zero in-command
>>>>>>> documentation of
>>>>>>> command-line editing -- not even a mention.  Independent from the
>>>>>>> review
>>>>>>> of this port, it seems we should have in-command documentation of
>>>>>>> command editing -- even more so now that multiline editing is useful.
>>>>>>
>>>>>> This is about enhancing /help, right? I'll see what I can do.
>>>>>>
>>>>>>>
>>>>>>> The JShell User Manual will also need a little edit in the History
>>>>>>> Navigation section.
>>>>>>
>>>>>> Where is that?
>>>>>>
>>>>>> Thanks,
>>>>>>      Jan
>>>>>>
>>>>>>>
>>>>>>> -Robert
>>>>>>>
>>>>>>>
>>>>>>> On 11/29/18 1:06 PM, Jan Lahoda wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I'd like to update the internal JLine used by JShell and jjs to
>>>>>>>> JLine
>>>>>>>> 3.9.0. Two notable advantages of this version is multi-line snippet
>>>>>>>> editing and better UI on Windows (escape sequence support on
>>>>>>>> Windows).
>>>>>>>> As a consequence, this patch drops EditingHistory, as it does not
>>>>>>>> seem
>>>>>>>> to be needed anymore.
>>>>>>>>
>>>>>>>> JBS:
>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8214491
>>>>>>>>
>>>>>>>> The full patch is here:
>>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.00/
>>>>>>>>
>>>>>>>>
>>>>>>>> To make the changes more clear, I've split it into two:
>>>>>>>> -replacement of existing JLine with the new on in
>>>>>>>> jdk.internal.le, no
>>>>>>>> changes to JLine code:
>>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.00.replace/
>>>>>>>>
>>>>>>>> -tweaks to JLine (repackaging, eliminating references to
>>>>>>>> j.u.l.Logger,
>>>>>>>> adding hooks to wrap input streams with our stop-detecting input
>>>>>>>> stream, adding unicode escapes to unicode characters, support for
>>>>>>>> Windows without JNA), adjustments to JShell and jjs (unfortunately,
>>>>>>>> 3.9.0 is not compatible with the JLine 2 branch, so the changes are
>>>>>>>> substantial):
>>>>>>>> http://cr.openjdk.java.net/~jlahoda/8214491/webrev.00.update/
>>>>>>>>
>>>>>>>> Any feedback is welcome!
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>     Jan





More information about the nashorn-dev mailing list