summaryrefslogtreecommitdiff
path: root/Libraries/LibLine
AgeCommit message (Collapse)Author
2020-12-06LibLine: Don't make Editor::load_history() cut off a character per lineLinus Groh
For some reason we were not considering the last *two* characters from the line's ByteBuffer, with the comment next to it talking about \n and \0. However the buffer doesn't contain a null-byte, so we were effectively removing the newline and the last character from each history line!
2020-10-26Shell+LibLine: Support HISTCONTROL environment variableLinus Groh
This is implemented in Line::Editor meaning not only the Shell will respect it, but also js, Debugger etc. Possible values are "ignorespace", "ignoredups" and "ignoreboth", as documented in Shell-vars(7), for now. The default value for the anon user (set in .shellrc) is "ignoreboth".
2020-10-26Shell+LibLine: Move Shell::{load,save}_history() to Line::EditorLinus Groh
This allows us to easily re-use history loading and saving in other programs using Line::Editor, as well as implementing universally recognized HISTCONTROL.
2020-10-22LibLine: Support basic escaped characters in config fileAnotherTest
Until we can figure out how shift+enter works (or an alternative), this can be used to input literal newlines: ```ini [keybinds] \\\n=\n ```
2020-10-22LibLine: Support multi-character key callbacksAnotherTest
2020-10-04Shell+LibLine: Record the input offset of completionsAnotherTest
This makes the completion entry retain information about how much of the suggestion was part of the string that caused the match.
2020-09-26LibLine: Add a setter for the cursor positionAnotherTest
2020-09-15LibCore: Make Core::Object properties more dynamicAndreas Kling
Instead of everyone overriding save_to() and set_property() and doing a pretty asymmetric job of implementing the various properties, let's add a bit of structure here. Object properties are now represented by a Core::Property. Properties are registered with a getter and setter (optional) in constructors. I've added some convenience macros for creating and registering properties, but this does still feel a bit bulky. We'll have to iterate on this and see where it goes.
2020-09-15LibLine: Implement ctrl-del: It does the same thing as alt-d, delete-wordNico Weber
2020-09-15LibLine: Support Alt + Arrow left/rightNico Weber
It does the same thing as Ctrl + Arrow left/right: Wordwise movement.
2020-09-15LibVT+LibLine: Use `1;mods` CSI parameters for ctrl/alt/shift-arrow keysNico Weber
xterms send a bitmask (+ 1) in the 2nd CSI parameter if "special" keys (arrow keys, pgup/down, etc) are sent with modifiers held down. Serenity's Terminal used to send ^[[O, which is a nonexistent escape sequence and a misread of VT100's ^[O (ie the '[' is replaced by 'O'). Since the xterm scheme also supports shift and alt modifiers, switch to that. More flexible, and makes ctrl-left/right and alt-left/right work in SerenityOS's bash port. Also do this for page up/down. No behavior change for SerenityOS's Shell.
2020-09-15LibLine: Parse CSI parameters and immediatesNico Weber
No behavior change, but it makes it easy to handle page up and page down if we wanted to make them do something in libline.
2020-09-07LibLine: Make ^R search match the input anywhere in a given lineAnotherTest
This is closer to what other line editors (and shells) do, and makes ^R actually useful.
2020-09-07LibLine: Disable editing events while searchingAnotherTest
This also makes the editor clean as many lines as the searching took, for instance, in the case of <C-r><C-c>ls<tab>, two lines should be cleaned, not just one. Fixes #3413.
2020-09-07LibLine: Treat ^D as EOF only when the buffer is emptyAnotherTest
As opposed to when the cursor is at the start of the buffer. Fixes #3421.
2020-09-06LibLine: Do not reset suggestion state immediately when encountering escAnotherTest
Some multikey binding might depend on the suggestion state, and this is indeed the case for 'reverse tab', which is just '^[[Z'. Fixes #3407.
2020-08-31LibLine: Reset suggestion state on any non-tab keyAnotherTest
This fixes the following (and more!): ```sh $ /bin/dis<tab><tab><backspace><backspace><backspace><backspace><tab> $ /bink_benchmark ```
2020-08-23LibLine: Correct weird arrow up/down behaviourAnotherTest
Fixes #3270. Also removes a parameter from search(), as it had no effect.
2020-08-21LibLine: Do not ignore Ctrl-C when buffer is emptyAnotherTest
I am told that this is how people test their shells. That's bizarre to me, but sure :^)
2020-08-21LibLine: Handle interrupts/window size changes internallyAnotherTest
2020-08-21LibLine: Handle Ctrl-C and Ctrl-D in a way similar to other line editorsAnotherTest
Makes C-c print "^C" and continue prompting on a new line. Also fixes a problem where an interrupted get_line() would need more read()'s than required to update the display.
2020-08-20LibLine: Initialize the search editor when entering searchAnotherTest
Prior to this, no keybinding were installed on the search editor, and so editing wasn't really possible. Also fixes <C-r> making infinite search editors.
2020-08-18LibLine: Make actual_rendered_string_metrics() staticAnotherTest
This function didn't depend on the editor itself.
2020-08-18LibLine: Setup the keybindings after initialisationAnotherTest
This makes the keybindings that depend on `m_termios` (^W, ^U, etc) work.
2020-08-18LibLine: Allow the user to override (or add) keybinds in the config fileAnotherTest
2020-08-18LibLine: Make (almost) all key actions configurableAnotherTest
This moves all internal functions to a new file, and defines the old keybinds with register_key_input_callback().
2020-08-18LibLine: Read configuration from a config fileAnotherTest
2020-08-17LibLine: Add a getter for num_lines/num_colsAnotherTest
2020-08-17LibLine: Uninitialized members in Editor, found by CoverityBrian Gianforcaro
2020-08-09LibLine: Only write to the standard errorAnotherTest
This fixes `> asdf` and allows for all sorts of stdout redirections.
2020-08-07LibLine: Add Ctrl-k shortcutNico Weber
Only does the 'delete to end of line' bit for now. No yank ring support yet.
2020-08-07LibLine: Add Alt-t shortcut for transposing wordsNico Weber
2020-08-06LibLine: Add binding for Alt-backspaceNico Weber
It backward-deletes a word like Ctrl-W, but it has a slightly different definition of what a word is. For example, with the caret behind `gcc -fsanitize=address`, Ctrl-W would delete '-fsanitize=address' but Alt-backspace would only delete 'address'.
2020-08-06LibLine: Fix "word" handling for alt-d/u/l/c/f/b and ctrl-left/rightNico Weber
All these shortcuts treat consecutive alnums as a word, not consecutive non-spaces. For example, `alias KILL='kill -9'` can now be written by typing it out lowercase, then hitting ctrl-a alt-f alt-u. Ctrl-W still treats a word as a sequence of non-spaces. Alt-backspace in a future patch will add the ability to backward-delete a word that's a sequence of alnums.
2020-08-06LibLine+Shell: Remove unused split_mechanismNico Weber
It was only read in should_break_token(), which had no callers. should_break_token() also got `foo\\ bar` and `"foo bar"` wrong.
2020-08-06LibLine: Add binding for Alt-.Nico Weber
2020-08-06LibLine: Add bindings for Alt-u, Alt-l, Alt-cNico Weber
2020-08-06LibLine: Add comments for which keys trigger VWERASE and VKILLNico Weber
2020-08-06LibLine: Add Alt-d binding to forward-delete a wordNico Weber
2020-08-06Shell: Start adding some alt shortcutsNico Weber
This adds Alt-f to go forward by a word, and Alt-b to go backward by a word (like ctrl-arrow-left / ctrl-arrow-right already do). Behind the scenes, alt-key is implemented by sending <esc> followed by that key, and typing <esc> f/b for moving by a word hence works too (in all other shells too, not just in Serenity's). While here, rename some InputState enum values to make the slightly expanded use of <esc> clearer, and expand a few comments.
2020-08-05Unicode: Try s/codepoint/code_point/g againNico Weber
This time, without trailing 's'. Ran: git grep -l 'codepoint' | xargs sed -ie 's/codepoint/code_point/g
2020-08-05Revert "Unicode: s/codepoint/code_point/g"Nico Weber
This reverts commit ea9ac3155d1774f13ac4e9a96605c0e85a8f299e. It replaced "codepoint" with "code_points", not "code_point".
2020-08-05LibLine: Check if operating on a TTY before using TTY featuresAnotherTest
This makes the line editor behave well when input is passed in from pipes as well.
2020-08-04LibLine: Removed unused private field m_prompt_metricsNico Weber
2020-08-03Unicode: s/codepoint/code_point/gAndreas Kling
Unicode calls them "code points" so let's follow their style.
2020-08-02AK: Fix overflow and mixed-signedness issues in binary_search() (#2961)Muhammad Zahalqa
2020-07-26Refactor: Change the AK::binary_search signature to use AK::Span.asynts
2020-07-13LibLine: Add Ctrl-N/P as history next/previous shortcutsNico Weber
2020-07-13LibLine: Move search-related updates into do_cursor_left/rightNico Weber
This way, arrow-left and arrow-right behave consistently with ctrl-b/ctrl-f.
2020-07-07LibLine: Add ctrl-t shortcut for transposing charactersNico Weber