1
0
forked from aniani/vim

Make CTRL-L in command line mode respect 'ignorecase' and 'smartcase'. (Martin

Toft)
This commit is contained in:
Bram Moolenaar
2010-07-11 20:46:53 +02:00
parent a3f4166286
commit a9dc375744
7 changed files with 62 additions and 50 deletions

View File

@@ -416,7 +416,10 @@ CTRL-L A match is done on the pattern in front of the cursor. If
than the pattern, no completion is done.
When 'incsearch' is set, entering a search pattern for "/" or
"?" and the current match is displayed then CTRL-L will add
one character from the end of the current match.
one character from the end of the current match. If
'ignorecase' and 'smartcase' are set and the command line has
no uppercase characters, the added character is converted to
lowercase.
The 'wildchar' option defaults to <Tab> (CTRL-E when in Vi compatible mode; in
a previous version <Esc> was used). In the pattern standard wildcards '*' and

View File

@@ -3976,7 +3976,9 @@ A jump table for the options with a short description can be found at |Q_op|.
The highlighting can be set with the 'i' flag in 'highlight'.
See also: 'hlsearch'.
CTRL-L can be used to add one character from after the current match
to the command line.
to the command line. If 'ignorecase' and 'smartcase' are set and the
command line has no uppercase characters, the added character is
converted to lowercase.
CTRL-R CTRL-W can be used to add the word at the end of the current
match, excluding the characters that were already typed.
NOTE: This option is reset when 'compatible' is set.

View File

@@ -1088,14 +1088,16 @@ Patch to support horizontal scroll wheel in GTK. Untested. (Bjorn Winckler,
2010 Jun 30)
Before (beta) release 7.3:
- Add fixes for 7.2 to version7.txt
- Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23)
Vim 7.3:
configure: -pthread appears in cproto arguments, from GTK
- Soon: remove UF_VERSION_CRYPT_PREV and UF_VERSION_PREV.
- Conceal feature: no update when moving to another window. (Dominique Pelle,
2010 Jul 5) Vince will look into it.
Patches to possibly include:
- Patch for gtk main_loop() to enable GtkFileChooser. (James Vega, 2010 Jun 28)
Same as this one? GTK: file chooser is disabled. Patch by Tim Starling,
2009 Nov 13.
- Patch to make CTRL-L work better with 'ignorecase' and 'smartcase'. (Martin
Toft, 2010 Jun 8, Jun 16, Jun 30)
- Patch to add diff functionality to 2html.vim. (Christian Brabandt, 2009 Dec
@@ -1157,9 +1159,6 @@ Probably not now:
- Use timestamps for undo, so that a version a certain time ago can be found
and info before some time/date can be flushed. 'undopersist' gives maximum
time to keep undo: "3h", "1d", "2w", "1y", etc.
Before (beta) release:
- Add fixes for 7.2 to version7.txt
- Rename vim73 branch to default (hints: Xavier de Gaye, 2010 May 23)
More patches:

View File

@@ -1411,6 +1411,11 @@ getcmdline(firstc, count, indent)
&& !equalpos(curwin->w_cursor, old_cursor))
{
c = gchar_cursor();
/* If 'ignorecase' and 'smartcase' are set and the
* command line has no uppercase characters, convert
* the character to lowercase */
if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff))
c = MB_TOLOWER(c);
if (c != NUL)
{
if (c == firstc || vim_strchr((char_u *)(

View File

@@ -9606,7 +9606,7 @@ FreeWild(count, files)
}
/*
* return TRUE when need to go to Insert mode because of 'insertmode'.
* Return TRUE when need to go to Insert mode because of 'insertmode'.
* Don't do this when still processing a command or a mapping.
* Don't do this when inside a ":normal" command.
*/

View File

@@ -6,6 +6,7 @@ void save_search_patterns __ARGS((void));
void restore_search_patterns __ARGS((void));
void free_search_patterns __ARGS((void));
int ignorecase __ARGS((char_u *pat));
int pat_has_uppercase __ARGS((char_u *pat));
char_u *last_search_pat __ARGS((void));
void reset_search_dir __ARGS((void));
void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));

View File

@@ -365,58 +365,60 @@ free_search_patterns()
ignorecase(pat)
char_u *pat;
{
char_u *p;
int ic;
int ic = p_ic;
ic = p_ic;
if (ic && !no_smartcase && p_scs
#ifdef FEAT_INS_EXPAND
&& !(ctrl_x_mode && curbuf->b_p_inf)
#endif
)
{
/* don't ignore case if pattern has uppercase */
for (p = pat; *p; )
{
#ifdef FEAT_MBYTE
int l;
if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
{
if (enc_utf8 && utf_isupper(utf_ptr2char(p)))
{
ic = FALSE;
break;
}
p += l;
}
else
#endif
if (*p == '\\')
{
if (p[1] == '_' && p[2] != NUL) /* skip "\_X" */
p += 3;
else if (p[1] == '%' && p[2] != NUL) /* skip "\%X" */
p += 3;
else if (p[1] != NUL) /* skip "\X" */
p += 2;
else
p += 1;
}
else if (MB_ISUPPER(*p))
{
ic = FALSE;
break;
}
else
++p;
}
}
ic = !pat_has_uppercase(pat);
no_smartcase = FALSE;
return ic;
}
/*
* Return TRUE if patter "pat" has an uppercase character.
*/
int
pat_has_uppercase(pat)
char_u *pat;
{
char_u *p = pat;
while (*p != NUL)
{
#ifdef FEAT_MBYTE
int l;
if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
{
if (enc_utf8 && utf_isupper(utf_ptr2char(p)))
return TRUE;
p += l;
}
else
#endif
if (*p == '\\')
{
if (p[1] == '_' && p[2] != NUL) /* skip "\_X" */
p += 3;
else if (p[1] == '%' && p[2] != NUL) /* skip "\%X" */
p += 3;
else if (p[1] != NUL) /* skip "\X" */
p += 2;
else
p += 1;
}
else if (MB_ISUPPER(*p))
return TRUE;
else
++p;
}
return FALSE;
}
char_u *
last_search_pat()
{