Compare commits

...

2 Commits

Author SHA1 Message Date
Přemysl Eric Janouch 8d9d1c60ec
xW: make Up/Down go through input history
The input field isn't multiline, so this doesn't pose an issue.
Otherwise, we'd have to check if we're on the top line first.
2023-07-27 16:35:54 +02:00
Přemysl Eric Janouch 8c1464822b
xW: don't delay sending out pongs 2023-07-27 16:19:32 +02:00
1 changed files with 41 additions and 23 deletions

View File

@ -848,7 +848,7 @@ relay_process_message(const Relay::EventMessage &m)
{
auto pong = new Relay::CommandData_PingResponse();
pong->event_seq = m.event_seq;
relay_send(pong);
relay_send_now(pong);
break;
}
@ -1301,6 +1301,32 @@ input_complete()
return true;
}
static bool
input_up()
{
auto b = buffer_by_name(g.buffer_current);
if (!b || b->history_at < 1)
return false;
if (b->history_at == b->history.size())
b->input = window_get_text(g.hwndInput);
input_set_contents(b->history.at(--b->history_at));
return true;
}
static bool
input_down()
{
auto b = buffer_by_name(g.buffer_current);
if (!b || b->history_at >= b->history.size())
return false;
input_set_contents(++b->history_at == b->history.size()
? b->input
: b->history.at(b->history_at));
return true;
}
static boolean
input_wants(const MSG *message)
{
@ -1332,34 +1358,18 @@ input_proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
return lResult;
}
case WM_SYSCHAR:
{
auto b = buffer_by_name(g.buffer_current);
if (!b)
break;
// TODO(p): Emacs-style cursor movement shortcuts.
switch (wParam) {
case 'p':
{
if (b->history_at < 1)
break;
if (b->history_at == b->history.size())
b->input = window_get_text(g.hwndInput);
input_set_contents(b->history.at(--b->history_at));
return 0;
}
if (input_up())
return 0;
break;
case 'n':
{
if (b->history_at >= b->history.size())
break;
input_set_contents(++b->history_at == b->history.size()
? b->input
: b->history.at(b->history_at));
return 0;
}
if (input_down())
return 0;
break;
}
break;
}
case WM_KEYDOWN:
{
HWND scrollable = IsWindowVisible(g.hwndBufferLog)
@ -1367,6 +1377,14 @@ input_proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam,
: g.hwndBuffer;
switch (wParam) {
case VK_UP:
if (input_up())
return 0;
break;
case VK_DOWN:
if (input_down())
return 0;
break;
case VK_PRIOR:
SendMessage(scrollable, EM_SCROLL, SB_PAGEUP, 0);
return 0;