comparison src/evalfunc.c @ 16271:243cdc183ec9 v8.1.1140

patch 8.1.1140: not easy to find out what neighbors a window has commit https://github.com/vim/vim/commit/46ad288b9b2a6eb0430cf802ff5ce68a58629897 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Apr 8 20:01:47 2019 +0200 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 https://github.com/vim/vim/issues/3993)
author Bram Moolenaar <Bram@vim.org>
date Mon, 08 Apr 2019 20:15:05 +0200
parents d3377393e3d9
children 514e42de6a1d
comparison
equal deleted inserted replaced
16270:749a7c03de8d 16271:243cdc183ec9
13980 char_u *arg; 13980 char_u *arg;
13981 13981
13982 twin = (tp == curtab) ? curwin : tp->tp_curwin; 13982 twin = (tp == curtab) ? curwin : tp->tp_curwin;
13983 if (argvar->v_type != VAR_UNKNOWN) 13983 if (argvar->v_type != VAR_UNKNOWN)
13984 { 13984 {
13985 int invalid_arg = FALSE;
13986
13985 arg = tv_get_string_chk(argvar); 13987 arg = tv_get_string_chk(argvar);
13986 if (arg == NULL) 13988 if (arg == NULL)
13987 nr = 0; /* type error; errmsg already given */ 13989 nr = 0; /* type error; errmsg already given */
13988 else if (STRCMP(arg, "$") == 0) 13990 else if (STRCMP(arg, "$") == 0)
13989 twin = (tp == curtab) ? lastwin : tp->tp_lastwin; 13991 twin = (tp == curtab) ? lastwin : tp->tp_lastwin;
13992 twin = (tp == curtab) ? prevwin : tp->tp_prevwin; 13994 twin = (tp == curtab) ? prevwin : tp->tp_prevwin;
13993 if (twin == NULL) 13995 if (twin == NULL)
13994 nr = 0; 13996 nr = 0;
13995 } 13997 }
13996 else 13998 else
13999 {
14000 long count;
14001 char_u *endp;
14002
14003 // Extract the window count (if specified). e.g. winnr('3j')
14004 count = strtol((char *)arg, (char **)&endp, 10);
14005 if (count <= 0)
14006 count = 1; // if count is not specified, default to 1
14007 if (endp != NULL && *endp != '\0')
14008 {
14009 if (STRCMP(endp, "j") == 0)
14010 twin = win_vert_neighbor(tp, twin, FALSE, count);
14011 else if (STRCMP(endp, "k") == 0)
14012 twin = win_vert_neighbor(tp, twin, TRUE, count);
14013 else if (STRCMP(endp, "h") == 0)
14014 twin = win_horz_neighbor(tp, twin, TRUE, count);
14015 else if (STRCMP(endp, "l") == 0)
14016 twin = win_horz_neighbor(tp, twin, FALSE, count);
14017 else
14018 invalid_arg = TRUE;
14019 }
14020 else
14021 invalid_arg = TRUE;
14022 }
14023
14024 if (invalid_arg)
13997 { 14025 {
13998 semsg(_(e_invexpr2), arg); 14026 semsg(_(e_invexpr2), arg);
13999 nr = 0; 14027 nr = 0;
14000 } 14028 }
14001 } 14029 }