Mercurial > vim
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)) |