Skip to content

Commit 39564ae

Browse files
committed
adapt all other operations
1 parent d5afdae commit 39564ae

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/rime/gear/navigator.cc

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,11 @@ bool Navigator::LeftByCharNoLoop(Context* ctx) {
124124
bool Navigator::Rewind(Context* ctx) {
125125
BeginMove(ctx);
126126
// take a jump leftwards when there are multiple spans,
127-
// but not from the middle of a span.
128-
if (spans_.Count() > 1 && spans_.HasVertex(ctx->caret_pos())) {
127+
// but not from the middle of a span
128+
size_t caret_pos = ctx->caret_pos();
129+
if (stop_before_delimiter_)
130+
caret_pos = SkipDelimiterForward(caret_pos);
131+
if (spans_.Count() > 1 && spans_.HasVertex(caret_pos)) {
129132
size_t confirmed_pos = ctx->composition().GetConfirmedPosition();
130133
JumpLeft(ctx, confirmed_pos, true);
131134
} else {
@@ -136,7 +139,10 @@ bool Navigator::Rewind(Context* ctx) {
136139

137140
bool Navigator::Forward(Context* ctx) {
138141
BeginMove(ctx);
139-
if (spans_.Count() > 1 && spans_.HasVertex(ctx->caret_pos())) {
142+
size_t caret_pos = SkipDelimiterForward(ctx->caret_pos());
143+
if (stop_before_delimiter_)
144+
caret_pos = SkipDelimiterForward(caret_pos);
145+
if (spans_.Count() > 1 && spans_.HasVertex(caret_pos)) {
140146
size_t confirmed_pos = ctx->composition().GetConfirmedPosition();
141147
JumpRight(ctx, confirmed_pos, true);
142148
} else {
@@ -201,6 +207,8 @@ void Navigator::BeginMove(Context* ctx) {
201207
bool Navigator::JumpLeft(Context* ctx, size_t start_pos, bool loop) {
202208
DLOG(INFO) << "jump left.";
203209
size_t caret_pos = ctx->caret_pos();
210+
if (stop_before_delimiter_)
211+
caret_pos = SkipDelimiterForward(caret_pos);
204212
size_t end_of_translation = spans_.end();
205213
size_t end_of_input = ctx->input().length();
206214
size_t new_pos =
@@ -228,6 +236,8 @@ bool Navigator::JumpLeft(Context* ctx, size_t start_pos, bool loop) {
228236
bool Navigator::JumpRight(Context* ctx, size_t start_pos, bool loop) {
229237
DLOG(INFO) << "jump right.";
230238
size_t caret_pos = ctx->caret_pos();
239+
if (stop_before_delimiter_)
240+
caret_pos = SkipDelimiterForward(caret_pos);
231241
size_t end_of_translation = spans_.end();
232242
size_t end_of_input = ctx->input().length();
233243
size_t new_pos =
@@ -304,4 +314,11 @@ size_t Navigator::SkipDelimiterBackward(size_t pos) {
304314
return pos;
305315
}
306316

317+
size_t Navigator::SkipDelimiterForward(size_t pos) {
318+
while (pos < input_.length() - 1 &&
319+
delimiters_.find(input_[pos]) != string::npos)
320+
pos++;
321+
return pos;
322+
}
323+
307324
} // namespace rime

src/rime/gear/navigator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class Navigator : public Processor, public KeyBindingProcessor<Navigator, 2> {
5959
string delimiters_;
6060
bool stop_before_delimiter_ = false;
6161
size_t SkipDelimiterBackward(size_t pos);
62+
size_t SkipDelimiterForward(size_t pos);
6263
};
6364

6465
} // namespace rime

0 commit comments

Comments
 (0)