AnotherTest
7fba21aefc
LibLine: Unify completion hooks and adapt its users
...
LibLine should ultimately not care about what a "token" means in the
context of its user, so force the user to split the buffer itself.
This also allows the users to pick up contextual clues as well, since
they have to lex the line themselves.
This commit pacthes Shell and the JS repl to better handle completions,
so certain wrong behaviours are now corrected as well:
- JS repl can now complete "Object . getOw<tab>"
- Shell can now complete "echo | ca<tab>" and paths inside strings
2020-05-20 13:41:37 +02:00
AnotherTest
c38c2668da
LibLine: Default to resolving Spans as byte offsets
...
This allows all the unicode processing to be internal to the line
editor.
2020-05-19 20:02:28 +02:00
AnotherTest
082cd7048e
LibLine: Handle <return>s in incomplete data correctly
...
Previously, we would concatenate all the commands together:
```
> sleep 5
echo well
echo hello
echo friends
> echo wellecho helloecho friends
```
Also renames some variables to be more descriptive.
2020-05-19 11:59:28 +02:00
AnotherTest
3bc3f36cfe
LibLine: Handle unicode correctly
...
This commit also fixes a problem with us throwing out data that was
inserted while a command was running.
2020-05-18 11:31:43 +02:00
Sergey Bugaev
450a2a0f9c
Build: Switch to CMake :^)
...
Closes https://github.com/SerenityOS/serenity/issues/2080
2020-05-14 20:15:18 +02:00
AnotherTest
98d25324fd
LibLine: Add a hook to run when an interrupt is handled
...
We do not want to clog up signal handlers by putting possibly complex
logic inside them, so allow the editor to handle that.
2020-05-13 15:07:44 +02:00
AnotherTest
b64bb7a3e1
LibLine: Fix suggestion spacing regression
...
This patch fixes an issue where the line editor would put no spacing
between suggestions (only when there are two suggestions).
To reproduce, try on a build with no ports (starting with `pro`):
```
> pro<tab>
profilepro
```
2020-05-12 08:57:14 +02:00
AnotherTest
c88c883f44
LibLine: Show suggestions in pages if they don't fit on the screen
...
We can now cycle pages of suggestions when there are more suggestions
than we can fit on one screen.
This does not inculude a visual indicator that more pages exist,
however.
2020-05-11 09:33:18 +02:00
AnotherTest
c40fd3a902
LibLine: Support RGB colors
...
This also patches Userland/js.
2020-05-10 10:23:05 +02:00
AnotherTest
ccdef5a675
LibLine: Expose actual_rendered_string_length & accept newlines in prompt
2020-05-10 10:23:05 +02:00
AnotherTest
7f1d3f6d62
LibLine: Handle ^L while in search mode
...
This commit fixes the following misbehaviour:
```
> <- search prompt moves here
>
> ^R^L <- actual prompt stays here
```
2020-05-02 11:57:21 +02:00
AnotherTest
977aa3968c
LibLine: Reset inline_search_cursor along with cursor
...
This fixes the issue where the editor would only scroll up one command
and then 'search' for it
2020-04-30 22:14:59 +02:00
AnotherTest
a80ddf584f
Shell+LibLine: Handle escaped characters correctly
...
This patchset fixes incorrect handling of escaped tokens (`a\ b`) in
Shell autocompletion and LibLine.
The users of LibLine can now choose between two token splitting modes,
either taking into account escapes, or ignoring them.
2020-04-30 09:07:38 +02:00
Andreas Kling
86810a4b02
LibLine: Actually fix build :^)
2020-04-29 00:03:19 +02:00
AnotherTest
a6fcf70e25
LibLine: Properly mark the result of read() as ignored
...
Unbreaks the build.
2020-04-28 23:48:38 +02:00
AnotherTest
e83300dc27
LibLine: Drop stray input before doing vt_dsr
...
This patch fixes the issue where some data would be buffered while the
editor is not editing, and vt_dsr would read them, resulting in the
cursor to jump to (1,1)
2020-04-28 23:29:07 +02:00
AnotherTest
9473733d7a
LibLine: Handle initialize() internally
...
This patch makes initialize() transparent to the users, but exposes it
publicly, as the users might need a copy of the default termios (i.e.
Shell)
2020-04-28 23:29:07 +02:00
AnotherTest
7ecf29f206
LibLine: Ignore interrupts unless actively editing
...
It does not make much sense to receive an interrupt and process it
*much later*.
Also patches Userland/js to only create exceptions while some code is
actually running.
2020-04-28 23:29:07 +02:00
AnotherTest
1a7af4d677
LibLine: Do not ignore ^C and do not finish() after interrupt
2020-04-22 12:12:41 +02:00
AnotherTest
730ca98698
LibLine: Avoid OOB access when one of the suggestions is the prefix
2020-04-22 11:35:53 +02:00
AnotherTest
364ca1f476
LibLine: Autocomplete already-complete suggestions
...
Suggesting whatever the user has input is not quite sane :^)
2020-04-20 20:23:26 +02:00
AnotherTest
f9b0490383
LibLine: Handle ctrl-{left,right}_arrow by jumping between words
...
Words are delimited by spaces.
Perhaps this should be a configurable behaviour?
2020-04-20 20:23:26 +02:00
AnotherTest
e578b7884b
LibLine: Properly handle ^C and do not return after being interrupted
...
this commit fixes a...surprisingly long-standing ^C bug, where it would
return the buffer instead of voiding it and starting over :^)
2020-04-20 17:27:30 +02:00
AnotherTest
42f06fc305
LibLine: Implement searching via up/down arrow keys
2020-04-20 17:27:30 +02:00
AnotherTest
58912994ab
LibLine: Implement ^R searching
...
This commit adds searching in the editor history with ^R.
It does so by instantiating...another Line::Editor inside the current
Line::Editor :^)
2020-04-20 17:27:30 +02:00
AnotherTest
c97ca2fecc
LibLine: Clear trailing trivia when cycling if the suggestion has any
2020-04-19 19:39:50 +02:00
AnotherTest
cb3cf589ed
LibLine: Allow suggestions to have trailing trivia strings
...
These strings would be applied when inserted into the buffer, but are
not shown as part of the suggestion.
This commit also patches up Userland/js and Shell to use this
functionality
2020-04-19 17:21:55 +02:00
AnotherTest
7ef48171ce
LibLine: Complete only common prefixes, and tweak suggestion logic
...
On the first tab, only complete the token without suggesting extra
stuff, and on further tabs, show suggestions.
Except in one case where the completion is all in the buffer, then
we show the suggestions, but do no completion.
2020-04-19 17:21:55 +02:00
AnotherTest
6b513ca97e
LibLine: Avoid crashing if given empty suggestions
2020-04-15 16:38:25 +02:00
AnotherTest
32276cba7a
LibLine: Properly handle multiline suggestions
2020-04-15 08:46:42 +02:00
AnotherTest
8ebee4bce6
LibLine: Update display when deleting forward
2020-04-13 12:26:43 +02:00
AnotherTest
364dbe28d6
LibLine: Remove unused cut_mismatching_chars() function
...
This is superceded by the suggest() mechanism
2020-04-13 00:49:24 +02:00
AnotherTest
fa0525b8bf
LibLine: Autocomplete single suggestions
...
`cd /h<tab>` -> `cd /home/`, pressing tab after that would
descend into `/home/' and show `/home/anon/`
2020-04-13 00:49:24 +02:00
Linus Groh
c106451daf
LibLine: Cycle backward through suggestions using Shift+Tab
2020-04-11 20:42:17 +02:00
AnotherTest
2fdce695d6
LibLine: Display suggestions and cycle between them
...
With extra color (tm)
This commit also patches the users of LibLine to properly use the new
API
2020-04-11 17:15:19 +02:00
AnotherTest
b59a391a78
LibLine: Ask for cursor position once and handle the rest internally
...
Prior to this, writing to stdin while a display refresh was happening
corrupted the input and displayed garbage.
2020-04-11 17:15:19 +02:00
AnotherTest
f946d6ce79
LibLine: Properly handle window resize by not spamming DSRs
...
We have all the information necessary to find our new origin when a
window size change occurs.
2020-04-11 14:29:25 +02:00
AnotherTest
173c65660a
LibLine: Properly show and cleanup suggestions
...
Prior to this, we would display them and never clean then up.
2020-04-11 14:29:25 +02:00
Andreas Kling
c06d5ef114
Kernel+LibC: Remove ESUCCESS
...
There's no official ESUCCESS==0 errno code, and it keeps breaking the
Lagom build when we use it, so let's just say 0 instead.
2020-04-10 13:09:35 +02:00
AnotherTest
2315f789cc
LibLine: Appropriately react to window size changes
2020-04-10 11:26:44 +02:00
AnotherTest
1b422315fa
LibLine: Fix regression with moving around in history misplacing cursor
...
This commit fixes a regression where the prompt would not be cleared
upon substitution of lines from the history
2020-04-10 11:26:44 +02:00
AnotherTest
da9335dbec
LibLine: Implement multiline editing
...
This commit also adds the ability to change the prompt mid-edit :^)
2020-04-10 00:58:59 +02:00
AnotherTest
c2f8a5fffa
LibLine: Add live styling support
...
This patchset adds an stylization interface to LibLine, and breaks
multiline editing.
With the most adorable Style constructor I've ever seen :^)
2020-04-05 16:11:13 +02:00
AnotherTest
8f08ec5038
LibLine: Restore previous state only if initialized
...
This makes the library safe to construct/destruct without actually using
it.
2020-04-02 08:49:11 +02:00
Andreas Kling
296f87fa7f
LibLine: Fix Shell crashing (due to write() EFAULT) on <tab><tab>
...
Use a StringBuilder instead of blindly passing a bunch of potentially
empty/null strings to the kernel. StringBuilder is more lenient and
generally more pleasant to use anyway.
2020-04-01 11:25:53 +02:00
Andreas Kling
28edafbfa6
LibLine: Fix build in Linux environment
...
My host compiler was complaining about "%b" in format strings and about
ignoring the return value from a bunch of write() calls.
2020-03-31 18:59:15 +02:00
Andreas Kling
c7257ed827
LibLine: Rename on_char_input() => register_character_input_callback()
...
The "on_foo" format is our convention for public callback members.
2020-03-31 13:37:01 +02:00
Andreas Kling
8ab576308f
LibLine: Rename LineEditor.{cpp,h} => Editor.{cpp,h}
2020-03-31 13:34:57 +02:00
Andreas Kling
6595469de1
LibLine: Rename LineEditor to Line::Editor
2020-03-31 13:34:06 +02:00
Andreas Kling
a30a3277a3
LibLine: Rename from LibLineEdit
2020-03-31 13:32:11 +02:00