aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader.cpp
diff options
context:
space:
mode:
authorGravatar Christian Rishøj <christian@rishoj.net>2013-09-09 18:46:16 +0200
committerGravatar Christian Rishøj <christian@rishoj.net>2013-09-09 18:46:16 +0200
commitcd1c2f74d3bcc9a1d3c5eaad007788e950e27c74 (patch)
tree3a97cce87848bcb2019f113d00de2560052d1e16 /reader.cpp
parenta1020b3e6129ddeee8709a757f3275c19a81a0f5 (diff)
add support for downcase-word, upcase-word and capitalise-word
Diffstat (limited to 'reader.cpp')
-rw-r--r--reader.cpp38
1 files changed, 37 insertions, 1 deletions
diff --git a/reader.cpp b/reader.cpp
index c8e28bfa..de0b3679 100644
--- a/reader.cpp
+++ b/reader.cpp
@@ -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:
{