IRC App: Alt scrolls, Up/Down recall sent lines; /j for /join

- Alt + ; / Alt + . scroll the Buffer back and forward
- Up / Down (Fn + ; / Fn + .) browse the last 30 sent lines, shell-style,
  returning to the draft past the newest (InputHistory, host-tested)
- /j is short for /join

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
This commit is contained in:
2026-10-03 20:12:33 +02:00
co-authored by Claude Opus 5.5
parent 1f0c1b2e14
commit 5ac6afa557
6 changed files with 152 additions and 4 deletions
@@ -366,6 +366,16 @@ void test_input_message_and_commands() {
TEST_ASSERT_EQUAL_STRING("/not a command", f.session->buffer(b).lines.back().text.c_str());
}
void test_j_is_short_for_join() {
Fixture f;
f.registerNow();
f.session->input(0, "/j #short", 0);
f.session->input(0, "/j #locked k3y", 0);
f.take();
TEST_ASSERT_TRUE(f.sent("JOIN #short"));
TEST_ASSERT_TRUE(f.sent("JOIN #locked k3y"));
}
void test_msg_opens_a_query_buffer() {
Fixture f;
f.registerNow();
@@ -483,6 +493,7 @@ int main() {
RUN_TEST(test_action_and_ctcp_version);
RUN_TEST(test_topic_is_kept);
RUN_TEST(test_input_message_and_commands);
RUN_TEST(test_j_is_short_for_join);
RUN_TEST(test_msg_opens_a_query_buffer);
RUN_TEST(test_text_in_the_server_buffer_explains_instead_of_sending);
RUN_TEST(test_quit_sends_and_is_remembered);