Skip to content

Commit

Permalink
updated for version 7.3.938
Browse files Browse the repository at this point in the history
Problem:    Python: not easy to get to window number.
Solution:   Add vim.window.number. (ZyX)
  • Loading branch information
brammool committed May 12, 2013
1 parent 971db46 commit 6d21645
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 8 deletions.
4 changes: 4 additions & 0 deletions runtime/doc/if_pyth.txt
Expand Up @@ -396,6 +396,10 @@ Window attributes are:
|python-options|. If option is |global-local|
and local value is missing getting it will
return None.
number (read-only) Window number. The first window has number 1.
This is zero in case it cannot be determined
(e.g. when the window object belongs to other
tab page).
The height attribute is writable only if the screen is split horizontally.
The width attribute is writable only if the screen is split vertically.

Expand Down
14 changes: 6 additions & 8 deletions src/if_py_both.h
Expand Up @@ -1848,9 +1848,11 @@ WindowAttr(WindowObject *this, char *name)
else if (strcmp(name, "options") == 0)
return OptionsNew(SREQ_WIN, this->win, (checkfun) CheckWindow,
(PyObject *) this);
else if (strcmp(name, "number") == 0)
return PyLong_FromLong((long) get_win_number(this->win));
else if (strcmp(name,"__members__") == 0)
return Py_BuildValue("[ssssss]", "buffer", "cursor", "height", "vars",
"options");
"options", "number");
else
return NULL;
}
Expand Down Expand Up @@ -1974,17 +1976,13 @@ WindowRepr(PyObject *self)
}
else
{
int i = 0;
win_T *w;

for (w = firstwin; w != NULL && w != this->win; w = W_NEXT(w))
++i;
int w = get_win_number(this->win);

if (w == NULL)
if (w == 0)
vim_snprintf(repr, 100, _("<window object (unknown) at %p>"),
(self));
else
vim_snprintf(repr, 100, _("<window %d>"), i);
vim_snprintf(repr, 100, _("<window %d>"), w - 1);

return PyString_FromString(repr);
}
Expand Down
1 change: 1 addition & 0 deletions src/proto/window.pro
Expand Up @@ -74,4 +74,5 @@ int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id));
int match_delete __ARGS((win_T *wp, int id, int perr));
void clear_matches __ARGS((win_T *wp));
matchitem_T *get_match __ARGS((win_T *wp, int id));
int get_win_number __ARGS((win_T *wp));
/* vim: set ft=c : */
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -728,6 +728,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
938,
/**/
937,
/**/
Expand Down
17 changes: 17 additions & 0 deletions src/window.c
Expand Up @@ -6731,3 +6731,20 @@ get_match(wp, id)
return cur;
}
#endif

#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
int
get_win_number(win_T *wp)
{
int i = 1;
win_T *w;

for (w = firstwin; w != NULL && w != wp; w = W_NEXT(w))
++i;

if (w == NULL)
return 0;
else
return i;
}
#endif

0 comments on commit 6d21645

Please sign in to comment.