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