Commit Graph

311 Commits (73572b77802d5ae2f31b5f060170c89b79c4ff67)

Author SHA1 Message Date
Gokul Soumya b1cb98283d Fix indent regression issue with o, O
Indents were no longer respected with `o` and `O`. Using counts resulted
in multiple cursors in the same line instead of cursors on each line.

Introduced by 47d2e3ae
3 years ago
wojciechkepka a6d39585d8 Add `work_done_token` as parameter to lsp methods 3 years ago
Wojciech Kępka 41b07486ad
Fix expansion of `~` (#284)
* Fix expansion of `~`, dont use directory relative to cwd.

* Add `expand_tilde`

* Bring back `canonicalize_path`, use `expand_tilde` to `normalize`

* Make `:open ~` completion work

* Fix clippy

* Fold home dir into tilde in Document `realitve_path`
3 years ago
Benoît CORTIER 8664d70e73 Replace `Editor::current` by a macro
This is necessary to workaround ownership issues across function calls.
The issue notably arised when implementing the registers into `Editor`
and I was getting annoyed again when implementing copy/pasting into
system clipboard.
The problem is addressed by using macro calls instead of function calls.
There is no notable side effect.
3 years ago
Jan Hrastnik 8bccd6df30 applied changes from pr review 3 years ago
PabloMansanet f7e00cf720
Configurable keys 2 (Mapping keys to commands) (#268)
* Add convenience/clarity wrapper for Range initialization

* Add keycode parse and display methods

* Add remapping functions and tests

* Implement key remapping

* Add remapping book entry

* Use raw string literal for toml

* Add command constants

* Make command functions private

* Map directly to commands

* Match key parsing/displaying to Kakoune

* Formatting pass

* Update documentation

* Formatting

* Fix example in the book

* Refactor into single config file

* Formatting

* Refactor configuration and add keymap newtype wrappers

* Address first batch of PR comments

* Replace FromStr with custom deserialize
3 years ago
Gokul Soumya 47d2e3aefa Let o, O take counts for multiple cursors 3 years ago
Gokul Soumya 20d6b202d5 Fix cursor position bugs related to o and O
- `O` at the beginning of file didn't move cursor
- `o` and `O` messed up cursor position with multiple cursors

Fixes #127
3 years ago
Jan Hrastnik 9c3eadb2e4 fixed some problems from rebasing 3 years ago
Jan Hrastnik 7cf0fa05a4 doc.line_ending() now returns &'static str 3 years ago
Jan Hrastnik a4f5a0134e trying out line ending helper functions in commands.rs 3 years ago
Benoît CORTIER 6bdf609caa Remove RwLock for registers
Registers are stored inside `Editor` and accessed without `RwLock`.
To work around ownership, I added a sister method to `Editor::current`:
`Editor::current_with_context`. I tried to modify `Editor::current`
directly but it's used at a lot of places so I reverted into this for
now at least.
3 years ago
Benoît CORTIER 6fb2d2679d Use `_impl` suffix instead of `_` prefix
Helpers / internal implementations where using the `_` prefix.
However, this prefix also suppress unused warnings.
I suggest we use the `_impl` suffix instead.
3 years ago
Ivan Tham 05ed3e8fb8 Remove unused variables 3 years ago
Nathan Vegdahl 7c2fb92c91 Report indent style when calling indent-style with no arguments.
Also print an error message when the argument is malformed.
3 years ago
Nathan Vegdahl d415a666fe Address PR comments.
* Clean up "indent-style" command argument parsing.
* Adjust command's name to match the style of other commands.
* Add a "0" alias to the command, for tabs indent style.
3 years ago
Nathan Vegdahl 358ea6a37c Implement command to change the indent-style setting of a document. 3 years ago
Blaž Hrastnik e819121f6e fix: wq/wqa functions need to wait for save to finish before closing 3 years ago
Andreas Liljeqvist 5d23667a26 fix offset by one problem in replace_with_yanked 3 years ago
Wojciech Kępka df217f71c1 Fix `wq` 3 years ago
Wojciech Kępka b9100fbd44 Fix clippy 3 years ago
Wojciech Kępka 52d3c29244 Deduplicate code 3 years ago
Wojciech Kępka 17c9a8499e Add `qa` and `qa!` 3 years ago
Wojciech Kępka 62e6232a32 Update write_all 3 years ago
Wojciech Kępka d8b5d1181f Add `Copy` derive to `PromptEvent` 3 years ago
Wojciech Kępka b500a2a138 commands: Add more write commands 3 years ago
Ivan Tham 9640ed1425 Add clarification to last buffer 3 years ago
Robin 9baf1ecc90
add symbol picker (#230)
* add symbol picker

use the lsp document_symbol request

* fix errors from merging in master

* add docs for symbol picker
3 years ago
Robin 44cc0d8eb0
add alternate file (#223)
* add alternate file

inspired by vim ctrl-6/kak ga commands. the alternate file is kept per view

* apply feedback from #223

* rename to last_accessed

* add ga doc

* add fail message for ga
3 years ago
Wojciech Kępka c754df12b3
lsp: Check bounds when converting lsp positions (#204)
* lsp: Make position conversion funcs return `Option`

* Add tests

* Fixes

* Revert pos_to_lsp_pos to panic
3 years ago
Blaž Hrastnik 278361a086 Only auto-format for certain languages
Fixes #53
Fixes #207
3 years ago
Jakub Bartodziej 69fe46a122
Add :earlier and :later commands that can be used to navigate the full edit history. (#194)
* Disable deleting from an empty buffer which can cause a crash.

* Improve on the fix for deleting from the end of the buffer.

* Clean up leftover log.

* Avoid theoretical underflow.

* Implement :before which accepts a time interval and moves the editor to
the closest history state to the commit of the current time minus that
interval. Current time is now by default, or the commit time if :before
has just been used.

* Add :earlier an :later commands that can move through
the edit history and retrieve changes hidded by undoing
and commiting new changes. The commands accept a number
of steps or a time period relative to the currrent change.

* Fix clippy lint error.

* Remove the dependency on parse_duration, add a custom parser instead.

* Fix clippy errors.

* Make helix_core::history a public module.

* Use the helper for getting the current document and view.

* Handled some PR comments.

* Fix the logic in :later n.

Co-authored-by: Ivan Tham <pickfire@riseup.net>

* Add an alias for :earlier.

Co-authored-by: Ivan Tham <pickfire@riseup.net>

* Add an alias for later.

Co-authored-by: Ivan Tham <pickfire@riseup.net>

* Run cargo fmt.

* Add some tests for earlier and later.

* Add more tests and restore the fix for later that diappeared somehow.

* Use ? instead of a match on an option.

Co-authored-by: Ivan Tham <pickfire@riseup.net>

* Rename to UndoKind.

* Remove the leftover match.

* Handle a bunch of review comments.

* More systemd.time compliant time units and additional description for the new commands.

* A more concise rewrite of the time span parser using ideas from PR discussion.

* Replace a match with map_err().

Co-authored-by: Ivan Tham <pickfire@riseup.net>

Co-authored-by: Jakub Bartodziej <jqb@google.com>
Co-authored-by: Ivan Tham <pickfire@riseup.net>
3 years ago
PabloMansanet 86af55c379
Movement fixes, refactor and unit test suite (#217)
* Add convenience/clarity wrapper for Range initialization

* Test horizontal moves

* Add column jumping tests

* Add failing movement conditions for multi-word moves

* Refactor skip_over_next

* Add complex forward movement unit tests

* Add strict whitespace checks and edge case tests

* Restore formatting

* Remove unused function

* Add empty test case for deletion and fix nth_prev_word_boundary

* Add tests for backward motion

* Refactor word movement

* Address review comments and finish refactoring backwards move

* Finish unit test suite

* Fmt pass

* Fix lint erors

* Clean up diff restoring bad 'cargo fmt' actions

* Simplify movement closures (thanks Pickfire)

* Fmt pass

* Replace index-based movement with iterator based movement, ensuring that each move incurs a single call to the RopeSlice API

* Break down tuple function

* Extract common logic to all movement functions

* Split iterator helpers away into their own module

* WIP reducing clones

* Operate on spans

* WIP simplifying iterators

* Simplify motion helpers

* Fix iterator

* Fix all unit tests

* Refactor and simplify

* Simplify fold
3 years ago
Wojciech Kępka 0c2b99327a commands: Handle `t<ENTER>` as till newline 3 years ago
Robin van Dijk c0d32707d0 move to first nonwhitespace on shift-i
This matches the behaviour in vim and kak
3 years ago
Ivan Tham 6b3c9d8ed3 Fix jump behavior, goto_implementation now jump
Better jump behavior since we override the first jump if it's on the
first document. At the same time, ctrl-i is now working with gd jumps.
3 years ago
Zheming Li ae51065213 Support go to line 1 3 years ago
Wojciech Kępka 4e3a343602 Make `r<ENTER>` work 3 years ago
Wojciech Kępka 81e02e1ba4 Remove unwanted `as_str` 3 years ago
Wojciech Kępka c349ceb61f Don't replace newlines 3 years ago
Wojciech Kępka 2e4a338944 Add bounds checks to replace 3 years ago
Wojciech Kępka 9c83a98469 commands: Replace all characters in selection 3 years ago
Wojciech Kępka c978d811d9 Cleanup find_first_non_whitespace_char funcs 3 years ago
Wojciech Kępka 48df05b16d commands: Add goto first non-whitespace char of line 3 years ago
Kirawi b873fb9897
Fix Unicode (#135)
* init

* wip

* wip

* fix unicode break

* fix unicode break

* Update helix-core/src/transaction.rs

Co-authored-by: Benoît Cortier <benoit.cortier@fried-world.eu>

* clippy

* fix

* add changes

* added test

* wip

* wip

* wip

* wip

* fix

* fix view

* fix #88

Co-authored-by: Benoît Cortier <benoit.cortier@fried-world.eu>
3 years ago
Wojciech Kępka c65b4dea09 commands: Add replace with yanked as `R` 3 years ago
Blaž Hrastnik 0201ef9205 ui: completion: Use the correct type_name
Fixes #166
3 years ago
Blaž Hrastnik 9821beb5c4 Make gh/gl extend selection in select mode 3 years ago
Benoît CORTIER 68affa3c59 Implement register selection
User can select register to yank into with the " command.
A new state is added to `Editor` and `commands::Context` structs.
This state is managed by leveraging a new struct `RegisterSelection`.
3 years ago
Blaž Hrastnik 8d6fad4cac lsp: Provide workspace root on client.initialize() 3 years ago
Blaž Hrastnik 4f561e93b8 View mode: Use saturating_sub when calculating first_col 3 years ago
Blaž Hrastnik 01b1bd15a1 commands: use chars().count() over .len() on strings 3 years ago
Wojciech Kępka 16b1cfa3be Add diagnostics keybindings 3 years ago
Ivan Tham 2066e866c7 Add spc w w for window mode 3 years ago
Ivan Tham 40744ce835 Add ctrl-w in insert mode
It seemed to panic when I pressed too many times, but that is from
lsp side.
3 years ago
Ivan Tham 8c2fa12ffc Add window mode
Fix #93
3 years ago
ahkrr 444cd0b068 fix: make find_prev_char and till_prev_char work
Bevore this PR `commands::find_prev_char` and `commands::till_prev_char` were triggerable through keys 
but `seach::find_nth_next()` was hardcoded in `_find_char`. 
The passed `fn` was nerver used. With this PR the passed `fn` is used.
The change in search.rs resolves an off by one error in the behivor of `find_nth_prev`
3 years ago
Kirawi c17dcb8633
Fixing Multiple Panics (#121)
* init

* wip

* wip
3 years ago
Antoni Stevenet a1f4b8f92b
Add home-end keymaps, (as kakoune/vim do) (#83)
* add home-end keymaps

* implement extend methods for extend_line_start, extend_line_end

* add home-end mappings to keymaps.md

* add ^-$ extend mappings for extend mode

* pass cargo linter
3 years ago
notoria adcfcf9044 Replace ^/$ with gh/gl 3 years ago
Blaž Hrastnik 4f0e3aa948 Implement gt/gm/gb, remap goto tYpe to gy 3 years ago
Blaž Hrastnik bd4552cd2b scroll: Fix the clamping 3 years ago
Blaž Hrastnik 8afd4e1bc2 Exit select mode on delete_selection 3 years ago
Kevin Sjöberg fdb5bfafae Limit goto count
Giving a goto count greater than the number of lines in the buffer
would cause Helix to panic.
3 years ago
Jakub Bartodziej 09a7db637e Avoid theoretical underflow. 3 years ago
Jakub Bartodziej 31ed4db153 Clean up leftover log. 3 years ago
Jakub Bartodziej 3c5dfb0633 Improve on the fix for deleting from the end of the buffer. 3 years ago
Jakub Bartodziej 6cbc0aea92 Disable deleting from an empty buffer which can cause a crash. 3 years ago
Blaž Hrastnik cbb3ebafdc Support ctrl-f and ctrl-b to page up/down, fixes #41 3 years ago
Daichi Takamiya 4d12c7c3cf Fix empty command cause panic 3 years ago
Blaž Hrastnik ce25aa951e Allow setting a filepath on :write 3 years ago
Blaž Hrastnik d8e16554bf Don't crash if no filename specified on open 3 years ago
Blaž Hrastnik 2c48d65b15 Format document on save 3 years ago
Blaž Hrastnik 094203c74e Update deps, introduce the new tree-sitter lifetimes 3 years ago
Blaž Hrastnik f1dc25a774 Support count for indent too 3 years ago
Blaž Hrastnik 4f335fabc8 Fix unindent to work with tabs, take a count 3 years ago
Blaž Hrastnik 9c24f1ec0e Drop selection_lines completely, change move_line_start binding 3 years ago
Blaž Hrastnik f99a683991 Fix crash if appending at end of line on the last line of the file 3 years ago
Blaž Hrastnik 5a245b83a0 Append :fmt as a separate history state 3 years ago
Blaž Hrastnik 54de768915 Fix crash if typing | (regex or) into the prompt.
Zero-width matches at the start of the file make no sense to us.
3 years ago
Blaž Hrastnik 5e6b46e7c5 Use array::IntoIter. 3 years ago
Blaž Hrastnik 354b822d21 Fix crash on xa<Enter> if we were on the last line. 3 years ago
Blaž Hrastnik fae2127a11 Drop cx.view_id, it was used before we had cx.current. 3 years ago
Blaž Hrastnik 0e5b421646 When calculating a new selection, we need to take newly inserted text into account. 3 years ago
Blaž Hrastnik 4a9d1163e0 Hacky way to specify indent scopes per language via toml configs.
Can't do it via a scm query nicely because it returns an iterator over
all the matches, whereas we want to traverse the tree ourselves.

Can't extract the pattern data from a parsed query either.

Oh well, toml files for now.
3 years ago
Blaž Hrastnik e4ff75b4d4 Add :fmt (formats the whole file). 3 years ago
Blaž Hrastnik 1255bcb8a3 Simplify the compositor callback. 3 years ago
Blaž Hrastnik ed827e993f Fix jumplist jumps, keep the selection on vsplit. 3 years ago
Blaž Hrastnik caf4349925 Remove some of the panics, just log instead. 3 years ago
Blaž Hrastnik d24844b73d ui: Render command mode doc text if available. 3 years ago
Blaž Hrastnik d4d5e88ade Show a message if no definition was found. 3 years ago
Blaž Hrastnik 1be8b2005d Extract a method for view alignment. 3 years ago
Blaž Hrastnik adaf861881 vsplit can now split scratch buffers. 3 years ago
Blaž Hrastnik ff84c8e394 Command mode: Per command completers. 3 years ago
Blaž Hrastnik 87e7a0de3f Save space by having the command hashmap use const static refs. 3 years ago
Blaž Hrastnik 9604a0c294 Improve command mode handling. 3 years ago
Blaž Hrastnik 243456a583 Disallow quitting on last view if unsaved changes present. 3 years ago
Blaž Hrastnik c0a8b81487 Only send the document close event if we're closing the underlying buffer 3 years ago
Blaž Hrastnik c20813690f View::new is infallible, so is editor.switch/new_file. 3 years ago
Blaž Hrastnik f2c79e245b Allow switching views back to scratch buffers. 3 years ago