0
0
mirror of https://github.com/vim/vim.git synced 2025-10-13 06:54:15 -04:00

patch 8.1.1140: not easy to find out what neighbors a window has

Problem:    Not easy to find out what neighbors a window has.
Solution:   Add more arguments to winnr(). (Yegappan Lakshmanan, closes #3993)
This commit is contained in:
Bram Moolenaar
2019-04-08 20:01:47 +02:00
parent 9845f36aa6
commit 46ad288b9b
6 changed files with 146 additions and 26 deletions

View File

@@ -13982,6 +13982,8 @@ get_winnr(tabpage_T *tp, typval_T *argvar)
twin = (tp == curtab) ? curwin : tp->tp_curwin;
if (argvar->v_type != VAR_UNKNOWN)
{
int invalid_arg = FALSE;
arg = tv_get_string_chk(argvar);
if (arg == NULL)
nr = 0; /* type error; errmsg already given */
@@ -13994,6 +13996,32 @@ get_winnr(tabpage_T *tp, typval_T *argvar)
nr = 0;
}
else
{
long count;
char_u *endp;
// Extract the window count (if specified). e.g. winnr('3j')
count = strtol((char *)arg, (char **)&endp, 10);
if (count <= 0)
count = 1; // if count is not specified, default to 1
if (endp != NULL && *endp != '\0')
{
if (STRCMP(endp, "j") == 0)
twin = win_vert_neighbor(tp, twin, FALSE, count);
else if (STRCMP(endp, "k") == 0)
twin = win_vert_neighbor(tp, twin, TRUE, count);
else if (STRCMP(endp, "h") == 0)
twin = win_horz_neighbor(tp, twin, TRUE, count);
else if (STRCMP(endp, "l") == 0)
twin = win_horz_neighbor(tp, twin, FALSE, count);
else
invalid_arg = TRUE;
}
else
invalid_arg = TRUE;
}
if (invalid_arg)
{
semsg(_(e_invexpr2), arg);
nr = 0;