summaryrefslogtreecommitdiff
path: root/rt.lua
diff options
context:
space:
mode:
Diffstat (limited to 'rt.lua')
-rw-r--r--rt.lua126
1 files changed, 114 insertions, 12 deletions
diff --git a/rt.lua b/rt.lua
index 502cf83..da6c238 100644
--- a/rt.lua
+++ b/rt.lua
@@ -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