diff --git a/libs/ui/source/edit.cpp b/libs/ui/source/edit.cpp index 4a00c769..56bee447 100644 --- a/libs/ui/source/edit.cpp +++ b/libs/ui/source/edit.cpp @@ -196,19 +196,41 @@ namespace psemek::ui { if (e.key == SDLK_LEFT) { - if (caret_ > 0) + if (ctrl_down_) { - --caret_; + std::size_t start = caret_; + while (start > 0 && std::isspace(text_[start - 1])) --start; + while (start > 0 && !std::isspace(text_[start - 1])) --start; + caret_ = start; reset_caret(); } + else + { + if (caret_ > 0) + { + --caret_; + reset_caret(); + } + } } else if (e.key == SDLK_RIGHT) { - if (caret_ < text_.size()) + if (ctrl_down_) { - ++caret_; + std::size_t end = caret_; + while (end < text_.size() && !std::isspace(text_[end])) ++end; + while (end < text_.size() && std::isspace(text_[end])) ++end; + caret_ = end; reset_caret(); } + else + { + if (caret_ < text_.size()) + { + ++caret_; + reset_caret(); + } + } } else if (e.key == SDLK_HOME) {