comparison src/popupwin.c @ 20474:3fe45aa3bbc5 v8.2.0791

patch 8.2.0791: a second popup window with terminal causes trouble Commit: https://github.com/vim/vim/commit/b5383b174b2436b556f76f14badb1c1f55d6d8f6 Author: Bram Moolenaar <Bram@vim.org> Date: Mon May 18 19:46:48 2020 +0200 patch 8.2.0791: a second popup window with terminal causes trouble Problem: A second popup window with terminal causes trouble. Solution: Disallow opening a second terminal-popup window. (closes https://github.com/vim/vim/issues/6101, closes #6103) Avoid defaulting to an invalid line number.
author Bram Moolenaar <Bram@vim.org>
date Mon, 18 May 2020 20:00:03 +0200
parents 4c317d8c1051
children 77995c0a9e78
comparison
equal deleted inserted replaced
20473:992024e2f885 20474:3fe45aa3bbc5
1756 wp->w_popup_padding[i] = (i & 1) ? 1 : 0; 1756 wp->w_popup_padding[i] = (i & 1) ? 1 : 0;
1757 } 1757 }
1758 } 1758 }
1759 1759
1760 /* 1760 /*
1761 * Return TRUE if there is any popup window with a terminal buffer.
1762 */
1763 static int
1764 popup_terminal_exists(void)
1765 {
1766 win_T *wp;
1767 tabpage_T *tp;
1768
1769 FOR_ALL_POPUPWINS(wp)
1770 if (wp->w_buffer->b_term != NULL)
1771 return TRUE;
1772 FOR_ALL_TABPAGES(tp)
1773 FOR_ALL_POPUPWINS_IN_TAB(tp, wp)
1774 if (wp->w_buffer->b_term != NULL)
1775 return TRUE;
1776 return FALSE;
1777 }
1778
1779 /*
1761 * popup_create({text}, {options}) 1780 * popup_create({text}, {options})
1762 * popup_atcursor({text}, {options}) 1781 * popup_atcursor({text}, {options})
1763 * etc. 1782 * etc.
1764 * When creating a preview or info popup "argvars" and "rettv" are NULL. 1783 * When creating a preview or info popup "argvars" and "rettv" are NULL.
1765 */ 1784 */
1784 if (buf == NULL) 1803 if (buf == NULL)
1785 { 1804 {
1786 semsg(_(e_nobufnr), argvars[0].vval.v_number); 1805 semsg(_(e_nobufnr), argvars[0].vval.v_number);
1787 return NULL; 1806 return NULL;
1788 } 1807 }
1808 #ifdef FEAT_TERMINAL
1809 if (buf->b_term != NULL && popup_terminal_exists())
1810 {
1811 emsg(_("E861: Cannot open a second popup with a terminal"));
1812 return NULL;
1813 }
1814 #endif
1789 } 1815 }
1790 else if (!(argvars[0].v_type == VAR_STRING 1816 else if (!(argvars[0].v_type == VAR_STRING
1791 && argvars[0].vval.v_string != NULL) 1817 && argvars[0].vval.v_string != NULL)
1792 && !(argvars[0].v_type == VAR_LIST 1818 && !(argvars[0].v_type == VAR_LIST
1793 && argvars[0].vval.v_list != NULL)) 1819 && argvars[0].vval.v_list != NULL))