Mirror of the Vim source from https://github.com/vim/vim
Revision | bcda71c8977605ed2052a70008b571fa5fca9808 (tree) |
---|---|
Time | 2022-11-19 22:15:03 |
Author | Bram Moolenaar <Bram@vim....> |
Commiter | Bram Moolenaar |
patch 9.0.0909: error message for layout change does not match action
Commit: https://github.com/vim/vim/commit/9fda81515b26ecd3c1e99f95334aaed3f7b6fea3
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Nov 19 13:14:10 2022 +0000
@@ -6055,7 +6055,7 @@ | ||
6055 | 6055 | emsg(_(e_cannot_close_autocmd_or_popup_window)); |
6056 | 6056 | return; |
6057 | 6057 | } |
6058 | - if (window_layout_locked()) | |
6058 | + if (window_layout_locked(CMD_close)) | |
6059 | 6059 | return; |
6060 | 6060 | |
6061 | 6061 | need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1); |
@@ -6229,7 +6229,7 @@ | ||
6229 | 6229 | cmdwin_result = K_IGNORE; |
6230 | 6230 | else if (first_tabpage->tp_next == NULL) |
6231 | 6231 | emsg(_(e_cannot_close_last_tab_page)); |
6232 | - else if (!window_layout_locked()) | |
6232 | + else if (!window_layout_locked(CMD_tabclose)) | |
6233 | 6233 | { |
6234 | 6234 | tab_number = get_tabpage_arg(eap); |
6235 | 6235 | if (eap->errmsg == NULL) |
@@ -6265,7 +6265,7 @@ | ||
6265 | 6265 | cmdwin_result = K_IGNORE; |
6266 | 6266 | else if (first_tabpage->tp_next == NULL) |
6267 | 6267 | msg(_("Already only one tab page")); |
6268 | - else if (!window_layout_locked()) | |
6268 | + else if (!window_layout_locked(CMD_tabonly)) | |
6269 | 6269 | { |
6270 | 6270 | tab_number = get_tabpage_arg(eap); |
6271 | 6271 | if (eap->errmsg == NULL) |
@@ -6298,7 +6298,7 @@ | ||
6298 | 6298 | void |
6299 | 6299 | tabpage_close(int forceit) |
6300 | 6300 | { |
6301 | - if (window_layout_locked()) | |
6301 | + if (window_layout_locked(CMD_tabclose)) | |
6302 | 6302 | return; |
6303 | 6303 | |
6304 | 6304 | // First close all the windows but the current one. If that worked then |
@@ -6346,7 +6346,7 @@ | ||
6346 | 6346 | static void |
6347 | 6347 | ex_only(exarg_T *eap) |
6348 | 6348 | { |
6349 | - if (window_layout_locked()) | |
6349 | + if (window_layout_locked(CMD_only)) | |
6350 | 6350 | return; |
6351 | 6351 | # ifdef FEAT_GUI |
6352 | 6352 | need_mouse_correct = TRUE; |
@@ -6373,7 +6373,7 @@ | ||
6373 | 6373 | // ":hide" or ":hide | cmd": hide current window |
6374 | 6374 | if (!eap->skip) |
6375 | 6375 | { |
6376 | - if (window_layout_locked()) | |
6376 | + if (window_layout_locked(CMD_hide)) | |
6377 | 6377 | return; |
6378 | 6378 | #ifdef FEAT_GUI |
6379 | 6379 | need_mouse_correct = TRUE; |
@@ -1,5 +1,5 @@ | ||
1 | 1 | /* window.c */ |
2 | -int window_layout_locked(void); | |
2 | +int window_layout_locked(enum CMD_index cmd); | |
3 | 3 | win_T *prevwin_curwin(void); |
4 | 4 | void do_window(int nchar, long Prenum, int xchar); |
5 | 5 | void get_wincmd_addr_type(char_u *arg, exarg_T *eap); |
@@ -756,6 +756,14 @@ | ||
756 | 756 | bwipe! |
757 | 757 | au! BufEnter |
758 | 758 | endfor |
759 | + | |
760 | + new | |
761 | + new | |
762 | + autocmd BufEnter * ++once close | |
763 | + call assert_fails('close', 'E1312:') | |
764 | + | |
765 | + au! BufEnter | |
766 | + only | |
759 | 767 | endfunc |
760 | 768 | |
761 | 769 | " Closing a window might cause an endless loop |
@@ -696,6 +696,8 @@ | ||
696 | 696 | static int included_patches[] = |
697 | 697 | { /* Add new patch number below this line */ |
698 | 698 | /**/ |
699 | + 909, | |
700 | +/**/ | |
699 | 701 | 908, |
700 | 702 | /**/ |
701 | 703 | 907, |
@@ -111,13 +111,15 @@ | ||
111 | 111 | |
112 | 112 | /* |
113 | 113 | * When the window layout cannot be changed give an error and return TRUE. |
114 | + * "cmd" indicates the action being performed and is used to pick the relevant | |
115 | + * error message. | |
114 | 116 | */ |
115 | 117 | int |
116 | -window_layout_locked(void) | |
118 | +window_layout_locked(enum CMD_index cmd) | |
117 | 119 | { |
118 | 120 | if (split_disallowed > 0 || close_disallowed > 0) |
119 | 121 | { |
120 | - if (close_disallowed == 0) | |
122 | + if (close_disallowed == 0 && cmd == CMD_tabnew) | |
121 | 123 | emsg(_(e_cannot_split_window_when_closing_buffer)); |
122 | 124 | else |
123 | 125 | emsg(_(e_not_allowed_to_change_window_layout_in_this_autocmd)); |
@@ -2573,7 +2575,7 @@ | ||
2573 | 2575 | emsg(_(e_cannot_close_last_window)); |
2574 | 2576 | return FAIL; |
2575 | 2577 | } |
2576 | - if (window_layout_locked()) | |
2578 | + if (window_layout_locked(CMD_close)) | |
2577 | 2579 | return FAIL; |
2578 | 2580 | |
2579 | 2581 | if (win->w_closing || (win->w_buffer != NULL |
@@ -4062,7 +4064,7 @@ | ||
4062 | 4064 | emsg(_(e_invalid_in_cmdline_window)); |
4063 | 4065 | return FAIL; |
4064 | 4066 | } |
4065 | - if (window_layout_locked()) | |
4067 | + if (window_layout_locked(CMD_tabnew)) | |
4066 | 4068 | return FAIL; |
4067 | 4069 | |
4068 | 4070 | newtp = alloc_tabpage(); |