aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/ex_cmds2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/ex_cmds2.c')
-rw-r--r--src/nvim/ex_cmds2.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 3120868350..dacdb27b08 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -447,21 +447,24 @@ void ex_listdo(exarg_T *eap)
if (curwin->w_p_wfb) {
if ((eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) && !eap->forceit) {
// Disallow :ldo if 'winfixbuf' is applied
- semsg("%s", e_winfixbuf_cannot_go_to_buffer);
+ emsg(_(e_winfixbuf_cannot_go_to_buffer));
return;
}
- if (win_valid(prevwin)) {
- // Change the current window to another because 'winfixbuf' is enabled
- curwin = prevwin;
- } else {
+ if (win_valid(prevwin) && !prevwin->w_p_wfb) {
+ // 'winfixbuf' is set; attempt to change to a window without it.
+ win_goto(prevwin);
+ }
+ if (curwin->w_p_wfb) {
// Split the window, which will be 'nowinfixbuf', and set curwin to that
- exarg_T new_eap = {
- .cmdidx = CMD_split,
- .cmd = "split",
- .arg = "",
- };
- ex_splitview(&new_eap);
+ win_split(0, 0);
+
+ if (curwin->w_p_wfb) {
+ // Autocommands set 'winfixbuf' or sent us to another window
+ // with it set. Give up.
+ emsg(_(e_winfixbuf_cannot_go_to_buffer));
+ return;
+ }
}
}