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