RFR: JDK-8214491: Upgrade to JLine 3.9.0
Jan Lahoda
jan.lahoda at oracle.com
Sun Dec 9 14:36:22 UTC 2018
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 kulla-dev
mailing list