mirror of
https://github.com/neovim/neovim.git
synced 2025-09-18 01:08:20 +00:00
Merge #5561 'inccommand'
Initial work by: Robin Elrharbi-Fleury (Robinhola) Audrey Rayé (Adrey06) Philémon Hullot (DesbyP) Aymeric Collange (aym7) Clément Guyomard (Clement0) Major revisions by: KillTheMule Björn Linse <bjorn.linse@gmail.com> Justin M. Keyes <justinkz@gmail.com>
This commit is contained in:
@@ -5062,10 +5062,10 @@ void buf_reload(buf_T *buf, int orig_mode)
|
||||
* the old contents. Can't use memory only, the file might be
|
||||
* too big. Use a hidden buffer to move the buffer contents to.
|
||||
*/
|
||||
if (bufempty() || saved == FAIL)
|
||||
if (bufempty() || saved == FAIL) {
|
||||
savebuf = NULL;
|
||||
else {
|
||||
/* Allocate a buffer without putting it in the buffer list. */
|
||||
} else {
|
||||
// Allocate a buffer without putting it in the buffer list.
|
||||
savebuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
|
||||
if (savebuf != NULL && buf == curbuf) {
|
||||
/* Open the memline. */
|
||||
@@ -6342,27 +6342,24 @@ aucmd_prepbuf (
|
||||
aco->new_curbuf = curbuf;
|
||||
}
|
||||
|
||||
/*
|
||||
* Cleanup after executing autocommands for a (hidden) buffer.
|
||||
* Restore the window as it was (if possible).
|
||||
*/
|
||||
void
|
||||
aucmd_restbuf (
|
||||
aco_save_T *aco /* structure holding saved values */
|
||||
)
|
||||
/// Cleanup after executing autocommands for a (hidden) buffer.
|
||||
/// Restore the window as it was (if possible).
|
||||
///
|
||||
/// @param aco structure holding saved values
|
||||
void aucmd_restbuf(aco_save_T *aco)
|
||||
{
|
||||
int dummy;
|
||||
|
||||
if (aco->use_aucmd_win) {
|
||||
--curbuf->b_nwindows;
|
||||
/* Find "aucmd_win", it can't be closed, but it may be in another tab
|
||||
* page. Do not trigger autocommands here. */
|
||||
curbuf->b_nwindows--;
|
||||
// Find "aucmd_win", it can't be closed, but it may be in another tab page.
|
||||
// Do not trigger autocommands here.
|
||||
block_autocmds();
|
||||
if (curwin != aucmd_win) {
|
||||
FOR_ALL_TAB_WINDOWS(tp, wp) {
|
||||
if (wp == aucmd_win) {
|
||||
if (tp != curtab) {
|
||||
goto_tabpage_tp(tp, TRUE, TRUE);
|
||||
goto_tabpage_tp(tp, true, true);
|
||||
}
|
||||
win_goto(aucmd_win);
|
||||
goto win_found;
|
||||
@@ -6371,49 +6368,50 @@ aucmd_restbuf (
|
||||
}
|
||||
win_found:
|
||||
|
||||
/* Remove the window and frame from the tree of frames. */
|
||||
// Remove the window and frame from the tree of frames.
|
||||
(void)winframe_remove(curwin, &dummy, NULL);
|
||||
win_remove(curwin, NULL);
|
||||
aucmd_win_used = FALSE;
|
||||
last_status(FALSE); /* may need to remove last status line */
|
||||
restore_snapshot(SNAP_AUCMD_IDX, FALSE);
|
||||
(void)win_comp_pos(); /* recompute window positions */
|
||||
aucmd_win_used = false;
|
||||
last_status(false); // may need to remove last status line
|
||||
restore_snapshot(SNAP_AUCMD_IDX, false);
|
||||
(void)win_comp_pos(); // recompute window positions
|
||||
unblock_autocmds();
|
||||
|
||||
if (win_valid(aco->save_curwin))
|
||||
if (win_valid(aco->save_curwin)) {
|
||||
curwin = aco->save_curwin;
|
||||
else
|
||||
/* Hmm, original window disappeared. Just use the first one. */
|
||||
} else {
|
||||
// Hmm, original window disappeared. Just use the first one.
|
||||
curwin = firstwin;
|
||||
vars_clear(&aucmd_win->w_vars->dv_hashtab); /* free all w: variables */
|
||||
hash_init(&aucmd_win->w_vars->dv_hashtab); /* re-use the hashtab */
|
||||
}
|
||||
vars_clear(&aucmd_win->w_vars->dv_hashtab); // free all w: variables
|
||||
hash_init(&aucmd_win->w_vars->dv_hashtab); // re-use the hashtab
|
||||
curbuf = curwin->w_buffer;
|
||||
|
||||
xfree(globaldir);
|
||||
globaldir = aco->globaldir;
|
||||
|
||||
/* the buffer contents may have changed */
|
||||
// the buffer contents may have changed
|
||||
check_cursor();
|
||||
if (curwin->w_topline > curbuf->b_ml.ml_line_count) {
|
||||
curwin->w_topline = curbuf->b_ml.ml_line_count;
|
||||
curwin->w_topfill = 0;
|
||||
}
|
||||
} else {
|
||||
/* restore curwin */
|
||||
// restore curwin
|
||||
if (win_valid(aco->save_curwin)) {
|
||||
/* Restore the buffer which was previously edited by curwin, if
|
||||
* it was changed, we are still the same window and the buffer is
|
||||
* valid. */
|
||||
// Restore the buffer which was previously edited by curwin, if it was
|
||||
// changed, we are still the same window and the buffer is valid.
|
||||
if (curwin == aco->new_curwin
|
||||
&& curbuf != aco->new_curbuf
|
||||
&& buf_valid(aco->new_curbuf)
|
||||
&& aco->new_curbuf->b_ml.ml_mfp != NULL) {
|
||||
if (curwin->w_s == &curbuf->b_s)
|
||||
if (curwin->w_s == &curbuf->b_s) {
|
||||
curwin->w_s = &aco->new_curbuf->b_s;
|
||||
--curbuf->b_nwindows;
|
||||
}
|
||||
curbuf->b_nwindows--;
|
||||
curbuf = aco->new_curbuf;
|
||||
curwin->w_buffer = curbuf;
|
||||
++curbuf->b_nwindows;
|
||||
curbuf->b_nwindows++;
|
||||
}
|
||||
|
||||
curwin = aco->save_curwin;
|
||||
|
Reference in New Issue
Block a user