Mercurial > vim
comparison src/ex_getln.c @ 230:9281a51ca7a2
updated for version 7.0064
author | vimboss |
---|---|
date | Fri, 25 Mar 2005 21:53:48 +0000 |
parents | 49748afd794b |
children | 006e9c8a6a8a |
comparison
equal
deleted
inserted
replaced
229:723a01584c3e | 230:9281a51ca7a2 |
---|---|
324 * typed by the user directly, not when the result of a | 324 * typed by the user directly, not when the result of a |
325 * mapping. */ | 325 * mapping. */ |
326 switch (c) | 326 switch (c) |
327 { | 327 { |
328 case K_RIGHT: c = K_LEFT; break; | 328 case K_RIGHT: c = K_LEFT; break; |
329 case K_XRIGHT: c = K_XLEFT; break; | |
330 case K_S_RIGHT: c = K_S_LEFT; break; | 329 case K_S_RIGHT: c = K_S_LEFT; break; |
331 case K_C_RIGHT: c = K_C_LEFT; break; | 330 case K_C_RIGHT: c = K_C_LEFT; break; |
332 case K_LEFT: c = K_RIGHT; break; | 331 case K_LEFT: c = K_RIGHT; break; |
333 case K_XLEFT: c = K_XRIGHT; break; | |
334 case K_S_LEFT: c = K_S_RIGHT; break; | 332 case K_S_LEFT: c = K_S_RIGHT; break; |
335 case K_C_LEFT: c = K_C_RIGHT; break; | 333 case K_C_LEFT: c = K_C_RIGHT; break; |
336 } | 334 } |
337 } | 335 } |
338 #endif | 336 #endif |
361 #ifdef FEAT_CMDHIST | 359 #ifdef FEAT_CMDHIST |
362 /* free old command line when finished moving around in the history | 360 /* free old command line when finished moving around in the history |
363 * list */ | 361 * list */ |
364 if (lookfor != NULL | 362 if (lookfor != NULL |
365 && c != K_S_DOWN && c != K_S_UP | 363 && c != K_S_DOWN && c != K_S_UP |
366 && c != K_DOWN && c != K_UP && c != K_XDOWN && c != K_XUP | 364 && c != K_DOWN && c != K_UP |
367 && c != K_PAGEDOWN && c != K_PAGEUP | 365 && c != K_PAGEDOWN && c != K_PAGEUP |
368 && c != K_KPAGEDOWN && c != K_KPAGEUP | 366 && c != K_KPAGEDOWN && c != K_KPAGEUP |
369 && c != K_LEFT && c != K_RIGHT && c != K_XLEFT && c != K_XRIGHT | 367 && c != K_LEFT && c != K_RIGHT |
370 && (xpc.xp_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N))) | 368 && (xpc.xp_numfiles > 0 || (c != Ctrl_P && c != Ctrl_N))) |
371 { | 369 { |
372 vim_free(lookfor); | 370 vim_free(lookfor); |
373 lookfor = NULL; | 371 lookfor = NULL; |
374 } | 372 } |
382 | 380 |
383 #ifdef FEAT_WILDMENU | 381 #ifdef FEAT_WILDMENU |
384 /* Special translations for 'wildmenu' */ | 382 /* Special translations for 'wildmenu' */ |
385 if (did_wild_list && p_wmnu) | 383 if (did_wild_list && p_wmnu) |
386 { | 384 { |
387 if (c == K_LEFT || c == K_XLEFT) | 385 if (c == K_LEFT) |
388 c = Ctrl_P; | 386 c = Ctrl_P; |
389 else if (c == K_RIGHT || c == K_XRIGHT) | 387 else if (c == K_RIGHT) |
390 c = Ctrl_N; | 388 c = Ctrl_N; |
391 } | 389 } |
392 /* Hitting CR after "emenu Name.": complete submenu */ | 390 /* Hitting CR after "emenu Name.": complete submenu */ |
393 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu | 391 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu |
394 && ccline.cmdpos > 1 | 392 && ccline.cmdpos > 1 |
405 && c != Ctrl_L) | 403 && c != Ctrl_L) |
406 { | 404 { |
407 (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE); | 405 (void)ExpandOne(&xpc, NULL, NULL, 0, WILD_FREE); |
408 did_wild_list = FALSE; | 406 did_wild_list = FALSE; |
409 #ifdef FEAT_WILDMENU | 407 #ifdef FEAT_WILDMENU |
410 if (!p_wmnu || (c != K_UP && c != K_DOWN | 408 if (!p_wmnu || (c != K_UP && c != K_DOWN)) |
411 && c != K_XUP && c != K_XDOWN)) | |
412 #endif | 409 #endif |
413 xpc.xp_context = EXPAND_NOTHING; | 410 xpc.xp_context = EXPAND_NOTHING; |
414 wim_index = 0; | 411 wim_index = 0; |
415 #ifdef FEAT_WILDMENU | 412 #ifdef FEAT_WILDMENU |
416 if (p_wmnu && wild_menu_showing != 0) | 413 if (p_wmnu && wild_menu_showing != 0) |
453 #ifdef FEAT_WILDMENU | 450 #ifdef FEAT_WILDMENU |
454 /* Special translations for 'wildmenu' */ | 451 /* Special translations for 'wildmenu' */ |
455 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu) | 452 if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu) |
456 { | 453 { |
457 /* Hitting <Down> after "emenu Name.": complete submenu */ | 454 /* Hitting <Down> after "emenu Name.": complete submenu */ |
458 if (ccline.cmdbuff[ccline.cmdpos - 1] == '.' | 455 if (ccline.cmdbuff[ccline.cmdpos - 1] == '.' && c == K_DOWN) |
459 && (c == K_DOWN || c == K_XDOWN)) | |
460 c = p_wc; | 456 c = p_wc; |
461 else if (c == K_UP || c == K_XUP) | 457 else if (c == K_UP) |
462 { | 458 { |
463 /* Hitting <Up>: Remove one submenu name in front of the | 459 /* Hitting <Up>: Remove one submenu name in front of the |
464 * cursor */ | 460 * cursor */ |
465 int found = FALSE; | 461 int found = FALSE; |
466 | 462 |
503 upseg[2] = '.'; | 499 upseg[2] = '.'; |
504 upseg[3] = PATHSEP; | 500 upseg[3] = PATHSEP; |
505 upseg[4] = NUL; | 501 upseg[4] = NUL; |
506 | 502 |
507 if (ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP | 503 if (ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP |
508 && (c == K_DOWN || c == K_XDOWN) | 504 && c == K_DOWN |
509 && (ccline.cmdbuff[ccline.cmdpos - 2] != '.' | 505 && (ccline.cmdbuff[ccline.cmdpos - 2] != '.' |
510 || ccline.cmdbuff[ccline.cmdpos - 3] != '.')) | 506 || ccline.cmdbuff[ccline.cmdpos - 3] != '.')) |
511 { | 507 { |
512 /* go down a directory */ | 508 /* go down a directory */ |
513 c = p_wc; | 509 c = p_wc; |
514 } | 510 } |
515 else if (STRNCMP(xpc.xp_pattern, upseg + 1, 3) == 0 | 511 else if (STRNCMP(xpc.xp_pattern, upseg + 1, 3) == 0 && c == K_DOWN) |
516 && (c == K_DOWN || c == K_XDOWN)) | |
517 { | 512 { |
518 /* If in a direct ancestor, strip off one ../ to go down */ | 513 /* If in a direct ancestor, strip off one ../ to go down */ |
519 int found = FALSE; | 514 int found = FALSE; |
520 | 515 |
521 j = ccline.cmdpos; | 516 j = ccline.cmdpos; |
539 { | 534 { |
540 cmdline_del(j - 2); | 535 cmdline_del(j - 2); |
541 c = p_wc; | 536 c = p_wc; |
542 } | 537 } |
543 } | 538 } |
544 else if (c == K_UP || c == K_XUP) | 539 else if (c == K_UP) |
545 { | 540 { |
546 /* go up a directory */ | 541 /* go up a directory */ |
547 int found = FALSE; | 542 int found = FALSE; |
548 | 543 |
549 j = ccline.cmdpos - 1; | 544 j = ccline.cmdpos - 1; |
1105 | 1100 |
1106 redrawcmd(); | 1101 redrawcmd(); |
1107 continue; /* don't do incremental search now */ | 1102 continue; /* don't do incremental search now */ |
1108 | 1103 |
1109 case K_RIGHT: | 1104 case K_RIGHT: |
1110 case K_XRIGHT: | |
1111 case K_S_RIGHT: | 1105 case K_S_RIGHT: |
1112 case K_C_RIGHT: | 1106 case K_C_RIGHT: |
1113 do | 1107 do |
1114 { | 1108 { |
1115 if (ccline.cmdpos >= ccline.cmdlen) | 1109 if (ccline.cmdpos >= ccline.cmdlen) |
1134 set_cmdspos_cursor(); | 1128 set_cmdspos_cursor(); |
1135 #endif | 1129 #endif |
1136 goto cmdline_not_changed; | 1130 goto cmdline_not_changed; |
1137 | 1131 |
1138 case K_LEFT: | 1132 case K_LEFT: |
1139 case K_XLEFT: | |
1140 case K_S_LEFT: | 1133 case K_S_LEFT: |
1141 case K_C_LEFT: | 1134 case K_C_LEFT: |
1142 do | 1135 do |
1143 { | 1136 { |
1144 if (ccline.cmdpos == 0) | 1137 if (ccline.cmdpos == 0) |
1294 goto cmdline_not_changed; | 1287 goto cmdline_not_changed; |
1295 | 1288 |
1296 case Ctrl_B: /* begin of command line */ | 1289 case Ctrl_B: /* begin of command line */ |
1297 case K_HOME: | 1290 case K_HOME: |
1298 case K_KHOME: | 1291 case K_KHOME: |
1299 case K_XHOME: | |
1300 case K_S_HOME: | 1292 case K_S_HOME: |
1301 case K_C_HOME: | 1293 case K_C_HOME: |
1302 ccline.cmdpos = 0; | 1294 ccline.cmdpos = 0; |
1303 set_cmdspos(); | 1295 set_cmdspos(); |
1304 goto cmdline_not_changed; | 1296 goto cmdline_not_changed; |
1305 | 1297 |
1306 case Ctrl_E: /* end of command line */ | 1298 case Ctrl_E: /* end of command line */ |
1307 case K_END: | 1299 case K_END: |
1308 case K_KEND: | 1300 case K_KEND: |
1309 case K_XEND: | |
1310 case K_S_END: | 1301 case K_S_END: |
1311 case K_C_END: | 1302 case K_C_END: |
1312 ccline.cmdpos = ccline.cmdlen; | 1303 ccline.cmdpos = ccline.cmdlen; |
1313 set_cmdspos_cursor(); | 1304 set_cmdspos_cursor(); |
1314 goto cmdline_not_changed; | 1305 goto cmdline_not_changed; |
1333 goto cmdline_changed; | 1324 goto cmdline_changed; |
1334 } | 1325 } |
1335 | 1326 |
1336 #ifdef FEAT_CMDHIST | 1327 #ifdef FEAT_CMDHIST |
1337 case K_UP: | 1328 case K_UP: |
1338 case K_XUP: | |
1339 case K_DOWN: | 1329 case K_DOWN: |
1340 case K_XDOWN: | |
1341 case K_S_UP: | 1330 case K_S_UP: |
1342 case K_S_DOWN: | 1331 case K_S_DOWN: |
1343 case K_PAGEUP: | 1332 case K_PAGEUP: |
1344 case K_KPAGEUP: | 1333 case K_KPAGEUP: |
1345 case K_PAGEDOWN: | 1334 case K_PAGEDOWN: |
1359 | 1348 |
1360 j = (int)STRLEN(lookfor); | 1349 j = (int)STRLEN(lookfor); |
1361 for (;;) | 1350 for (;;) |
1362 { | 1351 { |
1363 /* one step backwards */ | 1352 /* one step backwards */ |
1364 if (c == K_UP || c == K_XUP || c == K_S_UP || c == Ctrl_P | 1353 if (c == K_UP|| c == K_S_UP || c == Ctrl_P |
1365 || c == K_PAGEUP || c == K_KPAGEUP) | 1354 || c == K_PAGEUP || c == K_KPAGEUP) |
1366 { | 1355 { |
1367 if (hiscnt == hislen) /* first time */ | 1356 if (hiscnt == hislen) /* first time */ |
1368 hiscnt = hisidx[histype]; | 1357 hiscnt = hisidx[histype]; |
1369 else if (hiscnt == 0 && hisidx[histype] != hislen - 1) | 1358 else if (hiscnt == 0 && hisidx[histype] != hislen - 1) |
1396 if (hiscnt < 0 || history[histype][hiscnt].hisstr == NULL) | 1385 if (hiscnt < 0 || history[histype][hiscnt].hisstr == NULL) |
1397 { | 1386 { |
1398 hiscnt = i; | 1387 hiscnt = i; |
1399 break; | 1388 break; |
1400 } | 1389 } |
1401 if ((c != K_UP && c != K_DOWN && c != K_XUP && c != K_XDOWN) | 1390 if ((c != K_UP && c != K_DOWN) |
1402 || hiscnt == i | 1391 || hiscnt == i |
1403 || STRNCMP(history[histype][hiscnt].hisstr, | 1392 || STRNCMP(history[histype][hiscnt].hisstr, |
1404 lookfor, (size_t)j) == 0) | 1393 lookfor, (size_t)j) == 0) |
1405 break; | 1394 break; |
1406 } | 1395 } |