From 6cb53b6e3867c56f5171f43238a94b5c348456de Mon Sep 17 00:00:00 2001 From: radsammyt Date: Mon, 1 Dec 2025 20:07:59 +0100 Subject: [PATCH] Refactor active_input field-jumping logic (#873) Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/873 Reviewed-by: AnErrupTion Co-authored-by: radsammyt Co-committed-by: radsammyt --- src/enums.zig | 21 +++++++++++++++++++++ src/main.zig | 38 ++++++-------------------------------- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/src/enums.zig b/src/enums.zig index 82c478d..07dc3eb 100644 --- a/src/enums.zig +++ b/src/enums.zig @@ -1,3 +1,4 @@ +const std = @import("std"); pub const Animation = enum { none, doom, @@ -19,6 +20,26 @@ pub const Input = enum { session, login, password, + + /// Moves the current Input forwards by one entry. If `reverse`, then the Input + /// moves backwards. If `wrap` is true, then the entry will wrap back around + pub fn move(self: *Input, reverse: bool, wrap: bool) void { + const maxNum = @typeInfo(Input).@"enum".fields.len - 1; + const selfNum = @intFromEnum(self.*); + if (reverse) { + if (wrap) { + self.* = @enumFromInt(selfNum -% 1); + } else if (selfNum != 0) { + self.* = @enumFromInt(selfNum - 1); + } + } else { + if (wrap) { + self.* = @enumFromInt(selfNum +% 1); + } else if (selfNum != maxNum) { + self.* = @enumFromInt(selfNum + 1); + } + } + } }; pub const ViMode = enum { diff --git a/src/main.zig b/src/main.zig index 276cb0b..935cf1d 100644 --- a/src/main.zig +++ b/src/main.zig @@ -938,37 +938,19 @@ pub fn main() !void { update = true; }, termbox.TB_KEY_CTRL_K, termbox.TB_KEY_ARROW_UP => { - active_input = switch (active_input) { - .session, .info_line => .info_line, - .login => .session, - .password => .login, - }; + active_input.move(true, false); update = true; }, termbox.TB_KEY_CTRL_J, termbox.TB_KEY_ARROW_DOWN => { - active_input = switch (active_input) { - .info_line => .session, - .session => .login, - .login, .password => .password, - }; + active_input.move(false, false); update = true; }, termbox.TB_KEY_TAB => { - active_input = switch (active_input) { - .info_line => .session, - .session => .login, - .login => .password, - .password => .info_line, - }; + active_input.move(false, true); update = true; }, termbox.TB_KEY_BACK_TAB => { - active_input = switch (active_input) { - .info_line => .password, - .session => .info_line, - .login => .session, - .password => .login, - }; + active_input.move(true, true); update = true; }, termbox.TB_KEY_ENTER => authenticate: { @@ -1125,20 +1107,12 @@ pub fn main() !void { if (!insert_mode) { switch (event.ch) { 'k' => { - active_input = switch (active_input) { - .session, .info_line => .info_line, - .login => .session, - .password => .login, - }; + active_input.move(true, false); update = true; continue; }, 'j' => { - active_input = switch (active_input) { - .info_line => .session, - .session => .login, - .login, .password => .password, - }; + active_input.move(false, false); update = true; continue; },