Mercurial > vim
diff src/normal.c @ 180:7e70fc748752
updated for version 7.0056
author | vimboss |
---|---|
date | Sun, 06 Mar 2005 23:38:09 +0000 |
parents | 7fd70926e2e1 |
children | 476198990769 |
line wrap: on
line diff
--- a/src/normal.c +++ b/src/normal.c @@ -381,13 +381,17 @@ static const struct nv_cmd {K_KINS, nv_edit, 0, 0}, {K_BS, nv_ctrlh, 0, 0}, {K_UP, nv_up, NV_SSS|NV_STS, FALSE}, + {K_XUP, nv_up, NV_SSS|NV_STS, FALSE}, {K_S_UP, nv_page, NV_SS, BACKWARD}, {K_DOWN, nv_down, NV_SSS|NV_STS, FALSE}, + {K_XDOWN, nv_down, NV_SSS|NV_STS, FALSE}, {K_S_DOWN, nv_page, NV_SS, FORWARD}, {K_LEFT, nv_left, NV_SSS|NV_STS|NV_RL, 0}, + {K_XLEFT, nv_left, NV_SSS|NV_STS|NV_RL, 0}, {K_S_LEFT, nv_bck_word, NV_SS|NV_RL, 0}, {K_C_LEFT, nv_bck_word, NV_SSS|NV_RL|NV_STS, 1}, {K_RIGHT, nv_right, NV_SSS|NV_STS|NV_RL, 0}, + {K_XRIGHT, nv_right, NV_SSS|NV_STS|NV_RL, 0}, {K_S_RIGHT, nv_wordcmd, NV_SS|NV_RL, FALSE}, {K_C_RIGHT, nv_wordcmd, NV_SSS|NV_RL|NV_STS, TRUE}, {K_PAGEUP, nv_page, NV_SSS|NV_STS, BACKWARD}, @@ -832,10 +836,12 @@ getcount: { case 'l': ca.cmdchar = 'h'; break; case K_RIGHT: ca.cmdchar = K_LEFT; break; + case K_XRIGHT: ca.cmdchar = K_XLEFT; break; case K_S_RIGHT: ca.cmdchar = K_S_LEFT; break; case K_C_RIGHT: ca.cmdchar = K_C_LEFT; break; case 'h': ca.cmdchar = 'l'; break; case K_LEFT: ca.cmdchar = K_RIGHT; break; + case K_XLEFT: ca.cmdchar = K_XRIGHT; break; case K_S_LEFT: ca.cmdchar = K_S_RIGHT; break; case K_C_LEFT: ca.cmdchar = K_C_RIGHT; break; case '>': ca.cmdchar = '<'; break; @@ -4316,7 +4322,9 @@ nv_zet(cap) else if (nchar == 'l' || nchar == 'h' || nchar == K_LEFT - || nchar == K_RIGHT) + || nchar == K_XLEFT + || nchar == K_RIGHT + || nchar == K_XRIGHT) { cap->count1 = n ? n * cap->count1 : cap->count1; goto dozet; @@ -4423,6 +4431,7 @@ dozet: /* "zh" - scroll screen to the right */ case 'h': case K_LEFT: + case K_XLEFT: if (!curwin->w_p_wrap) { if ((colnr_T)cap->count1 > curwin->w_leftcol) @@ -4440,6 +4449,7 @@ dozet: /* "zl" - scroll screen to the left */ case 'l': case K_RIGHT: + case K_XRIGHT: if (!curwin->w_p_wrap) { /* scroll the window left */ @@ -5294,6 +5304,15 @@ nv_right(cap) # define PAST_LINE 0 #endif + if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL)) + { + /* <C-Right> and <S-Right> move a word or WORD right */ + if (mod_mask & MOD_MASK_CTRL) + cap->arg = TRUE; + nv_wordcmd(cap); + return; + } + cap->oap->motion_type = MCHAR; cap->oap->inclusive = FALSE; #ifdef FEAT_VISUAL @@ -5323,7 +5342,7 @@ nv_right(cap) && vim_strchr(p_ww, 's') != NULL) || (cap->cmdchar == 'l' && vim_strchr(p_ww, 'l') != NULL) - || (cap->cmdchar == K_RIGHT + || ((cap->cmdchar == K_RIGHT || cap->cmdchar == K_XRIGHT) && vim_strchr(p_ww, '>') != NULL)) && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count) { @@ -5399,6 +5418,15 @@ nv_left(cap) { long n; + if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL)) + { + /* <C-Left> and <S-Left> move a word or WORD left */ + if (mod_mask & MOD_MASK_CTRL) + cap->arg = 1; + nv_bck_word(cap); + return; + } + cap->oap->motion_type = MCHAR; cap->oap->inclusive = FALSE; for (n = cap->count1; n > 0; --n) @@ -5414,7 +5442,7 @@ nv_left(cap) && vim_strchr(p_ww, 'b') != NULL) || (cap->cmdchar == 'h' && vim_strchr(p_ww, 'h') != NULL) - || (cap->cmdchar == K_LEFT + || ((cap->cmdchar == K_LEFT || cap->cmdchar == K_XLEFT) && vim_strchr(p_ww, '<') != NULL)) && curwin->w_cursor.lnum > 1) { @@ -5456,11 +5484,20 @@ nv_left(cap) nv_up(cap) cmdarg_T *cap; { - cap->oap->motion_type = MLINE; - if (cursor_up(cap->count1, cap->oap->op_type == OP_NOP) == FAIL) - clearopbeep(cap->oap); - else if (cap->arg) - beginline(BL_WHITE | BL_FIX); + if (mod_mask & MOD_MASK_SHIFT) + { + /* <S-Up> is page up */ + cap->arg = BACKWARD; + nv_page(cap); + } + else + { + cap->oap->motion_type = MLINE; + if (cursor_up(cap->count1, cap->oap->op_type == OP_NOP) == FAIL) + clearopbeep(cap->oap); + else if (cap->arg) + beginline(BL_WHITE | BL_FIX); + } } /* @@ -5471,6 +5508,13 @@ nv_up(cap) nv_down(cap) cmdarg_T *cap; { + if (mod_mask & MOD_MASK_SHIFT) + { + /* <S-Down> is page down */ + cap->arg = FORWARD; + nv_page(cap); + } + else #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX) /* In a quickfix window a <CR> jumps to the error under the cursor. */ if (bt_quickfix(curbuf) && cap->cmdchar == CAR) @@ -5553,8 +5597,9 @@ nv_gotofile(cap) nv_end(cap) cmdarg_T *cap; { - if (cap->arg) /* CTRL-END = goto last line */ - { + if (cap->arg || (mod_mask & MOD_MASK_CTRL)) /* CTRL-END = goto last line */ + { + cap->arg = TRUE; nv_goto(cap); cap->count1 = 1; /* to end of current line */ } @@ -7205,6 +7250,7 @@ nv_g_cmd(cap) */ case 'j': case K_DOWN: + case K_XDOWN: /* with 'nowrap' it works just like the normal "j" command; also when * in a closed fold */ if (!curwin->w_p_wrap @@ -7224,6 +7270,7 @@ nv_g_cmd(cap) case 'k': case K_UP: + case K_XUP: /* with 'nowrap' it works just like the normal "k" command; also when * in a closed fold */ if (!curwin->w_p_wrap @@ -7761,8 +7808,14 @@ nv_lineop(cap) nv_home(cap) cmdarg_T *cap; { - cap->count0 = 1; - nv_pipe(cap); + /* CTRL-HOME is like "gg" */ + if (mod_mask & MOD_MASK_CTRL) + nv_goto(cap); + else + { + cap->count0 = 1; + nv_pipe(cap); + } } /*