Mercurial > vim
changeset 4379:a2f03b41dca7 v7.3.938
updated for version 7.3.938
Problem: Python: not easy to get to window number.
Solution: Add vim.window.number. (ZyX)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sun, 12 May 2013 19:00:41 +0200 |
parents | b6df5640cd64 |
children | a8ec47f1aa54 |
files | runtime/doc/if_pyth.txt src/if_py_both.h src/proto/window.pro src/version.c src/window.c |
diffstat | 5 files changed, 31 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/if_pyth.txt +++ b/runtime/doc/if_pyth.txt @@ -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.
--- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -1848,9 +1848,11 @@ WindowAttr(WindowObject *this, char *nam 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; } @@ -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; - - if (w == NULL) + int w = get_win_number(this->win); + + 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); }
--- a/src/proto/window.pro +++ b/src/proto/window.pro @@ -74,4 +74,5 @@ int match_add __ARGS((win_T *wp, char_u 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 : */
--- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 938, +/**/ 937, /**/ 936,
--- a/src/window.c +++ b/src/window.c @@ -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