Put all the stuff that actually updates the buffer together, so we can
soft reload without triggering autocommands or doing redundant work.
The reason for the previous ordering was to allow a bit of parallelism
while the diff commands ran in the background. Let's try to preserve
that for map definitions by running them in parallel to the status
command instead.
I'm not sure why 'nomodifiable' was set after BufReadPost. Let's try
the more natural ordering and see if anything breaks.
Ran into an issue where a running Vim (Neovim 0.9.5) consistently
treated a relative path not as the file in the current directory, but as
a different open buffer that matched the file name. The relative path
was just for cosmetics; let's switch to absolute so Vim doesn't butcher
it.
Due to a regex not capturing (and concealing) all the spaces behind
the current file's line numbers, the close parentheses after the line
numbers are misaligned, and the blame buffer is made too wide.
The Include directive behaves very literally. The old implementation
assumed a level of encapsulation that just doesn't match the actual
implementation.
As of 10ed587f65 all output is captured to
a temp file before being displayed. When the output is not buffered, the
stdout/stderr callback is called to perform post-processing for each
output chunk. Instead, buffer all output and perform the post-processing
all at once.
This results in a substantial performance improvement for repositories
with many commits.
Use `:Gedit https://github.com/...` (or any other URL supported by an
installed :GBrowse provider) to edit the corresponding `fugitive://`
URL. The dictionary g:fugitive_url_origins maps between homepage URLs
and local repositories:
let g:fugitive_url_origins = {
'https://github.com/me/my-repo': '~/Projects/my-repo'}
It also checks the remotes of the repository that the currently edited
buffer belongs to.
This is an experimental prototype. That means no documentation, and no
guarantees about behavior. In particular, g:fugitive_url_origins and
the current contortions to leverage the existing :GBrowse API will
likely be dropped once a better API has been developed.
References: https://github.com/tpope/vim-fugitive/issues/2223
The second reload was short-circuited by a reltime() check, so no big
deal, but it does get in the way when trying to make the reload
conditional.
References: https://github.com/tpope/vim-fugitive/issues/2207
Best I can tell the ability to pass a line number or tab number argument
has never been used.
Cleaning this up in anticipating of adding actually useful arguments,
and in anticipation of that, I'm preemptively making ReloadWinStatus()
blindly relay any arguments to ReloadStatusBuffer().
References: https://github.com/tpope/vim-fugitive/issues/2207
In particular, if the first :Ggrep result is a binary file, skip over
it. I'm also leaning strongly towards not filling in the filename field
at all for binary files, but I'll address that separately.