mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
Whitespace cleanup.
This commit is contained in:
@@ -1089,17 +1089,12 @@ Before (beta) release 7.3:
|
||||
- Add fixes for 7.2 to version7.txt
|
||||
- Add hg history to version7.txt
|
||||
- Remove UF_VERSION_CRYPT_PREV and UF_VERSION_PREV.
|
||||
- Documentation for Python 3 support.
|
||||
- Build the MS-Windows version with Python 2.6.5 and 3.1.2?
|
||||
|
||||
Before release 7.3:
|
||||
- Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23)
|
||||
|
||||
Vim 7.3:
|
||||
Needs some work:
|
||||
- Have a look at patch to enable screen access from Python. (Marko Mahnic,
|
||||
2010 Apr 12)
|
||||
|
||||
|
||||
More patches:
|
||||
- Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
|
||||
Needs a few tests.
|
||||
|
405
src/if_lua.c
405
src/if_lua.c
@@ -229,33 +229,44 @@ static const luaV_Reg luaV_dll[] = {
|
||||
|
||||
static HINSTANCE hinstLua = 0;
|
||||
|
||||
static void end_dynamic_lua (void) {
|
||||
if (hinstLua) {
|
||||
static void
|
||||
end_dynamic_lua(void)
|
||||
{
|
||||
if (hinstLua)
|
||||
{
|
||||
FreeLibrary(hinstLua);
|
||||
hinstLua = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int lua_link_init (char *libname, int verbose) {
|
||||
static int
|
||||
lua_link_init(char *libname, int verbose)
|
||||
{
|
||||
const luaV_Reg *reg;
|
||||
if (hinstLua) return OK;
|
||||
hinstLua = LoadLibrary(libname);
|
||||
if (!hinstLua) {
|
||||
if (verbose) EMSG2(_(e_loadlib), libname);
|
||||
if (!hinstLua)
|
||||
{
|
||||
if (verbose)
|
||||
EMSG2(_(e_loadlib), libname);
|
||||
return FAIL;
|
||||
}
|
||||
for (reg = luaV_dll; reg->func; reg++) {
|
||||
for (reg = luaV_dll; reg->func; reg++)
|
||||
{
|
||||
if ((*reg->func = GetProcAddress(hinstLua, reg->name)) == NULL) {
|
||||
FreeLibrary(hinstLua);
|
||||
hinstLua = 0;
|
||||
if (verbose) EMSG2(_(e_loadfunc), reg->name);
|
||||
if (verbose)
|
||||
EMSG2(_(e_loadfunc), reg->name);
|
||||
return FAIL;
|
||||
}
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
int lua_enabled (int verbose) {
|
||||
int
|
||||
lua_enabled(int verbose)
|
||||
{
|
||||
return lua_link_init(DYNAMIC_LUA_DLL, verbose) == OK;
|
||||
}
|
||||
|
||||
@@ -264,19 +275,27 @@ int lua_enabled (int verbose) {
|
||||
|
||||
/* ======= Internal ======= */
|
||||
|
||||
static void luaV_newmetatable (lua_State *L, const char *tname) {
|
||||
static void
|
||||
luaV_newmetatable(lua_State *L, const char *tname)
|
||||
{
|
||||
lua_newtable(L);
|
||||
lua_pushlightuserdata(L, (void *) tname);
|
||||
lua_pushvalue(L, -2);
|
||||
lua_rawset(L, LUA_REGISTRYINDEX);
|
||||
}
|
||||
|
||||
static void *luaV_toudata (lua_State *L, int ud, const char *tname) {
|
||||
static void *
|
||||
luaV_toudata(lua_State *L, int ud, const char *tname)
|
||||
{
|
||||
void *p = lua_touserdata(L, ud);
|
||||
if (p != NULL) { /* value is userdata? */
|
||||
if (lua_getmetatable(L, ud)) { /* does it have a metatable? */
|
||||
|
||||
if (p != NULL) /* value is userdata? */
|
||||
{
|
||||
if (lua_getmetatable(L, ud)) /* does it have a metatable? */
|
||||
{
|
||||
luaV_getfield(L, tname); /* get metatable */
|
||||
if (lua_rawequal(L, -1, -2)) { /* MTs match? */
|
||||
if (lua_rawequal(L, -1, -2)) /* MTs match? */
|
||||
{
|
||||
lua_pop(L, 2); /* MTs */
|
||||
return p;
|
||||
}
|
||||
@@ -285,15 +304,20 @@ static void *luaV_toudata (lua_State *L, int ud, const char *tname) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void *luaV_checkudata (lua_State *L, int ud, const char *tname) {
|
||||
static void *
|
||||
luaV_checkudata(lua_State *L, int ud, const char *tname)
|
||||
{
|
||||
void *p = luaV_toudata(L, ud, tname);
|
||||
if (p == NULL) luaL_typerror(L, ud, tname);
|
||||
return p;
|
||||
}
|
||||
|
||||
static void luaV_pushtypval (lua_State *L, typval_T *tv) {
|
||||
static void
|
||||
luaV_pushtypval(lua_State *L, typval_T *tv)
|
||||
{
|
||||
if (tv == NULL) luaL_error(L, "null type");
|
||||
switch (tv->v_type) {
|
||||
switch (tv->v_type)
|
||||
{
|
||||
case VAR_STRING:
|
||||
lua_pushstring(L, (char *) tv->vval.v_string);
|
||||
break;
|
||||
@@ -307,11 +331,14 @@ static void luaV_pushtypval (lua_State *L, typval_T *tv) {
|
||||
#endif
|
||||
case VAR_LIST: {
|
||||
list_T *l = tv->vval.v_list;
|
||||
if (l != NULL) {
|
||||
|
||||
if (l != NULL)
|
||||
{
|
||||
/* check cache */
|
||||
lua_pushlightuserdata(L, (void *) l);
|
||||
lua_rawget(L, LUA_ENVIRONINDEX);
|
||||
if (lua_isnil(L, -1)) { /* not interned? */
|
||||
if (lua_isnil(L, -1)) /* not interned? */
|
||||
{
|
||||
listitem_T *li;
|
||||
int n = 0;
|
||||
lua_pop(L, 1); /* nil */
|
||||
@@ -319,7 +346,8 @@ static void luaV_pushtypval (lua_State *L, typval_T *tv) {
|
||||
lua_pushlightuserdata(L, (void *) l);
|
||||
lua_pushvalue(L, -2);
|
||||
lua_rawset(L, LUA_ENVIRONINDEX);
|
||||
for (li = l->lv_first; li != NULL; li = li->li_next) {
|
||||
for (li = l->lv_first; li != NULL; li = li->li_next)
|
||||
{
|
||||
luaV_pushtypval(L, &li->li_tv);
|
||||
lua_rawseti(L, -2, ++n);
|
||||
}
|
||||
@@ -330,7 +358,9 @@ static void luaV_pushtypval (lua_State *L, typval_T *tv) {
|
||||
}
|
||||
case VAR_DICT: {
|
||||
dict_T *d = tv->vval.v_dict;
|
||||
if (d != NULL) {
|
||||
|
||||
if (d != NULL)
|
||||
{
|
||||
/* check cache */
|
||||
lua_pushlightuserdata(L, (void *) d);
|
||||
lua_rawget(L, LUA_ENVIRONINDEX);
|
||||
@@ -343,8 +373,10 @@ static void luaV_pushtypval (lua_State *L, typval_T *tv) {
|
||||
lua_pushlightuserdata(L, (void *) d);
|
||||
lua_pushvalue(L, -2);
|
||||
lua_rawset(L, LUA_ENVIRONINDEX);
|
||||
for (hi = ht->ht_array; n > 0; hi++) {
|
||||
if (!HASHITEM_EMPTY(hi)) {
|
||||
for (hi = ht->ht_array; n > 0; hi++)
|
||||
{
|
||||
if (!HASHITEM_EMPTY(hi))
|
||||
{
|
||||
dictitem_T *di = dict_lookup(hi);
|
||||
luaV_pushtypval(L, &di->di_tv);
|
||||
lua_setfield(L, -2, (char *) hi->hi_key);
|
||||
@@ -363,17 +395,24 @@ static void luaV_pushtypval (lua_State *L, typval_T *tv) {
|
||||
|
||||
/* similar to luaL_addlstring, but replaces \0 with \n if toline and
|
||||
* \n with \0 otherwise */
|
||||
static void luaV_addlstring (luaL_Buffer *b, const char *s, size_t l,
|
||||
int toline) {
|
||||
while (l--) {
|
||||
if (*s == '\0' && toline) luaL_addchar(b, '\n');
|
||||
else if (*s == '\n' && !toline) luaL_addchar(b, '\0');
|
||||
else luaL_addchar(b, *s);
|
||||
static void
|
||||
luaV_addlstring(luaL_Buffer *b, const char *s, size_t l, int toline)
|
||||
{
|
||||
while (l--)
|
||||
{
|
||||
if (*s == '\0' && toline)
|
||||
luaL_addchar(b, '\n');
|
||||
else if (*s == '\n' && !toline)
|
||||
luaL_addchar(b, '\0');
|
||||
else
|
||||
luaL_addchar(b, *s);
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
static void luaV_pushline (lua_State *L, buf_T *buf, linenr_T n) {
|
||||
static void
|
||||
luaV_pushline(lua_State *L, buf_T *buf, linenr_T n)
|
||||
{
|
||||
const char *s = (const char *) ml_get_buf(buf, n, FALSE);
|
||||
luaL_Buffer b;
|
||||
luaL_buffinit(L, &b);
|
||||
@@ -381,9 +420,12 @@ static void luaV_pushline (lua_State *L, buf_T *buf, linenr_T n) {
|
||||
luaL_pushresult(&b);
|
||||
}
|
||||
|
||||
static char_u *luaV_toline (lua_State *L, int pos) {
|
||||
static char_u *
|
||||
luaV_toline(lua_State *L, int pos)
|
||||
{
|
||||
size_t l;
|
||||
const char *s = lua_tolstring(L, pos, &l);
|
||||
|
||||
luaL_Buffer b;
|
||||
luaL_buffinit(L, &b);
|
||||
luaV_addlstring(&b, s, l, 1);
|
||||
@@ -393,7 +435,9 @@ static char_u *luaV_toline (lua_State *L, int pos) {
|
||||
|
||||
/* pops a string s from the top of the stack and calls mf(t) for pieces t of
|
||||
* s separated by newlines */
|
||||
static void luaV_msgfunc (lua_State *L, msgfunc_T mf) {
|
||||
static void
|
||||
luaV_msgfunc(lua_State *L, msgfunc_T mf)
|
||||
{
|
||||
luaL_Buffer b;
|
||||
size_t l;
|
||||
const char *p, *s = lua_tolstring(L, -1, &l);
|
||||
@@ -402,8 +446,10 @@ static void luaV_msgfunc (lua_State *L, msgfunc_T mf) {
|
||||
luaL_pushresult(&b);
|
||||
/* break string */
|
||||
p = s = lua_tolstring(L, -1, &l);
|
||||
while (l--) {
|
||||
if (*p++ == '\0') { /* break? */
|
||||
while (l--)
|
||||
{
|
||||
if (*p++ == '\0') /* break? */
|
||||
{
|
||||
mf((char_u *) s);
|
||||
s = p;
|
||||
}
|
||||
@@ -415,7 +461,9 @@ static void luaV_msgfunc (lua_State *L, msgfunc_T mf) {
|
||||
|
||||
/* ======= Buffer type ======= */
|
||||
|
||||
static luaV_Buffer *luaV_newbuffer (lua_State *L, buf_T *buf) {
|
||||
static luaV_Buffer *
|
||||
luaV_newbuffer(lua_State *L, buf_T *buf)
|
||||
{
|
||||
luaV_Buffer *b = (luaV_Buffer *) lua_newuserdata(L, sizeof(luaV_Buffer));
|
||||
*b = buf;
|
||||
lua_pushlightuserdata(L, (void *) buf);
|
||||
@@ -431,48 +479,61 @@ static luaV_Buffer *luaV_newbuffer (lua_State *L, buf_T *buf) {
|
||||
return b;
|
||||
}
|
||||
|
||||
static luaV_Buffer *luaV_pushbuffer (lua_State *L, buf_T *buf) {
|
||||
static luaV_Buffer *
|
||||
luaV_pushbuffer (lua_State *L, buf_T *buf)
|
||||
{
|
||||
luaV_Buffer *b = NULL;
|
||||
if (buf == NULL)
|
||||
lua_pushnil(L);
|
||||
else {
|
||||
lua_pushlightuserdata(L, (void *) buf);
|
||||
lua_rawget(L, LUA_ENVIRONINDEX);
|
||||
if (lua_isnil(L, -1)) { /* not interned? */
|
||||
if (lua_isnil(L, -1)) /* not interned? */
|
||||
{
|
||||
lua_pop(L, 1);
|
||||
b = luaV_newbuffer(L, buf);
|
||||
}
|
||||
else b = (luaV_Buffer *) lua_touserdata(L, -1);
|
||||
else
|
||||
b = (luaV_Buffer *) lua_touserdata(L, -1);
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
/* Buffer metamethods */
|
||||
|
||||
static int luaV_buffer_tostring (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_tostring(lua_State *L)
|
||||
{
|
||||
lua_pushfstring(L, "%s: %p", LUAVIM_BUFFER, lua_touserdata(L, 1));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_buffer_len (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_len(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b = lua_touserdata(L, 1);
|
||||
lua_pushinteger(L, (*b)->b_ml.ml_line_count);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_buffer_call (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_call(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
|
||||
lua_settop(L, 1);
|
||||
set_curbuf(*b, DOBUF_SPLIT);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_buffer_index (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_index(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
|
||||
linenr_T n = (linenr_T) lua_tointeger(L, 2);
|
||||
if (n > 0 && n <= (*b)->b_ml.ml_line_count)
|
||||
luaV_pushline(L, *b, n);
|
||||
else if (lua_isstring(L, 2)) {
|
||||
else if (lua_isstring(L, 2))
|
||||
{
|
||||
const char *s = lua_tostring(L, 2);
|
||||
if (strncmp(s, "name", 4) == 0)
|
||||
lua_pushstring(L, (char *) (*b)->b_sfname);
|
||||
@@ -484,17 +545,22 @@ static int luaV_buffer_index (lua_State *L) {
|
||||
else if (strncmp(s, "insert", 6) == 0
|
||||
|| strncmp(s, "next", 4) == 0
|
||||
|| strncmp(s, "previous", 8) == 0
|
||||
|| strncmp(s, "isvalid", 7) == 0) {
|
||||
|| strncmp(s, "isvalid", 7) == 0)
|
||||
{
|
||||
lua_getmetatable(L, 1);
|
||||
lua_getfield(L, -1, s);
|
||||
}
|
||||
else lua_pushnil(L);
|
||||
else
|
||||
lua_pushnil(L);
|
||||
}
|
||||
else lua_pushnil(L);
|
||||
else
|
||||
lua_pushnil(L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_buffer_newindex (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_newindex(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
|
||||
linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
|
||||
#ifdef HAVE_SANDBOX
|
||||
@@ -502,22 +568,28 @@ static int luaV_buffer_newindex (lua_State *L) {
|
||||
#endif
|
||||
if (n < 1 || n > (*b)->b_ml.ml_line_count)
|
||||
luaL_error(L, "invalid line number");
|
||||
if (lua_isnil(L, 3)) { /* delete line */
|
||||
if (lua_isnil(L, 3)) /* delete line */
|
||||
{
|
||||
buf_T *buf = curbuf;
|
||||
curbuf = *b;
|
||||
if (u_savedel(n, 1L) == FAIL) {
|
||||
if (u_savedel(n, 1L) == FAIL)
|
||||
{
|
||||
curbuf = buf;
|
||||
luaL_error(L, "cannot save undo information");
|
||||
}
|
||||
else if (ml_delete(n, FALSE) == FAIL) {
|
||||
else if (ml_delete(n, FALSE) == FAIL)
|
||||
{
|
||||
curbuf = buf;
|
||||
luaL_error(L, "cannot delete line");
|
||||
}
|
||||
else {
|
||||
deleted_lines_mark(n, 1L);
|
||||
if (*b == curwin->w_buffer) { /* fix cursor in current window? */
|
||||
if (curwin->w_cursor.lnum >= n) {
|
||||
if (curwin->w_cursor.lnum > n) {
|
||||
if (*b == curwin->w_buffer) /* fix cursor in current window? */
|
||||
{
|
||||
if (curwin->w_cursor.lnum >= n)
|
||||
{
|
||||
if (curwin->w_cursor.lnum > n)
|
||||
{
|
||||
curwin->w_cursor.lnum -= 1;
|
||||
check_cursor_col();
|
||||
}
|
||||
@@ -529,14 +601,17 @@ static int luaV_buffer_newindex (lua_State *L) {
|
||||
}
|
||||
curbuf = buf;
|
||||
}
|
||||
else if (lua_isstring(L, 3)) { /* update line */
|
||||
else if (lua_isstring(L, 3)) /* update line */
|
||||
{
|
||||
buf_T *buf = curbuf;
|
||||
curbuf = *b;
|
||||
if (u_savesub(n) == FAIL) {
|
||||
if (u_savesub(n) == FAIL)
|
||||
{
|
||||
curbuf = buf;
|
||||
luaL_error(L, "cannot save undo information");
|
||||
}
|
||||
else if (ml_replace(n, luaV_toline(L, 3), TRUE) == FAIL) {
|
||||
else if (ml_replace(n, luaV_toline(L, 3), TRUE) == FAIL)
|
||||
{
|
||||
curbuf = buf;
|
||||
luaL_error(L, "cannot replace line");
|
||||
}
|
||||
@@ -550,7 +625,9 @@ static int luaV_buffer_newindex (lua_State *L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int luaV_buffer_insert (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_insert(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
|
||||
linenr_T last = (*b)->b_ml.ml_line_count;
|
||||
linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
|
||||
@@ -565,11 +642,13 @@ static int luaV_buffer_insert (lua_State *L) {
|
||||
/* insert */
|
||||
buf = curbuf;
|
||||
curbuf = *b;
|
||||
if (u_save(n, n + 1) == FAIL) {
|
||||
if (u_save(n, n + 1) == FAIL)
|
||||
{
|
||||
curbuf = buf;
|
||||
luaL_error(L, "cannot save undo information");
|
||||
}
|
||||
else if (ml_append(n, luaV_toline(L, 2), 0, FALSE) == FAIL) {
|
||||
else if (ml_append(n, luaV_toline(L, 2), 0, FALSE) == FAIL)
|
||||
{
|
||||
curbuf = buf;
|
||||
luaL_error(L, "cannot insert line");
|
||||
}
|
||||
@@ -580,19 +659,25 @@ static int luaV_buffer_insert (lua_State *L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int luaV_buffer_next (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_next(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
|
||||
luaV_pushbuffer(L, (*b)->b_next);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_buffer_previous (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_previous(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
|
||||
luaV_pushbuffer(L, (*b)->b_prev);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_buffer_isvalid (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer_isvalid(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
|
||||
lua_pushlightuserdata(L, (void *) (*b));
|
||||
lua_rawget(L, LUA_ENVIRONINDEX);
|
||||
@@ -616,7 +701,9 @@ static const luaL_Reg luaV_Buffer_mt[] = {
|
||||
|
||||
/* ======= Window type ======= */
|
||||
|
||||
static luaV_Window *luaV_newwindow (lua_State *L, win_T *win) {
|
||||
static luaV_Window *
|
||||
luaV_newwindow(lua_State *L, win_T *win)
|
||||
{
|
||||
luaV_Window *w = (luaV_Window *) lua_newuserdata(L, sizeof(luaV_Window));
|
||||
*w = win;
|
||||
lua_pushlightuserdata(L, (void *) win);
|
||||
@@ -632,14 +719,17 @@ static luaV_Window *luaV_newwindow (lua_State *L, win_T *win) {
|
||||
return w;
|
||||
}
|
||||
|
||||
static luaV_Window *luaV_pushwindow (lua_State *L, win_T *win) {
|
||||
static luaV_Window *
|
||||
luaV_pushwindow(lua_State *L, win_T *win)
|
||||
{
|
||||
luaV_Window *w = NULL;
|
||||
if (win == NULL)
|
||||
lua_pushnil(L);
|
||||
else {
|
||||
lua_pushlightuserdata(L, (void *) win);
|
||||
lua_rawget(L, LUA_ENVIRONINDEX);
|
||||
if (lua_isnil(L, -1)) { /* not interned? */
|
||||
if (lua_isnil(L, -1)) /* not interned? */
|
||||
{
|
||||
lua_pop(L, 1);
|
||||
w = luaV_newwindow(L, win);
|
||||
}
|
||||
@@ -650,19 +740,25 @@ static luaV_Window *luaV_pushwindow (lua_State *L, win_T *win) {
|
||||
|
||||
/* Window metamethods */
|
||||
|
||||
static int luaV_window_tostring (lua_State *L) {
|
||||
static int
|
||||
luaV_window_tostring(lua_State *L)
|
||||
{
|
||||
lua_pushfstring(L, "%s: %p", LUAVIM_WINDOW, lua_touserdata(L, 1));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_window_call (lua_State *L) {
|
||||
static int
|
||||
luaV_window_call(lua_State *L)
|
||||
{
|
||||
luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
|
||||
lua_settop(L, 1);
|
||||
win_goto(*w);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_window_index (lua_State *L) {
|
||||
static int
|
||||
luaV_window_index(lua_State *L)
|
||||
{
|
||||
luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
|
||||
const char *s = luaL_checkstring(L, 2);
|
||||
if (strncmp(s, "buffer", 6) == 0)
|
||||
@@ -680,7 +776,8 @@ static int luaV_window_index (lua_State *L) {
|
||||
/* methods */
|
||||
else if (strncmp(s, "next", 4) == 0
|
||||
|| strncmp(s, "previous", 8) == 0
|
||||
|| strncmp(s, "isvalid", 7) == 0) {
|
||||
|| strncmp(s, "isvalid", 7) == 0)
|
||||
{
|
||||
lua_getmetatable(L, 1);
|
||||
lua_getfield(L, -1, s);
|
||||
}
|
||||
@@ -689,11 +786,14 @@ static int luaV_window_index (lua_State *L) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_window_newindex (lua_State *L) {
|
||||
static int
|
||||
luaV_window_newindex (lua_State *L)
|
||||
{
|
||||
luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
|
||||
const char *s = luaL_checkstring(L, 2);
|
||||
int v = luaL_checkinteger(L, 3);
|
||||
if (strncmp(s, "line", 4) == 0) {
|
||||
if (strncmp(s, "line", 4) == 0)
|
||||
{
|
||||
#ifdef HAVE_SANDBOX
|
||||
luaV_checksandbox(L);
|
||||
#endif
|
||||
@@ -702,7 +802,8 @@ static int luaV_window_newindex (lua_State *L) {
|
||||
(*w)->w_cursor.lnum = v;
|
||||
update_screen(VALID);
|
||||
}
|
||||
else if (strncmp(s, "col", 3) == 0) {
|
||||
else if (strncmp(s, "col", 3) == 0)
|
||||
{
|
||||
#ifdef HAVE_SANDBOX
|
||||
luaV_checksandbox(L);
|
||||
#endif
|
||||
@@ -710,7 +811,8 @@ static int luaV_window_newindex (lua_State *L) {
|
||||
update_screen(VALID);
|
||||
}
|
||||
#ifdef FEAT_VERTSPLIT
|
||||
else if (strncmp(s, "width", 5) == 0) {
|
||||
else if (strncmp(s, "width", 5) == 0)
|
||||
{
|
||||
win_T *win = curwin;
|
||||
#ifdef FEAT_GUI
|
||||
need_mouse_correct = TRUE;
|
||||
@@ -720,7 +822,8 @@ static int luaV_window_newindex (lua_State *L) {
|
||||
curwin = win;
|
||||
}
|
||||
#endif
|
||||
else if (strncmp(s, "height", 6) == 0) {
|
||||
else if (strncmp(s, "height", 6) == 0)
|
||||
{
|
||||
win_T *win = curwin;
|
||||
#ifdef FEAT_GUI
|
||||
need_mouse_correct = TRUE;
|
||||
@@ -734,19 +837,25 @@ static int luaV_window_newindex (lua_State *L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int luaV_window_next (lua_State *L) {
|
||||
static int
|
||||
luaV_window_next(lua_State *L)
|
||||
{
|
||||
luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
|
||||
luaV_pushwindow(L, (*w)->w_next);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_window_previous (lua_State *L) {
|
||||
static int
|
||||
luaV_window_previous(lua_State *L)
|
||||
{
|
||||
luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
|
||||
luaV_pushwindow(L, (*w)->w_prev);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_window_isvalid (lua_State *L) {
|
||||
static int
|
||||
luaV_window_isvalid(lua_State *L)
|
||||
{
|
||||
luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
|
||||
lua_pushlightuserdata(L, (void *) (*w));
|
||||
lua_rawget(L, LUA_ENVIRONINDEX);
|
||||
@@ -768,14 +877,17 @@ static const luaL_Reg luaV_Window_mt[] = {
|
||||
|
||||
/* ======= Vim module ======= */
|
||||
|
||||
static int luaV_print (lua_State *L) {
|
||||
static int
|
||||
luaV_print(lua_State *L)
|
||||
{
|
||||
int i, n = lua_gettop(L); /* nargs */
|
||||
const char *s;
|
||||
size_t l;
|
||||
luaL_Buffer b;
|
||||
luaL_buffinit(L, &b);
|
||||
lua_getglobal(L, "tostring");
|
||||
for (i = 1; i <= n; i++) {
|
||||
for (i = 1; i <= n; i++)
|
||||
{
|
||||
lua_pushvalue(L, -1); /* tostring */
|
||||
lua_pushvalue(L, i); /* arg */
|
||||
lua_call(L, 1, 1);
|
||||
@@ -791,33 +903,45 @@ static int luaV_print (lua_State *L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int luaV_command (lua_State *L) {
|
||||
static int
|
||||
luaV_command(lua_State *L)
|
||||
{
|
||||
do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
|
||||
update_screen(VALID);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int luaV_eval (lua_State *L) {
|
||||
static int
|
||||
luaV_eval(lua_State *L)
|
||||
{
|
||||
typval_T *tv = eval_expr((char_u *) luaL_checkstring(L, 1), NULL);
|
||||
if (tv == NULL) luaL_error(L, "invalid expression");
|
||||
luaV_pushtypval(L, tv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_beep (lua_State *L) {
|
||||
static int
|
||||
luaV_beep(lua_State *L)
|
||||
{
|
||||
vim_beep();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int luaV_line (lua_State *L) {
|
||||
static int
|
||||
luaV_line(lua_State *L)
|
||||
{
|
||||
luaV_pushline(L, curbuf, curwin->w_cursor.lnum);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_buffer (lua_State *L) {
|
||||
static int
|
||||
luaV_buffer(lua_State *L)
|
||||
{
|
||||
buf_T *buf;
|
||||
if (lua_isstring(L, 1)) { /* get by number or name? */
|
||||
if (lua_isnumber(L, 1)) { /* by number? */
|
||||
if (lua_isstring(L, 1)) /* get by number or name? */
|
||||
{
|
||||
if (lua_isnumber(L, 1)) /* by number? */
|
||||
{
|
||||
int n = lua_tointeger(L, 1);
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
if (buf->b_fnum == n) break;
|
||||
@@ -825,8 +949,10 @@ static int luaV_buffer (lua_State *L) {
|
||||
else { /* by name */
|
||||
size_t l;
|
||||
const char *s = lua_tolstring(L, 1, &l);
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next) {
|
||||
if (buf->b_ffname == NULL || buf->b_sfname == NULL) {
|
||||
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
|
||||
{
|
||||
if (buf->b_ffname == NULL || buf->b_sfname == NULL)
|
||||
{
|
||||
if (l == 0) break;
|
||||
}
|
||||
else if (strncmp(s, buf->b_ffname, l) == 0
|
||||
@@ -846,9 +972,12 @@ static int luaV_buffer (lua_State *L) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_window (lua_State *L) {
|
||||
static int
|
||||
luaV_window(lua_State *L)
|
||||
{
|
||||
win_T *win;
|
||||
if (lua_isnumber(L, 1)) { /* get by number? */
|
||||
if (lua_isnumber(L, 1)) /* get by number? */
|
||||
{
|
||||
int n = lua_tointeger(L, 1);
|
||||
for (win = firstwin; win != NULL; win = win->w_next, n--)
|
||||
if (n == 1) break;
|
||||
@@ -864,7 +993,9 @@ static int luaV_window (lua_State *L) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_open (lua_State *L) {
|
||||
static int
|
||||
luaV_open(lua_State *L)
|
||||
{
|
||||
luaV_Buffer *b;
|
||||
char_u *s = NULL;
|
||||
#ifdef HAVE_SANDBOX
|
||||
@@ -875,21 +1006,28 @@ static int luaV_open (lua_State *L) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_isbuffer (lua_State *L) {
|
||||
static int
|
||||
luaV_isbuffer(lua_State *L)
|
||||
{
|
||||
lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_BUFFER) != NULL);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int luaV_iswindow (lua_State *L) {
|
||||
static int
|
||||
luaV_iswindow(lua_State *L)
|
||||
{
|
||||
lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_WINDOW) != NULL);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* for freeing buffer and window objects; lightuserdata as arg */
|
||||
static luaV_free (lua_State *L) {
|
||||
static int
|
||||
luaV_free(lua_State *L)
|
||||
{
|
||||
lua_pushvalue(L, 1); /* lightudata */
|
||||
lua_rawget(L, LUA_ENVIRONINDEX);
|
||||
if (!lua_isnil(L, -1)) {
|
||||
if (!lua_isnil(L, -1))
|
||||
{
|
||||
lua_pushnil(L);
|
||||
lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = nil */
|
||||
lua_pushnil(L);
|
||||
@@ -911,7 +1049,9 @@ static const luaL_Reg luaV_module[] = {
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static int luaopen_vim (lua_State *L) {
|
||||
static int
|
||||
luaopen_vim(lua_State *L)
|
||||
{
|
||||
/* set environment */
|
||||
lua_newtable(L);
|
||||
lua_newtable(L);
|
||||
@@ -935,7 +1075,9 @@ static int luaopen_vim (lua_State *L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static lua_State *luaV_newstate (void) {
|
||||
static lua_State *
|
||||
luaV_newstate(void)
|
||||
{
|
||||
lua_State *L = luaL_newstate();
|
||||
const luaL_Reg luaV_core_libs[] = {
|
||||
{"", luaopen_base},
|
||||
@@ -953,7 +1095,8 @@ static lua_State *luaV_newstate (void) {
|
||||
const luaL_Reg *reg = luaV_core_libs;
|
||||
const char **s = os_funcs;
|
||||
/* core libs */
|
||||
for ( ; reg->func; reg++) {
|
||||
for ( ; reg->func; reg++)
|
||||
{
|
||||
lua_pushcfunction(L, reg->func);
|
||||
lua_pushstring(L, reg->name);
|
||||
lua_call(L, 1, 0);
|
||||
@@ -961,7 +1104,8 @@ static lua_State *luaV_newstate (void) {
|
||||
/* restricted os lib */
|
||||
lua_getglobal(L, LUA_OSLIBNAME);
|
||||
lua_newtable(L);
|
||||
for ( ; *s; s++) {
|
||||
for ( ; *s; s++)
|
||||
{
|
||||
lua_getfield(L, -2, *s);
|
||||
lua_setfield(L, -2, *s);
|
||||
}
|
||||
@@ -973,7 +1117,9 @@ static lua_State *luaV_newstate (void) {
|
||||
return L;
|
||||
}
|
||||
|
||||
static void luaV_setrange (lua_State *L, int line1, int line2) {
|
||||
static void
|
||||
luaV_setrange(lua_State *L, int line1, int line2)
|
||||
{
|
||||
lua_getglobal(L, LUAVIM_NAME);
|
||||
lua_pushinteger(L, line1);
|
||||
lua_setfield(L, -2, "firstline");
|
||||
@@ -987,10 +1133,14 @@ static void luaV_setrange (lua_State *L, int line1, int line2) {
|
||||
|
||||
static lua_State *L = NULL;
|
||||
|
||||
static int lua_init (void) {
|
||||
if (L == NULL) {
|
||||
static int
|
||||
lua_init(void)
|
||||
{
|
||||
if (L == NULL)
|
||||
{
|
||||
#ifdef DYNAMIC_LUA
|
||||
if (!lua_enabled(TRUE)) {
|
||||
if (!lua_enabled(TRUE))
|
||||
{
|
||||
EMSG(_("Lua library cannot be loaded."));
|
||||
return FAIL;
|
||||
}
|
||||
@@ -1000,8 +1150,11 @@ static int lua_init (void) {
|
||||
return OK;
|
||||
}
|
||||
|
||||
void lua_end (void) {
|
||||
if (L != NULL) {
|
||||
void
|
||||
lua_end(void)
|
||||
{
|
||||
if (L != NULL)
|
||||
{
|
||||
lua_close(L);
|
||||
L = NULL;
|
||||
#ifdef DYNAMIC_LUA
|
||||
@@ -1011,11 +1164,14 @@ void lua_end (void) {
|
||||
}
|
||||
|
||||
/* ex commands */
|
||||
void ex_lua (exarg_T *eap) {
|
||||
void
|
||||
ex_lua(exarg_T *eap)
|
||||
{
|
||||
char *script;
|
||||
if (lua_init() == FAIL) return;
|
||||
script = (char *) script_get(eap, eap->arg);
|
||||
if (!eap->skip) {
|
||||
if (!eap->skip)
|
||||
{
|
||||
char *s = (script) ? script : (char *) eap->arg;
|
||||
luaV_setrange(L, eap->line1, eap->line2);
|
||||
if (luaL_loadbuffer(L, s, strlen(s), LUAVIM_CHUNKNAME)
|
||||
@@ -1025,13 +1181,16 @@ void ex_lua (exarg_T *eap) {
|
||||
if (script != NULL) vim_free(script);
|
||||
}
|
||||
|
||||
void ex_luado (exarg_T *eap) {
|
||||
void
|
||||
ex_luado(exarg_T *eap)
|
||||
{
|
||||
linenr_T l;
|
||||
const char *s = (const char *) eap->arg;
|
||||
luaL_Buffer b;
|
||||
size_t len;
|
||||
if (lua_init() == FAIL) return;
|
||||
if (u_save(eap->line1 - 1, eap->line2 + 1) == FAIL) {
|
||||
if (u_save(eap->line1 - 1, eap->line2 + 1) == FAIL)
|
||||
{
|
||||
EMSG(_("cannot save undo information"));
|
||||
return;
|
||||
}
|
||||
@@ -1042,21 +1201,25 @@ void ex_luado (exarg_T *eap) {
|
||||
luaL_addlstring(&b, " end", 4); /* footer */
|
||||
luaL_pushresult(&b);
|
||||
s = lua_tolstring(L, -1, &len);
|
||||
if (luaL_loadbuffer(L, s, len, LUAVIM_CHUNKNAME)) {
|
||||
if (luaL_loadbuffer(L, s, len, LUAVIM_CHUNKNAME))
|
||||
{
|
||||
luaV_emsg(L);
|
||||
lua_pop(L, 1); /* function body */
|
||||
return;
|
||||
}
|
||||
lua_call(L, 0, 1);
|
||||
lua_replace(L, -2); /* function -> body */
|
||||
for (l = eap->line1; l <= eap->line2; l++) {
|
||||
for (l = eap->line1; l <= eap->line2; l++)
|
||||
{
|
||||
lua_pushvalue(L, -1); /* function */
|
||||
luaV_pushline(L, curbuf, l); /* current line as arg */
|
||||
if (lua_pcall(L, 1, 1, 0)) {
|
||||
if (lua_pcall(L, 1, 1, 0))
|
||||
{
|
||||
luaV_emsg(L);
|
||||
break;
|
||||
}
|
||||
if (lua_isstring(L, -1)) { /* update line? */
|
||||
if (lua_isstring(L, -1)) /* update line? */
|
||||
{
|
||||
#ifdef HAVE_SANDBOX
|
||||
luaV_checksandbox(L);
|
||||
#endif
|
||||
@@ -1071,9 +1234,13 @@ void ex_luado (exarg_T *eap) {
|
||||
update_screen(NOT_VALID);
|
||||
}
|
||||
|
||||
void ex_luafile (exarg_T *eap) {
|
||||
if (lua_init() == FAIL) return;
|
||||
if (!eap->skip) {
|
||||
void
|
||||
ex_luafile(exarg_T *eap)
|
||||
{
|
||||
if (lua_init() == FAIL)
|
||||
return;
|
||||
if (!eap->skip)
|
||||
{
|
||||
luaV_setrange(L, eap->line1, eap->line2);
|
||||
if (luaL_loadfile(L, (char *) eap->arg) || lua_pcall(L, 0, 0, 0))
|
||||
luaV_emsg(L);
|
||||
@@ -1081,7 +1248,9 @@ void ex_luafile (exarg_T *eap) {
|
||||
}
|
||||
|
||||
/* buffer */
|
||||
void lua_buffer_free (buf_T *buf) {
|
||||
void
|
||||
lua_buffer_free(buf_T *buf)
|
||||
{
|
||||
if (lua_init() == FAIL) return;
|
||||
luaV_getfield(L, LUAVIM_FREE);
|
||||
lua_pushlightuserdata(L, (void *) buf);
|
||||
@@ -1089,7 +1258,9 @@ void lua_buffer_free (buf_T *buf) {
|
||||
}
|
||||
|
||||
/* window */
|
||||
void lua_window_free (win_T *win) {
|
||||
void
|
||||
lua_window_free(win_T *win)
|
||||
{
|
||||
if (lua_init() == FAIL) return;
|
||||
luaV_getfield(L, LUAVIM_FREE);
|
||||
lua_pushlightuserdata(L, (void *) win);
|
||||
|
@@ -1627,8 +1627,8 @@ static struct PyMethodDef RangeMethods[] = {
|
||||
|
||||
static PySequenceMethods RangeAsSeq = {
|
||||
(lenfunc) RangeLength, /* sq_length, len(x) */
|
||||
(binaryfunc) 0, /* RangeConcat, */ /* sq_concat, x+y */
|
||||
(ssizeargfunc) 0, /* RangeRepeat, */ /* sq_repeat, x*n */
|
||||
(binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
|
||||
(ssizeargfunc) 0, /* RangeRepeat, sq_repeat, x*n */
|
||||
(ssizeargfunc) RangeItem, /* sq_item, x[i] */
|
||||
0, /* was_sq_slice, x[i:j] */
|
||||
(ssizeobjargproc) RangeAsItem, /* sq_as_item, x[i]=v */
|
||||
@@ -1849,55 +1849,7 @@ static struct PyMethodDef WindowMethods[] = {
|
||||
{ NULL, NULL, 0, NULL }
|
||||
};
|
||||
|
||||
static PyTypeObject WindowType = {
|
||||
PyVarObject_HEAD_INIT(NULL, 0)
|
||||
"vim.window", /* tp_name */
|
||||
sizeof(WindowObject), /* tp_basicsize */
|
||||
0, /* tp_itemsize */
|
||||
WindowDestructor, /* tp_dealloc */
|
||||
0, /* tp_print */
|
||||
0, /* tp_getattr */
|
||||
0, /* tp_setattr */
|
||||
0, /* tp_reserved */
|
||||
WindowRepr, /* tp_repr */
|
||||
0, /* tp_as_number */
|
||||
0, /* tp_as_sequence */
|
||||
0, /* tp_as_mapping */
|
||||
0, /* tp_hash */
|
||||
0, /* tp_call */
|
||||
0, /* tp_str */
|
||||
WindowGetattro, /* tp_getattro */
|
||||
WindowSetattro, /* tp_setattro */
|
||||
0, /* tp_as_Window */
|
||||
Py_TPFLAGS_DEFAULT, /* tp_flags */
|
||||
"vim Window object", /* tp_doc */
|
||||
0, /*tp_traverse*/
|
||||
0, /*tp_clear*/
|
||||
0, /*tp_richcompare*/
|
||||
0, /*tp_weaklistoffset*/
|
||||
0, /*tp_iter*/
|
||||
0, /*tp_iternext*/
|
||||
WindowMethods, /*tp_methods*/
|
||||
0, /*tp_members*/
|
||||
0, /*tp_getset*/
|
||||
0, /*tp_base*/
|
||||
0, /*tp_dict*/
|
||||
0, /*tp_descr_get*/
|
||||
0, /*tp_descr_set*/
|
||||
0, /*tp_dictoffset*/
|
||||
0, /*tp_init*/
|
||||
call_PyType_GenericAlloc, /*tp_alloc*/
|
||||
call_PyType_GenericNew, /*tp_new*/
|
||||
call_PyObject_Free, /*tp_free*/
|
||||
0, /*tp_is_gc*/
|
||||
0, /*tp_bases*/
|
||||
0, /*tp_mro*/
|
||||
0, /*tp_cache*/
|
||||
0, /*tp_subclasses*/
|
||||
0, /*tp_weaklist*/
|
||||
0, /*tp_del*/
|
||||
0, /*tp_version_tag*/
|
||||
};
|
||||
static PyTypeObject WindowType;
|
||||
|
||||
/* Window object - Implementation
|
||||
*/
|
||||
@@ -2721,7 +2673,6 @@ static int VimErrorCheck(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void init_structs(void)
|
||||
{
|
||||
vim_memset(&OutputType, 0, sizeof(OutputType));
|
||||
@@ -2751,6 +2702,20 @@ static void init_structs(void)
|
||||
BufferType.tp_new = call_PyType_GenericNew;
|
||||
BufferType.tp_free = call_PyObject_Free;
|
||||
|
||||
vim_memset(&WindowType, 0, sizeof(WindowType));
|
||||
WindowType.tp_name = "vim.window";
|
||||
WindowType.tp_basicsize = sizeof(WindowObject);
|
||||
WindowType.tp_dealloc = WindowDestructor;
|
||||
WindowType.tp_repr = WindowRepr;
|
||||
WindowType.tp_getattro = WindowGetattro;
|
||||
WindowType.tp_setattro = WindowSetattro;
|
||||
WindowType.tp_flags = Py_TPFLAGS_DEFAULT;
|
||||
WindowType.tp_doc = "vim Window object";
|
||||
WindowType.tp_methods = WindowMethods;
|
||||
WindowType.tp_alloc = call_PyType_GenericAlloc;
|
||||
WindowType.tp_new = call_PyType_GenericNew;
|
||||
WindowType.tp_free = call_PyObject_Free;
|
||||
|
||||
vim_memset(&BufListType, 0, sizeof(BufListType));
|
||||
BufListType.tp_name = "vim.bufferlist";
|
||||
BufListType.tp_basicsize = sizeof(BufListObject);
|
||||
|
Reference in New Issue
Block a user