aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/commands.rs
Commit message (Collapse)AuthorAge
* Add an Amp-like jump commandPascal Kuthe2024-03-23
| | | | Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
* use slices instead of Rc for virtual textPascal Kuthe2024-03-23
|
* Reimplement tree motions in terms of syntax::TreeCursorMichael Davis2024-03-23
| | | | | | | This uses the new TreeCursor type from the parent commit to reimplement the tree-sitter motions (`A-p/o/i/n`). Other tree-sitter related features like textobjects are not touched with this change and will need a different, unrelated approach to solve.
* Fix repeat last motion for goto next/prev diagnostic (#9966)Jaakko Paju2024-03-23
|
* Prevent `shell_keep_pipe` from stopping on nonzero exit status code (#9817)Cyrill Schenkel2024-03-19
| | | | | | | | | | | | The `shell_impl` and `shell_impl_async` functions no longer return `success` because it was always `true`. If the command didn't succeed both functions would return an `Err`. This was also the reason, why `shell_keep_pipe` didn't work. It relied upon the value of `success` and aborted in case of an `Err`. It now removes any selection for which `shell_impl` returns `Err`. If the command always fails, the selections are preserved and an error message is displayed in the status bar.
* Keybind for Extend/shrink selection up and down (#9080)Emi2024-03-17
| | | | | | | | | | | | | | | | | | | * implement another selection modifying command * Selection feels more ergonomic in case of swapping the direction. This also fixes a problem when starting at an empty line. * rename select_line_up/down to select_line_above/below * apply clippy suggestion of using cmp instead of if-chain * revert `Extent` implementing `Clone/Copy` * move select_line functions below extend_line implementations * implement help add function, which saturates at the number of text lines --------- Co-authored-by: Emi <emanuel.boehm@gmail.com>
* Fix panic in surround_replace/delete nested multi-cursor (#9815)Mike Trinkala2024-03-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Test Document ------------- ``` {{ } } ``` Steps To Reproduce ------------------ 1. 2j # move_visual_line_down 1. C # copy_selection_on_next_line 1. mdm # surround_delete Debug ----- `assertion failed: last <= from', transaction.rs:597:13` Release ------- `called `Result::unwrap()` on an `Err` value: Char range out of bounds: char range 18446744073709551614..18446744073709551615, Rope/RopeSlice char length 7', ropey-1.6.1/src/rope.rs:546:37` Description ----------- Processing the surrounding pairs in order violates the assertion the ranges are ordered. To handle nested surrounds all positions have to be sorted. Also surround_replace has to track the proper replacement character for each position.
* Fix panic when using join_selections_space (#9783)Mike Trinkala2024-03-02
| | | | | | | | | | | | | | | | | | | | | | | | Joining lines with Alt-J does not properly select the inserted spaces when the selection contains blank lines. In the worst case it panics with an out of bounds index. thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Char index out of bounds: char index 11, Rope/RopeSlice char length 10' Steps to reproduce: * Create a new document ``` a b c d e ``` * % (Select all) * Alt-J (join and select the spaces)
* toggling of block comments (#4718)Gabriel Dinner-David2024-02-27
|
* switch to regex-cursor (#9422)Pascal Kuthe2024-02-26
|
* Scroll cursor and page together (neovim-like scrolling) (#8015)AlexanderDickie2024-02-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * neovim like scroll function * clear line annotations outside of move_vertically/_visual * add nvim scroll function to commands * assign nvim-scroll to C-d and C-u (half page scrolls) * dont remove backspace and space mapping * move non-softwrap logic to seperate function, call this in nvim-scroll fn * Revert "move non-softwrap logic to seperate function, call this in nvim-scroll fn" This reverts commit e4905729c338a2260e6981f1d8fac022897b4191. * Revert "clear line annotations outside of move_vertically/_visual" This reverts commit 1df3fefe55afc840d1ab5094b2116d1127fc363f. * add TODO for when inline diagnostics gets merged * move nvim-scroll logic into scroll(), dont respect scrolloff * run cargo fmt * run cargo clippy * update documenation for Ctrl-d and Ctrl-u remap
* Add changes to history when paste-replacing (#9625)Mihir Gadgil2024-02-13
|
* Use range positions to determine insert_newline motion (#9448)Waleed Dahshan2024-01-29
| | | | | | | * use anchor and head positions to determine motion * use range cursor to decide extending or shifting * add condition to cursor moving back on normal
* refactor completion and signature help using hooksPascal Kuthe2024-01-23
|
* Add hook/event systemPascal Kuthe2024-01-23
|
* Create helix-stdx crate for stdlib extensionsMichael Davis2024-01-18
| | | | | | | | | | | | | helix-stdx is meant to carry extensions to the stdlib or low-level dependencies that are useful in all other crates. This commit starts with all of the path functions from helix-core and the CWD tracking that lived in helix-loader. The CWD tracking in helix-loader was previously unable to call the canonicalization functions in helix-core. Switching to our custom canonicalization code should make no noticeable difference though since `std::env::current_dir` returns a canonicalized path with symlinks resolved (at least on unix).
* Address clippy lints (#9371)Daniel Sedlak2024-01-17
|
* feat(lsp): implement show document request (#8865)Matouš Dzivjak2024-01-17
| | | | | | | | | | | | | | | | | | | | | | * feat(lsp): implement show document request Implement [window.showDocument](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#window_showDocument) LSP server-sent request. This PR builds on top of helix-editor#5820, moves the external-URL opening functionality into shared crate-level function that returns a callback that is now used by both the `open_file` command as well as the window.showDocument handler if the URL is marked as external. * add return * use vertical split * refactor --------- Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
* Initialize diagnostics when opening a document (#8873)Philipp Mildenberger2024-01-09
|
* Update goto_file docs (#8563) (#9001)jw0132024-01-08
| | | | | | Make the pluralization of files and selections consistent to emphasize the 1-to-1 relation between files and selections. The prior wording with plural "files" and singular "selection" can mislead users into thinking the command can open multiple files from a single selection.
* Make the indent heuristic configurableDaniel Ebert2023-12-15
|
* Join empty lines with only one space in `join_selections` (#8989)TornaxO72023-12-06
| | | | | | | | | | | | | | | | | | * fix: #8977 fixes the issue that lines with only spaces are getting joined as well * reverting some renamings * improve empty line check * adding integration test * reverting code block * fix conditon check for line end * applying suggested style
* bump MSRV to 1.70.0 (#8877)Cole Helbling2023-11-25
| | | | | | | | | | | | | | | | | | | | | | | | | * rust-toolchain.toml: bump MSRV to 1.70.0 With Firefox 120 released on 21 November 2023, the MSRV is now 1.70.0. * Fix cargo fmt with Rust 1.70.0 * Fix cargo clippy with Rust 1.70.0 * Fix cargo doc with Rust 1.70.0 * rust-toolchain.toml: add clippy component * .github: bump dtolnay/rust-toolchain to 1.70 * helix-term: bump rust-version to 1.70 * helix-view/gutter: use checked_ilog10 to count digits * helix-core/syntax: use MAIN_SEPARATOR_STR constant * helix-view/handlers/dap: use Display impl for displaying process spawn error * WIP: helix-term/commands: use checked math to assert ranges cannot overlap
* open urls with goto_file command (#5820)Matouš Dzivjak2023-11-21
| | | | | | | | | | | | | | | | * feat(commands): open urls with goto_file command Add capability for `goto_file` command to open an URL under cursor. Fixes: https://github.com/helix-editor/helix/issues/1472 Superseds: https://github.com/helix-editor/helix/pull/4398 * open files inside helix * address code review * bump deps * fix based on code review comments
* make increment/decrement exit select modeRyan Mehri2023-11-18
|
* make switch case commands exit select modeRyan Mehri2023-11-18
|
* make align exit select modeRyan Mehri2023-11-18
|
* make replace with clipboard commands exit select modeRyan Mehri2023-11-18
|
* make paste commands exit select modeRyan Mehri2023-11-18
|
* make indent/unindent exit select modeRyan Mehri2023-11-18
|
* swap yank command registers (#8708)Skyler Hawthorne2023-11-04
| | | | #8703 swapped the `+` and `*` registers, but did not swap them in the corresponding yank commands.
* Add helix-specific ignore files (#8099)Paul Olteanu2023-10-21
|
* Maintain the current cursor's position and view in the vsplit/hsplit ↵Lorenzo Bellina2023-09-04
| | | | | | commands too (#8109) Co-authored-by: Benjamin Bouvier <public@benj.me>
* Fix find commands for buffers with non-LF line-endings (#8111)woojiq2023-09-03
|
* transition to nucleo for fuzzy matching (#7814)Pascal Kuthe2023-08-30
| | | | | | | | | | | | | | | | | | * transition to nucleo for fuzzy matching * drop flakey test case since the picker streams in results now any test that relies on the picker containing results is potentially flakely * use crates.io version of nucleo * Fix typo in commands.rs Co-authored-by: Skyler Hawthorne <skyler@dead10ck.com> --------- Co-authored-by: Skyler Hawthorne <skyler@dead10ck.com>
* goto_file_impl: use relative path to open file (#7965)Mike2023-08-21
| | | Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
* goto_file: open picker if a directory is selected (#7909)Andrés Cabero2023-08-15
| | | | | * feat: open file picker on directories using goto_file (gf) * remove helper and call to canonicalize
* Make editor remember the latest search register (#5244)Jonathan LEI2023-08-14
|
* Fix YAML auto indentSkyler Hawthorne2023-08-10
| | | | | | | | | YAML indents queries are tweaked to fix auto indent behavior. A new capture type `indent.always` is introduced to address use cases where combining indent captures on a single line is desired. Fixes #6661
* Align view for background buffer opened with `alt-ret` (#7691)woojiq2023-08-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * fix(picker): `alt-ret' changes cursor pos of current file, not new one Closes #7673 * fix other pickers * symbol pickers * diagnostick pickers This is done using the already patched `jump_to_location` method. * fix global and jumplist pickers * use `view` as old_id; make `align_view` method of `Action` * test(picker): basic <alt-ret> functionality * fix: picker integrational test * fix nit Co-authored-by: Michael Davis <mcarsondavis@gmail.com> --------- Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
* fix range formatting error message typo (#7823)Austin L Wolfgram2023-08-04
|
* feat: smart_tabSkyler Hawthorne2023-08-01
| | | | | | Implement `smart_tab`, which optionally makes the tab key run the `move_parent_node_start` command when the cursor has non- whitespace to its left.
* add node boundary movementSkyler Hawthorne2023-08-01
|
* Add yank_to_clipboard commands, bind to `<space>y` by defaultMichael Davis2023-07-31
| | | | | | | | The clipboard special registers are able to retain multiple selections and also join the value when copying it to the clipboard. So by default we should yank regularly to the '*' and '+' registers. That will have the same behavior for the clipboards but will allow pasting multiple selections if the clipboard doesn't change between yanks.
* Reimplement clipboard commands in terms of special regsMichael Davis2023-07-31
| | | | | | | | | | Since the clipboard provider now lives on the Registers type, we want to eliminate it from the Editor. We can do that and clean up the commands that interact with the clipboard by calling regular yank, paste and replace impls on the clipboard special registers. Eventually the clipboard commands could be removed once macro keybinding is supported.
* Preview the latest value for regular registersMichael Davis2023-07-31
| | | | | | | | | | | | | | | | | | | | | | | This fixes a discrepancy between regular registers which are used for yanking multiple values (for example via `"ay`) and regular registers that store a history of values (for example `"a*`). Previously, the preview shown in `select_register`'s infobox would show the oldest value in history. It's intuitive and useful to see the most recent value pushed to the history though. We cannot simply switch the preview line from `values.first()` to `values.last()`: that would fix the preview for registers used for history but break the preview for registers used to yank multiple values. We could push to the beginning of the values with `Registers::push` but this is wasteful from a performance perspective. Instead we can have `Registers::read` return an iterator that returns elements in the reverse order and reverse the values in `Register::write`. This effectively means that `push` adds elements to the beginning of the register's values. For the sake of the preview, we can switch to `values.last()` and that is then correct for both usage- styles. This also needs a change to call-sites that read the latest history value to switch from `last` to `first`.
* commands: Allow using selected register where hardcodedMichael Davis2023-07-31
| | | | | These snippets use hardcoded registers but it can be useful to be able to specify a register for these commands.
* Use refactored Registers typeMichael Davis2023-07-31
| | | | | | | This is an unfortunately noisy change: we need to update virtually all callsites that access the registers. For reads this means passing in the Editor and for writes this means handling potential failure when we can't write to a clipboard register.
* enhanced `surround_replace` to provide visual feedback (#7588)Alex Vinyals2023-07-13
|
* Auto indent change if selection is linewise (#7316)Tudyx2023-07-11
|