fix: use relative path when finding file
style: cargo fmt
_
chore: better error message
refactor: rename to `blame_line`
fix: use line of primary cursor for git blame
feat: basic implementation of blocking Blame handler
feat: implement basic virtual text (end of line blame)
feat: figure out how to draw stuff at the end of lines
feat: implement end of line virtual text for the current line
feat: implement inline git blame
chore: clean up
chore: remove unused import
_
chore: set `blame` to `false` by default
docs: document `[editor.vcs.blame]`
chore: add progress
perf: use background task for worker
_
chore: remove unnecessary panic!s
chore: remove commented code
refactor: remove some layers of abstraction
refactor: remove nesting
feat: [editor.vcs] -> [editor.version-control]
fix: account for inserted and deleted lines
_
refactor: extract into a `blame` module
feat: allow using custom commit format
feat: allow more customizability for inline blame
test: add tests for custom inline commit parsser
refactor: rename `blame` -> `blame_line`
_
_
test: create helper macros for tests
test: make test syntax more expressive. Allow specifying line numbers
that just got added
test: with interspersed lines
feat: add `line_blame` static command
_
test: add an extra test case
test: add ability to have `delete`d lines
test: fix on windows (?)
test: `delete` test case
test: add extra step to test case
test: add documentation for macro
refactor: use `hashmap!` macro
refactor: collapse match arm
fix: remove panic
perf: update inline git blame every 150 milliseconds instead of on each
command
test: add attributes on blocks
style: move function earlier in the file
perf: cache blame results in a hashma
chore: remove log statements
chore: clean up.
ALSO: removes checking for inline blame every N seconds.
_
perf: use mspc instead of busy-wait
docs: add information why we don't optimize the repo
_
test: add back the commented out tests
chore: comment out cfg(not(windows))
test: add extra history to blame test
docs: remove incorrect static command
_
test: disable test on windows
feat: send inline blame event update when reloading or saving the
document
feat: rename `version-control` -> `inline-blame`
feat: update theme key used for inline-blame
chore: remove unused #![allow]
chore:
style: remove accidental formatting
docs: remove incorrect key
perf: Use a single `ThreadSafeRepository` instead of re-constructing it
each time
feat: add `inline_blame` static command bound to `space + B`
style: revert formatting in keymap.md
chore: do not compute blame for document when changing config option
This isn't needed anymore because the inline-blame will be computed
regardless if `inline_blame.enable` is set or not
style: remove newline
refactor: use `fold` instead of loop
chore: clean up
feat: log error forl line blame when it happens
feat: improve message when we don't have the blame
We know that we don't have it because we're still calculating it.
feat: do not render inline blame for empty lines
_
feat: do not show blame output when we are on a hunk that was added
refactor: remove additional wrapper methods
fix
_
feat: more readable time for git blame
chr
feat:
feat: improved error handling
fix: path separator on Windows
test: disable on windows
refactor: move pretty date function formatter into `helix-stdx`
perf: do not use a syscall on each render
chore: add TODO comment to update gix version
chore: use `gix::path` conversion from Path -> BString
_
_
chore: do not update file blame on document save
This is not needed because when we write the file, we don't make a new
commit so the blame will not change.
refactor: use statics to get time elapsed instead of editor state
refactor: do not use custom event, use handler instead
fix: do not spawn a new handler
docs: correct examples for `editor.inline-blame.format`
docs: correct static command name
refactor: add comments, and improve variable names
I didn't really understand this function when I made it. Was just
copy-pasted from end of line diagnostics
I wanted to know what this is actually doing, so I investigated and
while doing this also added comments and improved names of variables
so others can understand too
fix: time in future is accounted for
perf: inline some functions that are called in only 1 place, during a
render loop
perf: add option to disable requesting inline blame in the background
fix: request blame again when document is reloaded
chore: inline blame is disabled with request on demand
feat: when requesting line blame with "blame on demand", show blame in
status
perf: use less allocations
perf: less allocations in `format_relative_time`
_
_
_
_
docs: correct name of command
_
feat: improve error message
_
feat: rename enum variants for inline blame behaviour
docs: improve description of behaviour field
Render rulers before the cursor to ensure that the cursor, when over
a ruler, is not hidden from view. Without this, you typically end up
with 1) foreground text that is the same as the background if the
ruler doesn't already have a foreground and 2) no visible cursor,
because the ruler's background color took precedence. By moving the
rulers before the cursor, this ensures that the theme is still rendered
more or less the way one would visually expect things to turn out.
`:lsp-stop` should consider only the set of active language servers for
a document. `:lsp-restart` though may be used to start up a language
server that crashed or was manually stopped, so it needs to consider the
language servers in config instead.
This change inlines the `valid_lang_servers` function into `:lsp-stop`
and `:lsp-restart` and changes `:lsp-restart` to check the doc's config
rather than active language servers. `:lsp-restart` now also does not
need to clone the language server names as strings since it borrows from
the config and arguments rather than `Document`. The completer has also
been split into two - one matching active language servers, used by
`:lsp-stop`, and the other matching configured language servers, used by
`:lsp-restart`.
This also removes the part of `:lsp-restart` which bailed if a language
server failed to be restarted (for example because it is not installed).
There might be multiple language servers configured for a language and
only one installed. In that case the `:lsp-restart` should be considered
successful even if not all servers could be started. Bailing prevented
any language servers which could start from being attached to the
document. Instead errors are collected and emitted at the end.
Path completion items always have documentation but future core (i.e.
non-LSP) completions may not always have documentation - for example
word completion from the current buffer.
This simplifies the hover component by eagerly converting all
`lsp::Hover` responses into `Markdown`s. Previously we cached the
current `Markdown` and created a new `Markdown` when switching the
active response. Instead we can consume the `lsp::Hover` and avoid some
clones of its inner types.
The Hover component is used as the inner contents of a Popup. The Popup
should be doing calculations based on whether popup_borders is
configured and not Hover. This fixes an issue with hover rendering when
the popup border option is enabled for popups.
Fixes#12742
The new `RopeSliceExt::ceil_char_boundary` from the parent commits can
be used to implement `RopeSliceExt::byte_to_next_char` when used with
`RopeSlice::byte_to_char`. That function had only one caller and that
caller will eventually disappear when we switch to Ropey v2 and drop
character indexing, so we can drop `byte_to_next_char` now and replace
its caller with `byte_to_char` plus `ceil_char_boundary`.
This change keeps the unit tests for `byte_to_next_char` and checks them
against a polyfill of `byte_to_char` plus `ceil_char_boundary` to ensure
that `byte_to_next_char`'s intended behavior is not changed.
Instantiating EditorView is a lot of machinery which is unnecessary:
the default keymap is exposed through the `default` function in the
keymap module.
`set_string_truncated` renders the entire string while ignoring
newlines, so if the diagnostic's message contains multiple lines it
produces messages like 'first linesecond line'.
To avoid these run-ons, this commit renders each line separately,
inserting double spaces for disambiguation.
When pressing tab at the edge of the screen, Helix panics in debug mode
subtracting position.col - self.offset.col.
To correctly account for graphemes that are partially visible,
column_in_bounds takes a width and returns whether the whole range is
in bounds.
Co-authored-by: Rose Hogenson <rosehogenson@posteo.net>
The only caller of `from_path_buf` was removed in the parent commit
allowing us to drop owned variant of path's `Cow`. With this change we
never need to allocate in the picker preview callback.
* feat: pertty header
* 更新 themes.md
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
---------
Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
* replicate t-monaghan's changes
* remove View.offset in favour of Document.view_data.view_position
* improve access patterns for Document.view_data
* better borrow checker wrangling with doc_mut!()
* reintroduce ensure_cursor_in_view in handle_config_events
since we sorted out the borrow checker issues using partial borrows,
there's nothing stopping us from going back to the simpler implementation
* introduce helper functions on Document .view_offset, set_view_offset
* fix rebase breakage
Pastes are probably the last edit one means to make before the query
should run so it doesn't need to be debounced.
This makes global search much snappier for example when accepting the
history suggestion from the '/' register or pasting a pattern from the
clipboard or a register.
Two changes from the parent commit:
* Save only the `Picker::primary_query` - so you don't save other parts
of the query, for example `%path foo.rs` while in `global_search`.
* Move the saving out of the `if let Some(option) = self.selection()`
block. So when you hit enter you save to history whether you have a
selection or not. If you want to close the picker without saving to
the register you can use C-c or Esc instead.
The Prompt is set up to push the current line to history when hitting
Enter but the Picker doesn't pass the Enter event down to the Prompt
(for good reason: we don't want the Prompt's behavior of changing
completions when we hit a path separator). We should save the Prompt's
line to its configured history register when hitting Enter when there
is a selection in the Picker.
This currently only applies to `global_search`'s Picker since it's the
only Picker to use `Picker::with_history_register`.