bug: allow '/' in search

This commit is contained in:
Kartik K. Agaram 2021-08-14 08:18:30 -07:00
parent fc7eb937f3
commit aaf9984039
1 changed files with 22 additions and 21 deletions

View File

@ -666,28 +666,29 @@ fn render-json-escaped-unicode-grapheme screen: (addr screen), stream: (addr str
fn update-environment _env: (addr environment), key: byte, users: (addr array user), channels: (addr array channel), items: (addr item-list) {
var env/edi: (addr environment) <- copy _env
# back in history
# first dispatch to search mode if necessary
{
compare key, 0x1b/esc
break-if-!=
{
var cursor-in-search?/eax: (addr boolean) <- get env, cursor-in-search?
compare *cursor-in-search?, 0/false
break-if-=
copy-to *cursor-in-search?, 0/false
return
}
previous-tab env
var cursor-in-search?/eax: (addr boolean) <- get env, cursor-in-search?
compare *cursor-in-search?, 0/false
break-if-=
update-search env, key, users, channels, items
return
}
{
compare key, 0x2f/slash
break-if-!=
# start search mode
# enter search mode
var cursor-in-search?/eax: (addr boolean) <- get env, cursor-in-search?
copy-to *cursor-in-search?, 1/true
return
}
{
compare key, 0x1b/esc
break-if-!=
# back in history
previous-tab env
return
}
var cursor-in-channels?/eax: (addr boolean) <- get env, cursor-in-channels?
{
compare key, 9/tab
@ -696,14 +697,6 @@ fn update-environment _env: (addr environment), key: byte, users: (addr array us
not *cursor-in-channels?
return
}
# dispatch based on where the cursor is
{
var cursor-in-search?/eax: (addr boolean) <- get env, cursor-in-search?
compare *cursor-in-search?, 0/false
break-if-=
update-search env, key, users, channels, items
return
}
{
compare *cursor-in-channels?, 0/false
break-if-!=
@ -773,11 +766,19 @@ fn update-channels-nav _env: (addr environment), key: byte, users: (addr array u
fn update-search _env: (addr environment), key: byte, users: (addr array user), channels: (addr array channel), items: (addr item-list) {
var env/edi: (addr environment) <- copy _env
var cursor-in-search?/eax: (addr boolean) <- get env, cursor-in-search?
{
compare key 0x1b/esc
break-if-!=
# get out of search mode
copy-to *cursor-in-search?, 0/false
return
}
{
compare key, 0xa/newline
break-if-!=
# perform a search, then get out of search mode
new-search-tab env, items
var cursor-in-search?/eax: (addr boolean) <- get env, cursor-in-search?
copy-to *cursor-in-search?, 0/false
return
}