RFR: JDK-8214491: Upgrade to JLine 3.9.0
Jan Lahoda
jan.lahoda at oracle.com
Sun Dec 9 22:45:46 UTC 2018
On 9.12.2018 16:40, Robert Field wrote:
> Ok. Go ahead and incorporate the text. I'll make a separate bug to sync
> the representation of keys in the other help entries.
An updated patch (with your text):
http://cr.openjdk.java.net/~jlahoda/8214491/webrev.03/
Delta from previous patch:
http://cr.openjdk.java.net/~jlahoda/8214491/webrev.delta.02.03/
Thanks for the comments and for the text! Any feedback is welcome.
Thanks,
Jan
>
> 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