Mercurial > vim
comparison src/ex_getln.c @ 180:7e70fc748752
updated for version 7.0056
author | vimboss |
---|---|
date | Sun, 06 Mar 2005 23:38:09 +0000 |
parents | 4d9eabb1396e |
children | 49748afd794b |
comparison
equal
deleted
inserted
replaced
179:7fd70926e2e1 | 180:7e70fc748752 |
---|---|
318 * typed by the user directly, not when the result of a | 318 * typed by the user directly, not when the result of a |
319 * mapping. */ | 319 * mapping. */ |
320 switch (c) | 320 switch (c) |
321 { | 321 { |
322 case K_RIGHT: c = K_LEFT; break; | 322 case K_RIGHT: c = K_LEFT; break; |
323 case K_XRIGHT: c = K_XLEFT; break; | |
323 case K_S_RIGHT: c = K_S_LEFT; break; | 324 case K_S_RIGHT: c = K_S_LEFT; break; |
324 case K_C_RIGHT: c = K_C_LEFT; break; | 325 case K_C_RIGHT: c = K_C_LEFT; break; |
325 case K_LEFT: c = K_RIGHT; break; | 326 case K_LEFT: c = K_RIGHT; break; |
327 case K_XLEFT: c = K_XRIGHT; break; | |
326 case K_S_LEFT: c = K_S_RIGHT; break; | 328 case K_S_LEFT: c = K_S_RIGHT; break; |
327 case K_C_LEFT: c = K_C_RIGHT; break; | 329 case K_C_LEFT: c = K_C_RIGHT; break; |
328 } | 330 } |
329 } | 331 } |
330 #endif | 332 #endif |
352 | 354 |
353 #ifdef FEAT_CMDHIST | 355 #ifdef FEAT_CMDHIST |
354 /* free old command line when finished moving around in the history | 356 /* free old command line when finished moving around in the history |
355 * list */ | 357 * list */ |
356 if (lookfor != NULL | 358 if (lookfor != NULL |
357 && c != K_S_DOWN && c != K_S_UP && c != K_DOWN && c != K_UP | 359 && c != K_S_DOWN && c != K_S_UP |
360 && c != K_DOWN && c != K_UP && c != K_XDOWN && c != K_XUP | |
358 && c != K_PAGEDOWN && c != K_PAGEUP | 361 && c != K_PAGEDOWN && c != K_PAGEUP |
359 && c != K_KPAGEDOWN && c != K_KPAGEUP | 362 && c != K_KPAGEDOWN && c != K_KPAGEUP |
360 && c != K_LEFT && c != K_RIGHT | 363 && c != K_LEFT && c != K_RIGHT && c != K_XLEFT && c != K_XRIGHT |
361 && (xpc.xp_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N))) | 364 && (xpc.xp_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N))) |
362 { | 365 { |
363 vim_free(lookfor); | 366 vim_free(lookfor); |
364 lookfor = NULL; | 367 lookfor = NULL; |
365 } | 368 } |
373 | 376 |
374 #ifdef FEAT_WILDMENU | 377 #ifdef FEAT_WILDMENU |
375 /* Special translations for 'wildmenu' */ | 378 /* Special translations for 'wildmenu' */ |
376 if (did_wild_list && p_wmnu) | 379 if (did_wild_list && p_wmnu) |
377 { | 380 { |
378 if (c == K_LEFT) | 381 if (c == K_LEFT || c == K_XLEFT) |
379 c = Ctrl_P; | 382 c = Ctrl_P; |
380 else if (c == K_RIGHT) | 383 else if (c == K_RIGHT || c == K_XRIGHT) |
381 c = Ctrl_N; | 384 c = Ctrl_N; |
382 } | 385 } |
383 /* Hitting CR after "emenu Name.": complete submenu */ | 386 /* Hitting CR after "emenu Name.": complete submenu */ |
384 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu | 387 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu |
385 && ccline.cmdpos > 1 | 388 && ccline.cmdpos > 1 |
396 && c != Ctrl_L) | 399 && c != Ctrl_L) |
397 { | 400 { |
398 (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE); | 401 (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE); |
399 did_wild_list = FALSE; | 402 did_wild_list = FALSE; |
400 #ifdef FEAT_WILDMENU | 403 #ifdef FEAT_WILDMENU |
401 if (!p_wmnu || (c != K_UP && c != K_DOWN)) | 404 if (!p_wmnu || (c != K_UP && c != K_DOWN |
405 && c != K_XUP && c != K_XDOWN)) | |
402 #endif | 406 #endif |
403 xpc.xp_context = EXPAND_NOTHING; | 407 xpc.xp_context = EXPAND_NOTHING; |
404 wim_index = 0; | 408 wim_index = 0; |
405 #ifdef FEAT_WILDMENU | 409 #ifdef FEAT_WILDMENU |
406 if (p_wmnu && wild_menu_showing != 0) | 410 if (p_wmnu && wild_menu_showing != 0) |
441 #ifdef FEAT_WILDMENU | 445 #ifdef FEAT_WILDMENU |
442 /* Special translations for 'wildmenu' */ | 446 /* Special translations for 'wildmenu' */ |
443 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu) | 447 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu) |
444 { | 448 { |
445 /* Hitting <Down> after "emenu Name.": complete submenu */ | 449 /* Hitting <Down> after "emenu Name.": complete submenu */ |
446 if (ccline.cmdbuff[ccline.cmdpos - 1] == '.' && c == K_DOWN) | 450 if (ccline.cmdbuff[ccline.cmdpos - 1] == '.' |
451 && (c == K_DOWN || c == K_XDOWN)) | |
447 c = p_wc; | 452 c = p_wc; |
448 else if (c == K_UP) | 453 else if (c == K_UP || c == K_XUP) |
449 { | 454 { |
450 /* Hitting <Up>: Remove one submenu name in front of the | 455 /* Hitting <Up>: Remove one submenu name in front of the |
451 * cursor */ | 456 * cursor */ |
452 int found = FALSE; | 457 int found = FALSE; |
453 | 458 |
490 upseg[2] = '.'; | 495 upseg[2] = '.'; |
491 upseg[3] = PATHSEP; | 496 upseg[3] = PATHSEP; |
492 upseg[4] = NUL; | 497 upseg[4] = NUL; |
493 | 498 |
494 if (ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP | 499 if (ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP |
495 && c == K_DOWN | 500 && (c == K_DOWN || c == K_XDOWN) |
496 && (ccline.cmdbuff[ccline.cmdpos - 2] != '.' | 501 && (ccline.cmdbuff[ccline.cmdpos - 2] != '.' |
497 || ccline.cmdbuff[ccline.cmdpos - 3] != '.')) | 502 || ccline.cmdbuff[ccline.cmdpos - 3] != '.')) |
498 { | 503 { |
499 /* go down a directory */ | 504 /* go down a directory */ |
500 c = p_wc; | 505 c = p_wc; |
501 } | 506 } |
502 else if (STRNCMP(xpc.xp_pattern, upseg + 1, 3) == 0 && c == K_DOWN) | 507 else if (STRNCMP(xpc.xp_pattern, upseg + 1, 3) == 0 |
508 && (c == K_DOWN || c == K_XDOWN)) | |
503 { | 509 { |
504 /* If in a direct ancestor, strip off one ../ to go down */ | 510 /* If in a direct ancestor, strip off one ../ to go down */ |
505 int found = FALSE; | 511 int found = FALSE; |
506 | 512 |
507 j = ccline.cmdpos; | 513 j = ccline.cmdpos; |
525 { | 531 { |
526 cmdline_del(j - 2); | 532 cmdline_del(j - 2); |
527 c = p_wc; | 533 c = p_wc; |
528 } | 534 } |
529 } | 535 } |
530 else if (c == K_UP) | 536 else if (c == K_UP || c == K_XUP) |
531 { | 537 { |
532 /* go up a directory */ | 538 /* go up a directory */ |
533 int found = FALSE; | 539 int found = FALSE; |
534 | 540 |
535 j = ccline.cmdpos - 1; | 541 j = ccline.cmdpos - 1; |
1094 | 1100 |
1095 redrawcmd(); | 1101 redrawcmd(); |
1096 continue; /* don't do incremental search now */ | 1102 continue; /* don't do incremental search now */ |
1097 | 1103 |
1098 case K_RIGHT: | 1104 case K_RIGHT: |
1105 case K_XRIGHT: | |
1099 case K_S_RIGHT: | 1106 case K_S_RIGHT: |
1100 case K_C_RIGHT: | 1107 case K_C_RIGHT: |
1101 do | 1108 do |
1102 { | 1109 { |
1103 if (ccline.cmdpos >= ccline.cmdlen) | 1110 if (ccline.cmdpos >= ccline.cmdlen) |
1112 + ccline.cmdpos); | 1119 + ccline.cmdpos); |
1113 else | 1120 else |
1114 #endif | 1121 #endif |
1115 ++ccline.cmdpos; | 1122 ++ccline.cmdpos; |
1116 } | 1123 } |
1117 while ((c == K_S_RIGHT || c == K_C_RIGHT) | 1124 while ((c == K_S_RIGHT || c == K_C_RIGHT |
1125 || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL))) | |
1118 && ccline.cmdbuff[ccline.cmdpos] != ' '); | 1126 && ccline.cmdbuff[ccline.cmdpos] != ' '); |
1119 #ifdef FEAT_MBYTE | 1127 #ifdef FEAT_MBYTE |
1120 if (has_mbyte) | 1128 if (has_mbyte) |
1121 set_cmdspos_cursor(); | 1129 set_cmdspos_cursor(); |
1122 #endif | 1130 #endif |
1123 goto cmdline_not_changed; | 1131 goto cmdline_not_changed; |
1124 | 1132 |
1125 case K_LEFT: | 1133 case K_LEFT: |
1134 case K_XLEFT: | |
1126 case K_S_LEFT: | 1135 case K_S_LEFT: |
1127 case K_C_LEFT: | 1136 case K_C_LEFT: |
1128 do | 1137 do |
1129 { | 1138 { |
1130 if (ccline.cmdpos == 0) | 1139 if (ccline.cmdpos == 0) |
1135 ccline.cmdpos -= (*mb_head_off)(ccline.cmdbuff, | 1144 ccline.cmdpos -= (*mb_head_off)(ccline.cmdbuff, |
1136 ccline.cmdbuff + ccline.cmdpos); | 1145 ccline.cmdbuff + ccline.cmdpos); |
1137 #endif | 1146 #endif |
1138 ccline.cmdspos -= cmdline_charsize(ccline.cmdpos); | 1147 ccline.cmdspos -= cmdline_charsize(ccline.cmdpos); |
1139 } | 1148 } |
1140 while ((c == K_S_LEFT || c == K_C_LEFT) | 1149 while ((c == K_S_LEFT || c == K_C_LEFT |
1150 || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL))) | |
1141 && ccline.cmdbuff[ccline.cmdpos - 1] != ' '); | 1151 && ccline.cmdbuff[ccline.cmdpos - 1] != ' '); |
1142 #ifdef FEAT_MBYTE | 1152 #ifdef FEAT_MBYTE |
1143 if (has_mbyte) | 1153 if (has_mbyte) |
1144 set_cmdspos_cursor(); | 1154 set_cmdspos_cursor(); |
1145 #endif | 1155 #endif |
1318 goto cmdline_changed; | 1328 goto cmdline_changed; |
1319 } | 1329 } |
1320 | 1330 |
1321 #ifdef FEAT_CMDHIST | 1331 #ifdef FEAT_CMDHIST |
1322 case K_UP: | 1332 case K_UP: |
1333 case K_XUP: | |
1323 case K_DOWN: | 1334 case K_DOWN: |
1335 case K_XDOWN: | |
1324 case K_S_UP: | 1336 case K_S_UP: |
1325 case K_S_DOWN: | 1337 case K_S_DOWN: |
1326 case K_PAGEUP: | 1338 case K_PAGEUP: |
1327 case K_KPAGEUP: | 1339 case K_KPAGEUP: |
1328 case K_PAGEDOWN: | 1340 case K_PAGEDOWN: |
1342 | 1354 |
1343 j = (int)STRLEN(lookfor); | 1355 j = (int)STRLEN(lookfor); |
1344 for (;;) | 1356 for (;;) |
1345 { | 1357 { |
1346 /* one step backwards */ | 1358 /* one step backwards */ |
1347 if (c == K_UP || c == K_S_UP || c == Ctrl_P || | 1359 if (c == K_UP || c == K_XUP || c == K_S_UP || c == Ctrl_P |
1348 c == K_PAGEUP || c == K_KPAGEUP) | 1360 || c == K_PAGEUP || c == K_KPAGEUP) |
1349 { | 1361 { |
1350 if (hiscnt == hislen) /* first time */ | 1362 if (hiscnt == hislen) /* first time */ |
1351 hiscnt = hisidx[histype]; | 1363 hiscnt = hisidx[histype]; |
1352 else if (hiscnt == 0 && hisidx[histype] != hislen - 1) | 1364 else if (hiscnt == 0 && hisidx[histype] != hislen - 1) |
1353 hiscnt = hislen - 1; | 1365 hiscnt = hislen - 1; |
1379 if (hiscnt < 0 || history[histype][hiscnt].hisstr == NULL) | 1391 if (hiscnt < 0 || history[histype][hiscnt].hisstr == NULL) |
1380 { | 1392 { |
1381 hiscnt = i; | 1393 hiscnt = i; |
1382 break; | 1394 break; |
1383 } | 1395 } |
1384 if ((c != K_UP && c != K_DOWN) || hiscnt == i | 1396 if ((c != K_UP && c != K_DOWN && c != K_XUP && c != K_XDOWN) |
1397 || hiscnt == i | |
1385 || STRNCMP(history[histype][hiscnt].hisstr, | 1398 || STRNCMP(history[histype][hiscnt].hisstr, |
1386 lookfor, (size_t)j) == 0) | 1399 lookfor, (size_t)j) == 0) |
1387 break; | 1400 break; |
1388 } | 1401 } |
1389 | 1402 |