aboutsummaryrefslogtreecommitdiff
path: root/helix-term
Commit message (Collapse)AuthorAge
* Split helix_core::find_root and helix_loader::find_local_config_dirs (#3929)Riccardo Binetti2022-09-23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Split helix_core::find_root and helix_loader::find_local_config_dirs The documentation of find_root described the following priority for detecting a project root: - Top-most folder containing a root marker in current git repository - Git repository root if no marker detected - Top-most folder containing a root marker if not git repository detected - Current working directory as fallback The commit contained in https://github.com/helix-editor/helix/pull/1249 extracted and changed the implementation of find_root in find_root_impl, actually reversing its result order (since that is the order that made sense for the local configuration merge, from innermost to outermost ancestors). Since the two uses of find_root_impl have different requirements (and it's not a matter of reversing the order of results since, e.g., the top repository dir should be used by find_root only if there's not marker in other dirs), this PR splits the two implementations in two different specialized functions. In doing so, find_root_impl is removed and the implementation is moved back in find_root, moving it closer to the documented behaviour thus making it easier to verify it's actually correct * helix-core: remove Option from find_root return type It always returns some result, so Option is not needed
* Document MSRV policy (#3913)Pascal Kuthe2022-09-23
|
* Deduplicate regexes in search_selection command (#3941)A-Walrus2022-09-22
|
* Improve keymap errors from command typos (#3931)Michael Davis2022-09-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Improve keymap errors from command typos Currently, opening helix with a config containing a bad command mapping fails with a cryptic error. For example, say we have a config (bad.toml) with a command name that doesn't exist: [keys.normal] b = "buffer_close" # should be ":buffer-close" When we `hx -c bad.toml`, we get... > Bad config: data did not match any variant of untagged enum KeyTrie for key `keys.normal` at line 1 column 1 > Press <ENTER> to continue with default config This is because of the way that Serde tries to deserialize untagged enums such as `helix_term::keymap::KeyTrie`. From the Serde docs[^1]: > Serde will try to match the data against each variant in order and the > first one that deserializes successfully is the one returned. `MappableCommand::deserialize` fails (returns an Err variant) when a command does not exist. Serde interprets this as the `KeyTrie::Leaf` variant failing to match and declares that the input data doesn't "match any variant of untagged enum KeyTrie." Luckily the variants of KeyTrie are orthogonal in structure: we can tell them apart by the type hints from a `serde::de::Visitor`. This change uses a custom Deserialize implementation along with a Visitor that discerns which variant of the KeyTrie applies. With this change, the above failure becomes: > Bad config: No command named 'buffer_close' for key `keys.normal.b` at line 2 column 5 > Press <ENTER> to continue with default config We also provide more explicit information about the expectations on the field. A config with an unexpected type produces a message with that information and the expectation: [keys.normal] b = 1 > Bad config: invalid type: integer `1`, expected a command, list of commands, or sub-keymap for key `keys.normal.b` at line 2 column 5 > Press <ENTER> to continue with default config [^1]: https://serde.rs/enum-representations.html#untagged * Update helix-term/src/keymap.rs Co-authored-by: Ivan Tham <pickfire@riseup.net> Co-authored-by: Ivan Tham <pickfire@riseup.net>
* add :lsp-restart command (#3435)Filipe Azevedo2022-09-20
|
* Fix preview bug (#3644)Joe2022-09-20
| | | | | * Fix preview bug * Add comment to empty case
* diagnostics: Use Vec<Tag> instead of Option<Vec<Tag>>Blaž Hrastnik2022-09-20
|
* Track source and tags in diagnostics (#3898)Luke Cycon2022-09-20
|
* Add command line parameter to specify log file (#3807)Tobias Hunger2022-09-20
| | | | | | | | | | | * Add command line parameter to specify log file I had the logs of my debug helix mixed in with the logs from the production helix. Add a `--log` command line argument to redirect any logs to other files, making my debugging easier :-) * Update completion files with `--log` argument
* Remove border from code actions popup (#3444)A-Walrus2022-09-13
|
* Render html <code> tags as code in markdown (#3425)A-Walrus2022-09-13
|
* Remove the .txt suffix from tutorBlaž Hrastnik2022-09-11
| | | | | | | | | | | | The tutor file is loaded as .txt which can potentially spawn a language server. Then the path is unset, but the LS remains active. This can cause panics since updates are now submitted for a doc with no path. As a quick workaround we remove the extension which should avoid detection. Fixes #3730
* Improve error handling for config-reload (#3668)A-Walrus2022-09-10
| | | | | | | * Don't change config to default when refreshing invalid config * Propely handle theme errors with config-reload * Extract refresh theme into seperate function
* Switch to Result for invalid languageA-Walrus2022-09-10
|
* Add error handling to set language commandA-Walrus2022-09-10
| | | | | If you type a nonexistant language an appropriate message will show, and the language won't be changed.
* Add `text` to language completerA-Walrus2022-09-10
|
* Remove default insert mode movement bindingsSkyler Hawthorne2022-09-08
| | | | | | | | | | Helix is first and foremost a modal editor. Willingness to support non-modal editing is there, but it is not one that should be encouraged with the default settings. There are an increasing number of users who are stumbling because they are trying to use Helix as a non-modal editor, so this is an effort to encourage new users to stop and take notice that Helix has a different paradigm than VSCode, Sublime, etc. Users can still add these bindings back to their own configs if they wish.
* Fix :reflow panic by enusring cursor in view (#3733)A-Walrus2022-09-07
|
* Remove LspNotDefined, instead return an Option<>Blaž Hrastnik2022-09-07
|
* build(deps): bump once_cell from 1.13.1 to 1.14.0 (#3715)dependabot[bot]2022-09-05
| | | Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix: View needs to retain the original scroll offset on splitBlaž Hrastnik2022-09-05
|
* Fix off-by-one in extend_line_above (#3689)Michael Davis2022-09-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | `extend_line_above` (and `extend_line` when facing backwards) skip a line when the current range does not fully cover a line. Before this change: foo b#[|a]#r baz With `extend_line_above` or `extend_line` selected the line above. #[|foo bar]# baz Which is inconsistent with `extend_line_below`. This commit changes the behavior to select the current line when it is not already selected. foo #[|bar]# baz Then further calls of `extend_line_above` extend the selection up line-wise.
* fix: lsp: Don't send didOpen events for documents with no URLBlaž Hrastnik2022-09-04
| | | | Fixes #3683
* minor: Simplify another document_mut statementBlaž Hrastnik2022-09-04
|
* Fix cargo doc warnings, and add GitHub action to ensure it (#3650)A-Walrus2022-09-03
|
* Expand doc/view macros to allow fetching specific idBlaž Hrastnik2022-09-03
| | | | This simplifies the code and hides away unwraps
* initial implementation of bufferline (#2759)aaron4042022-09-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * initial implementation of bufferline * fixed lint * changed to 'bufferline', added enum for config modes, some cleanup * fixed lint * added file modification indicator * removed redundant code, added proper themeing with fallback, changed 'file modified' indicator * remove commented code * Update helix-term/src/ui/editor.rs simplify text and offset computation Co-authored-by: Gokul Soumya <gokulps15@gmail.com> * add ui.bufferline.background key for themes Co-authored-by: lazytanuki <43273245+lazytanuki@users.noreply.github.com> * address PR comments * Update helix-term/src/ui/editor.rs * simplify computation of editor area: * change to set_stringn to avoid overflow * Update configuration.md Updates documentation to reflect decision re: defaulting to never showing bufferline. * addressed pr comments * fix build error * address pr comments * revert accidental change Co-authored-by: Gokul Soumya <gokulps15@gmail.com> Co-authored-by: lazytanuki <43273245+lazytanuki@users.noreply.github.com> Co-authored-by: Seth Bromberger <sbromberger@users.noreply.github.com>
* Fix closing buffer with custom keymap (#3633)A-Walrus2022-09-01
| | | | | * Fix closing buffer with custom keymap * Add comment explaining if
* Make mode editor-wide rather than per-documentBlaž Hrastnik2022-09-01
|
* fix: prevents storing last prompt if is top of stack (#3609)Saber Haj Rabiee2022-09-01
|
* Fix Prompt::handle_event compilationMichael Davis2022-08-31
|
* fix: Recalculate completion when going through prompt history (#3193)Frojdholm2022-08-31
| | | | | | | | | | | | | | | | | | | | | | | | * fix: Recalculate completion when going through prompt history * Update completion when the prompt line is changed It should not be possible to update the line without also updating the completion since the completion holds an index into the line. * Fix Prompt::with_line recalculate completion with_line was the last function where recalculate completion had to be done manually. This function now also recalculates the completion so that it's impossible to forget. * Exit selection when recalculating completion Keeping the selection index when the completion has been recalculated doesn't make sense. This clears the selection automatically, removing most needs to manually clear it. * Remove &mut on save_filter Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
* Show clipboard info in --health output (#2947)Gokul Soumya2022-08-31
| | | | | | | * Show clipboard info in --health output * health: Separate 'languages' category from 'all' Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
* Share the restore_term code between panic and normal exits (#3612)Charlie Groves2022-08-31
| | | | | | | | It was starting to diverge as the normal exit code was restoring the prompt but the panic code wasn't, and the panic code was disabling bracketed paste but the normal code wasn't. This changes the panic path slightly in that we won't disable raw mode if exiting alternate screen and disabling bracketed paste fails. If that happens, things are so busted I don't think it matters anyway.
* Avoid command execution hooks on closed docs (#3613)Michael Davis2022-08-31
| | | | | | | | | Fixes a panic with a config like: [keys.normal.space] x = [":buffer-close"] by bailing out of the command-execution handling if the document doesn't exist after handling a command.
* Refactor goto_ts_object_impl as a motion (#3264)Michael Davis2022-08-31
| | | | | | | | | This refactor changes the overall structure of the goto_ts_object_impl command without removing any functionality from its behavior. The refactored motion: * acts on all selections instead of reducing to one selection * may be repeated with the `repeat_last_motion` (A-.) command * informs the user when the syntax-tree is not accessible in the current buffer
* Discard LSP publishDiagnostic when LS is not initialized (#3403)Michael Davis2022-08-31
| | | | | | | | | | | | | | | | | This is invalid according to the [LSP spec]: > In addition the server is not allowed to send any requests > or notifications to the client until it has responded with an > InitializeResult, with the exception that during the initialize > request the server is allowed to send the notifications > window/showMessage, window/logMessage and telemetry/event as well > as the window/showMessageRequest request to the client. So we should discard the message when the language server is not yet initialized. This can happen if the server sends textDocument/publishDiagnostics before responding to the initialize request. clojure-lsp appears to exhibit this behavior in the wild. [LSP Spec]: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initialize
* jumplist: Add documents to view history (#3593)Michael Davis2022-08-31
| | | | | | | | | | | | | | This change adds documents to the view's document history Vec. (This is used by `ga` for example to access the last buffer.) Previously, a sequence like so would have confusing behavior: 1. Open file A: any document with an active language server 2. Find some definition that lives in another file - file B - with `gd` 3. Jump back in the jumplist with `C-o` to file A 4. Use `ga` intending to switch back to file B The behavior prior to this change was that `ga` would switch to file A: you could not use `ga` to switch to file B.
* Move mode transition logic to handle_keymap_event() (#2634)Lucy2022-08-31
| | | | | Co-authored-by: Blaž Hrastnik <blaz@mxxn.io> Co-authored-by: Blaž Hrastnik <blaz@mxxn.io>
* Use the original document and view for mode transition hooks (#3508)Michael Davis2022-08-31
| | | | | | | When changing focus, the lookup with `current!` may change the view and end up executing mode transition hooks on the newly focused view. We should use the same view and document to execute mode transition hooks so that switching away from a view triggers history save points.
* fix: Recalculate completion after pasting into promptBlaž Hrastnik2022-08-30
|
* completion: remove_follow links on filename_implBlaž Hrastnik2022-08-30
| | | | | We don't need to follow links since we're only scanning the current directory level (non-recursive).
* Fix process spawning error handling (#3349)PiergiorgioZagaria2022-08-30
| | | | | * Fix process spawning error handling * Log stderr in any case
* Derive Document language name from languages.toml name key (#3338)Michael Davis2022-08-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | * Derive Document language name from `languages.toml` `name` key This changes switches from deriving the language name from the `languages.toml` `scope` key to `name` (`language_id` in the `LanguageConfiguration` type). For the most part it works to derive the language name from scope by chopping off `source.` or `rsplit_once` on `.` but for some languages we have now like html (`text.html.basic`), it doesn't. This also should be a more accurate fallback for the `language_id` method which is used in LSP and currently uses the `rsplit_once` strategy. Here we expose the language's name as `language_name` on `Document` and replace ad-hoc calculations of the language name with the new method. This is most impactful for the `file-type` statusline element which is using `language_id`. * Use `Document::language_name` for the `file-type` statusline element The `file-type` indicator element in the statusline was using `Document::language_id` which is meant to be used to for telling Language Servers what language we're using. That works for languages with `language-server` configurations in `languages.toml` but shows text otherwise. The new `Document::language_name` method from the parent commit is a more accurate way to determine the language.
* let extend-line respect range direction (#3046)Bob2022-08-29
| | | | | | | | | | | | | * let extend-line respect range direction * fix extend above logic * keep `x` existing binding * Update book/src/keymap.md Co-authored-by: Ivan Tham <pickfire@riseup.net> Co-authored-by: Ivan Tham <pickfire@riseup.net>
* Add bracketed paste (#3233)Charlie Groves2022-08-29
|
* Fix markdown indented code block rendering (#3503)Clay2022-08-24
|
* fix: Reset document mode when losing focusBlaž Hrastnik2022-08-23
| | | | Fixes #3090
* Editor: remove duplication for view focus/swap commandsBlaž Hrastnik2022-08-23
|
* Reduce health tick widthIvan Tham2022-08-23
| | | | Use the same tick as book to reduce margin of whitespace errors.