RFR: JDK-8214491: Upgrade to JLine 3.9.0

Robert Field robert.field at oracle.com
Sun Dec 9 01:40:59 UTC 2018


OK, here is my thinking on a /help keys entry.  Note: I'm using the 
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.

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