diff options
Diffstat (limited to 'rt.lua')
| -rw-r--r-- | rt.lua | 126 |
1 files changed, 114 insertions, 12 deletions
@@ -535,7 +535,7 @@ function rt.open_option_info(opt) end end -function rt.search_input_char(ev) +function rt.search_text_insert_char(ev) if ev.event ~= 'down' and ev.event ~= 'repeat' then return end @@ -543,13 +543,13 @@ function rt.search_input_char(ev) local menu = state:menu() menu:set_search_text( menu.search_text:sub(1, menu.search_cursor - 1) .. - ev.key_text .. - menu.search_text:sub(menu.search_cursor)) - menu:set_search_cursor(menu.search_cursor + #ev.key_text) + ev.key_text .. + menu.search_text:sub(menu.search_cursor), + menu.search_cursor + #ev.key_text) osd:dirty() end -function rt.search_input_bs() +function rt.search_text_del_prev_char() local menu = state:menu() if menu.search_cursor <= 1 then return @@ -558,12 +558,12 @@ function rt.search_input_bs() local pos = util.utf8_seek(menu.search_text, menu.search_cursor, -1) menu:set_search_text( menu.search_text:sub(1, pos - 1) .. - menu.search_text:sub(menu.search_cursor)) - menu:set_search_cursor(pos) + menu.search_text:sub(menu.search_cursor), + pos) osd:dirty() end -function rt.search_input_del() +function rt.search_text_del_next_char() local menu = state:menu() if menu.search_cursor > #menu.search_text then return @@ -571,8 +571,97 @@ function rt.search_input_del() menu:set_search_text( menu.search_text:sub(1, menu.search_cursor - 1) .. - menu.search_text:sub(util.utf8_seek( - menu.search_text, menu.search_cursor, 1))) + menu.search_text:sub(util.utf8_seek( + menu.search_text, menu.search_cursor, 1))) + osd:dirty() +end + +function rt.search_text_del_prev_word() + local menu = state:menu() + if menu.search_cursor <= 1 then + return + end + + local pos = menu.search_text:sub(1, menu.search_cursor - 1):match( + '()%S*%s*$') + menu:set_search_text( + menu.search_text:sub(1, pos - 1) .. + menu.search_text:sub(menu.search_cursor), + pos) + osd:dirty() +end + +function rt.search_text_del_next_word() + local menu = state:menu() + if menu.search_cursor > #menu.search_text then + return + end + + local pos = menu.search_text:match('%s*%S*()', menu.search_cursor) + menu:set_search_text( + menu.search_text:sub(1, menu.search_cursor - 1) .. + menu.search_text:sub(pos)) + osd:dirty() +end + +function rt.search_text_del_to_start() + local menu = state:menu() + if menu.search_cursor <= 1 then + return + end + + menu:set_search_text(menu.search_text:sub(menu.search_cursor), 1) + osd:dirty() +end + +function rt.search_text_del_to_end() + local menu = state:menu() + if menu.search_cursor > #menu.search_text then + return + end + + menu:set_search_text(menu.search_text:sub(1, menu.search_cursor - 1)) + osd:dirty() +end + +function rt.search_text_transpose_chars() + local menu = state:menu() + if menu.search_cursor <= 1 then + return + end + + local pos = util.utf8_seek(menu.search_text, menu.search_cursor, 1) + local cp2 = util.utf8_seek(menu.search_text, pos, -1) + if cp2 <= 1 then + return + end + local cp1 = util.utf8_seek(menu.search_text, cp2, -1) + + menu:set_search_text( + menu.search_text:sub(1, cp1 - 1) .. + menu.search_text:sub(cp2, pos - 1) .. + menu.search_text:sub(cp1, cp2 - 1) .. + menu.search_text:sub(pos), + pos) + osd:dirty() +end + +function rt.search_text_transpose_words() + local menu = state:menu() + if menu.search_cursor <= 1 then + return + end + + local pos = menu.search_text:match('%s*%S*()', menu.search_cursor) + local pre, w1, sp, w2 = menu.search_text:sub(1, pos - 1):match( + '^(.-)(%S+)(%s+)(%S+%s*)$') + if not pre then + return + end + + menu:set_search_text( + pre .. w2 .. sp .. w1 .. menu.search_text:sub(pos), + pos) osd:dirty() end @@ -582,18 +671,31 @@ local function set_search_cursor(pos) end end -function rt.search_cursor_left() +function rt.search_cursor_prev_char() local menu = state:menu() set_search_cursor(util.utf8_seek( menu.search_text, menu.search_cursor, -1)) end -function rt.search_cursor_right() +function rt.search_cursor_next_char() local menu = state:menu() set_search_cursor(util.utf8_seek( menu.search_text, menu.search_cursor, 1)) end +function rt.search_cursor_prev_word() + local menu = state:menu() + set_search_cursor( + menu.search_text:sub(1, menu.search_cursor - 1):match( + '()%S*%s*$')) +end + +function rt.search_cursor_next_word() + local menu = state:menu() + set_search_cursor( + menu.search_text:match('%s*%S*()', menu.search_cursor)) +end + function rt.search_cursor_start() set_search_cursor(1) end |
