add support for downcase-word, upcase-word and capitalise-word

This commit is contained in:
Christian Rishøj 2013-09-09 18:46:16 +02:00
parent a1020b3e61
commit cd1c2f74d3
4 changed files with 50 additions and 1 deletions

View file

@ -115,6 +115,9 @@ static const wchar_t * const name_arr[] =
L"self-insert",
L"transpose-chars",
L"transpose-words",
L"upcase-word",
L"downcase-word",
L"capitalize-word",
L"null",
L"eof",
L"vi-arg-digit",
@ -201,6 +204,9 @@ static const wchar_t code_arr[] =
R_SELF_INSERT,
R_TRANSPOSE_CHARS,
R_TRANSPOSE_WORDS,
R_UPCASE_WORD,
R_DOWNCASE_WORD,
R_CAPITALIZE_WORD,
R_NULL,
R_EOF,
R_VI_ARG_DIGIT,

View file

@ -44,6 +44,9 @@ enum
R_SELF_INSERT,
R_TRANSPOSE_CHARS,
R_TRANSPOSE_WORDS,
R_UPCASE_WORD,
R_DOWNCASE_WORD,
R_CAPITALIZE_WORD,
R_VI_ARG_DIGIT,
R_VI_DELETE_TO,
R_EXECUTE,

View file

@ -3790,7 +3790,43 @@ const wchar_t *reader_readline(void)
}
break;
}
case R_UPCASE_WORD:
{
size_t pos = data->buff_pos;
move_word(MOVE_DIR_RIGHT, false, move_word_style_punctuation, false);
for (; pos < data->buff_pos; pos++)
data->command_line.at(pos) = towupper(data->command_line.at(pos));
reader_repaint();
break;
}
case R_DOWNCASE_WORD:
{
size_t pos = data->buff_pos;
move_word(MOVE_DIR_RIGHT, false, move_word_style_punctuation, false);
for (; pos < data->buff_pos; pos++)
data->command_line.at(pos) = towlower(data->command_line.at(pos));
reader_repaint();
break;
}
case R_CAPITALIZE_WORD:
{
size_t pos = data->buff_pos;
bool capitalized_first = false;
move_word(MOVE_DIR_RIGHT, false, move_word_style_punctuation, false);
for (; pos < data->buff_pos; pos++) {
if (iswalnum(data->command_line.at(pos)) && !capitalized_first) {
data->command_line.at(pos) = towupper(data->command_line.at(pos));
capitalized_first = true;
} else
data->command_line.at(pos) = towlower(data->command_line.at(pos));
}
reader_repaint();
break;
}
/* Other, if a normal character, we add it to the command */
default:
{

View file

@ -70,6 +70,10 @@ function fish_default_key_bindings -d "Default (Emacs-like) key bindings for fis
bind \cb backward-char
bind \ct transpose-chars
bind \et transpose-words
bind \eu upcase-word
# This clashes with __fish_list_current_token
# bind \el downcase-word
bind \ec capitalize-word
bind \e\x7f backward-kill-word
bind \eb backward-word
bind \ef forward-word