support other whitespace chars in word movements
This commit is contained in:
parent
92e572fc89
commit
bc2c14c899
16
text.lua
16
text.lua
|
@ -519,9 +519,7 @@ function Text.word_left(left, right)
|
|||
Text.left(left, right)
|
||||
if Cursor1.pos == 1 then break end
|
||||
assert(Cursor1.pos > 1)
|
||||
local offset = Text.offset(Lines[Cursor1.line].data, Cursor1.pos)
|
||||
assert(offset > 1)
|
||||
if Lines[Cursor1.line].data:sub(offset-1,offset-1) == ' ' then
|
||||
if Text.match(Lines[Cursor1.line].data, Cursor1.pos-1, '%s') then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
@ -531,8 +529,7 @@ function Text.word_right(left, right)
|
|||
while true do
|
||||
Text.right_without_scroll()
|
||||
if Cursor1.pos > utf8.len(Lines[Cursor1.line].data) then break end
|
||||
local offset = Text.offset(Lines[Cursor1.line].data, Cursor1.pos)
|
||||
if Lines[Cursor1.line].data:sub(offset,offset) == ' ' then -- TODO: other space characters
|
||||
if Text.match(Lines[Cursor1.line].data, Cursor1.pos, '%s') then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
@ -541,6 +538,15 @@ function Text.word_right(left, right)
|
|||
end
|
||||
end
|
||||
|
||||
function Text.match(s, pos, pat)
|
||||
local start_offset = Text.offset(s, pos)
|
||||
assert(start_offset)
|
||||
local end_offset = Text.offset(s, pos+1)
|
||||
assert(end_offset > start_offset)
|
||||
local curr = s:sub(start_offset, end_offset-1)
|
||||
return curr:match(pat)
|
||||
end
|
||||
|
||||
function Text.left(left, right)
|
||||
assert(Lines[Cursor1.line].mode == 'text')
|
||||
if Cursor1.pos > 1 then
|
||||
|
|
|
@ -141,6 +141,17 @@ function test_skip_to_previous_word()
|
|||
check_eq(Cursor1.pos, 1, 'F - test_skip_to_previous_word')
|
||||
end
|
||||
|
||||
function test_skip_past_tab_to_previous_word()
|
||||
io.write('\ntest_skip_past_tab_to_previous_word')
|
||||
App.screen.init{width=120, height=60}
|
||||
Lines = load_array{'abc def\tghi'}
|
||||
Cursor1 = {line=1, pos=10} -- within third word
|
||||
Margin_right = 0; Margin_width = Margin_left
|
||||
App.draw()
|
||||
App.run_after_keychord('M-left')
|
||||
check_eq(Cursor1.pos, 9, 'F - test_skip_past_tab_to_previous_word')
|
||||
end
|
||||
|
||||
function test_move_to_start_of_word_on_previous_line()
|
||||
io.write('\ntest_move_to_start_of_word_on_previous_line')
|
||||
App.screen.init{width=120, height=60}
|
||||
|
@ -175,6 +186,17 @@ function test_skip_to_next_word()
|
|||
check_eq(Cursor1.pos, 8, 'F - test_skip_to_next_word')
|
||||
end
|
||||
|
||||
function test_skip_past_tab_to_next_word()
|
||||
io.write('\ntest_skip_past_tab_to_next_word')
|
||||
App.screen.init{width=120, height=60}
|
||||
Lines = load_array{'abc\tdef'}
|
||||
Cursor1 = {line=1, pos=1} -- at the space between words
|
||||
Margin_right = 0; Margin_width = Margin_left
|
||||
App.draw()
|
||||
App.run_after_keychord('M-right')
|
||||
check_eq(Cursor1.pos, 4, 'F - test_skip_past_tab_to_next_word')
|
||||
end
|
||||
|
||||
function test_move_past_end_of_word_on_next_line()
|
||||
io.write('\ntest_move_past_end_of_word_on_next_line')
|
||||
App.screen.init{width=120, height=60}
|
||||
|
|
Loading…
Reference in New Issue