From c2080ab40fc12a090052e63b4b1d798711676157 Mon Sep 17 00:00:00 2001 From: Yves Biener Date: Mon, 17 Feb 2025 23:08:47 +0100 Subject: [PATCH] ref(ctlseqs): use control sequence file; rename key names --- src/app.zig | 10 ++-- src/ctlseqs.zig | 3 ++ src/key.zig | 124 +++++++++++++++++++++++------------------------ src/terminal.zig | 25 +++++++--- 4 files changed, 87 insertions(+), 75 deletions(-) diff --git a/src/app.zig b/src/app.zig index 31bd4d8..9fa9333 100644 --- a/src/app.zig +++ b/src/app.zig @@ -182,7 +182,7 @@ pub fn App(comptime E: type) type { 'B' => .{ .cp = key.Down }, 'C' => .{ .cp = key.Right }, 'D' => .{ .cp = key.Left }, - 'E' => .{ .cp = key.Kp_Begin }, + 'E' => .{ .cp = key.KpBegin }, 'F' => .{ .cp = key.End }, 'H' => .{ .cp = key.Home }, 'P' => .{ .cp = key.F1 }, @@ -216,7 +216,7 @@ pub fn App(comptime E: type) type { 'B' => key.Down, 'C' => key.Right, 'D' => key.Left, - 'E' => key.Kp_Begin, + 'E' => key.KpBegin, 'F' => key.End, 'H' => key.Home, 'P' => key.F1, @@ -241,8 +241,8 @@ pub fn App(comptime E: type) type { .cp = switch (number) { 2 => key.Insert, 3 => key.Delete, - 5 => key.Page_Up, - 6 => key.Page_Down, + 5 => key.PageUp, + 6 => key.PageDown, 7 => key.Home, 8 => key.End, 11 => key.F1, @@ -259,7 +259,7 @@ pub fn App(comptime E: type) type { 24 => key.F12, // 200 => return .{ .event = .paste_start, .n = sequence.len }, // 201 => return .{ .event = .paste_end, .n = sequence.len }, - 57427 => key.Kp_Begin, + 57427 => key.KpBegin, else => unreachable, }, }; diff --git a/src/ctlseqs.zig b/src/ctlseqs.zig index 4e55448..97f5e95 100644 --- a/src/ctlseqs.zig +++ b/src/ctlseqs.zig @@ -58,8 +58,11 @@ pub const cub = "\x1b[{d}D"; // Erase pub const erase_below_cursor = "\x1b[J"; +pub const clear_screen = "\x1b[2J"; // alt screen +pub const save_screen = "\x1b[?47h"; +pub const restore_screen = "\x1b[?47l"; pub const smcup = "\x1b[?1049h"; pub const rmcup = "\x1b[?1049l"; diff --git a/src/key.zig b/src/key.zig index 5e71055..033843d 100644 --- a/src/key.zig +++ b/src/key.zig @@ -48,14 +48,14 @@ pub const Left: u21 = 57350; pub const Right: u21 = 57351; pub const Up: u21 = 57352; pub const Down: u21 = 57353; -pub const Page_Up: u21 = 57354; -pub const Page_Down: u21 = 57355; +pub const PageUp: u21 = 57354; +pub const PageDown: u21 = 57355; pub const Home: u21 = 57356; pub const End: u21 = 57357; -pub const Caps_Lock: u21 = 57358; -pub const Scroll_Lock: u21 = 57359; -pub const Num_Lock: u21 = 57360; -pub const Print_Screen: u21 = 57361; +pub const CapsLock: u21 = 57358; +pub const ScrollLock: u21 = 57359; +pub const NumLock: u21 = 57360; +pub const PrintScreen: u21 = 57361; pub const Pause: u21 = 57362; pub const Menu: u21 = 57363; pub const F1: u21 = 57364; @@ -93,59 +93,59 @@ pub const F32: u21 = 57395; pub const F33: u21 = 57396; pub const F34: u21 = 57397; pub const F35: u21 = 57398; -pub const Kp_0: u21 = 57399; -pub const Kp_1: u21 = 57400; -pub const Kp_2: u21 = 57401; -pub const Kp_3: u21 = 57402; -pub const Kp_4: u21 = 57403; -pub const Kp_5: u21 = 57404; -pub const Kp_6: u21 = 57405; -pub const Kp_7: u21 = 57406; -pub const Kp_8: u21 = 57407; -pub const Kp_9: u21 = 57408; -pub const Kp_Decimal: u21 = 57409; -pub const Kp_Divide: u21 = 57410; -pub const Kp_Multiply: u21 = 57411; -pub const Kp_Subtract: u21 = 57412; -pub const Kp_Add: u21 = 57413; -pub const Kp_Enter: u21 = 57414; -pub const Kp_Equal: u21 = 57415; -pub const Kp_Separator: u21 = 57416; -pub const Kp_Left: u21 = 57417; -pub const Kp_Right: u21 = 57418; -pub const Kp_Up: u21 = 57419; -pub const Kp_Down: u21 = 57420; -pub const Kp_Page_up: u21 = 57421; -pub const Kp_Page_down: u21 = 57422; -pub const Kp_Home: u21 = 57423; -pub const Kp_End: u21 = 57424; -pub const Kp_Insert: u21 = 57425; -pub const Kp_Delete: u21 = 57426; -pub const Kp_Begin: u21 = 57427; -pub const Media_Play: u21 = 57428; -pub const Media_Pause: u21 = 57429; -pub const Media_Play_pause: u21 = 57430; -pub const Media_Reverse: u21 = 57431; -pub const Media_Stop: u21 = 57432; -pub const Media_Fast_forward: u21 = 57433; -pub const Media_Rewind: u21 = 57434; -pub const Media_Track_next: u21 = 57435; -pub const Media_Track_previous: u21 = 57436; -pub const Media_Record: u21 = 57437; -pub const Lower_Volume: u21 = 57438; -pub const Raise_Volume: u21 = 57439; -pub const Mute_Volume: u21 = 57440; -pub const Left_Shift: u21 = 57441; -pub const Left_Control: u21 = 57442; -pub const Left_Alt: u21 = 57443; -pub const Left_Super: u21 = 57444; -pub const Left_Hyper: u21 = 57445; -pub const Left_Meta: u21 = 57446; -pub const Right_shift: u21 = 57447; -pub const Right_control: u21 = 57448; -pub const Right_alt: u21 = 57449; -pub const Right_super: u21 = 57450; -pub const Right_hyper: u21 = 57451; -pub const Right_meta: u21 = 57452; -pub const Iso_Level_3_Shift: u21 = 57453; -pub const Iso_Level_5_Shift: u21 = 57454; +pub const Kp0: u21 = 57399; +pub const Kp1: u21 = 57400; +pub const Kp2: u21 = 57401; +pub const Kp3: u21 = 57402; +pub const Kp4: u21 = 57403; +pub const Kp5: u21 = 57404; +pub const Kp6: u21 = 57405; +pub const Kp7: u21 = 57406; +pub const Kp8: u21 = 57407; +pub const Kp9: u21 = 57408; +pub const KpDecimal: u21 = 57409; +pub const KpDivide: u21 = 57410; +pub const KpMultiply: u21 = 57411; +pub const KpSubtract: u21 = 57412; +pub const KpAdd: u21 = 57413; +pub const KpEnter: u21 = 57414; +pub const KpEqual: u21 = 57415; +pub const KpSeparator: u21 = 57416; +pub const KpLeft: u21 = 57417; +pub const KpRight: u21 = 57418; +pub const KpUp: u21 = 57419; +pub const KpDown: u21 = 57420; +pub const KpPage_up: u21 = 57421; +pub const KpPage_down: u21 = 57422; +pub const KpHome: u21 = 57423; +pub const KpEnd: u21 = 57424; +pub const KpInsert: u21 = 57425; +pub const KpDelete: u21 = 57426; +pub const KpBegin: u21 = 57427; +pub const MediaPlay: u21 = 57428; +pub const MediaPause: u21 = 57429; +pub const MediaPlayPause: u21 = 57430; +pub const MediaReverse: u21 = 57431; +pub const MediaStop: u21 = 57432; +pub const MediaFastForward: u21 = 57433; +pub const MediaRewind: u21 = 57434; +pub const MediaTrackNext: u21 = 57435; +pub const MediaTrackPrevious: u21 = 57436; +pub const MediaRecord: u21 = 57437; +pub const LowerVolume: u21 = 57438; +pub const RaiseVolume: u21 = 57439; +pub const MuteVolume: u21 = 57440; +pub const LeftShift: u21 = 57441; +pub const LeftControl: u21 = 57442; +pub const LeftAlt: u21 = 57443; +pub const LeftSuper: u21 = 57444; +pub const LeftHyper: u21 = 57445; +pub const LeftMeta: u21 = 57446; +pub const RightShift: u21 = 57447; +pub const RightControl: u21 = 57448; +pub const RightAlt: u21 = 57449; +pub const RightSuper: u21 = 57450; +pub const RightHyper: u21 = 57451; +pub const RightMeta: u21 = 57452; +pub const IsoLevel3Shift: u21 = 57453; +pub const IsoLevel5Shift: u21 = 57454; diff --git a/src/terminal.zig b/src/terminal.zig index fdd3f46..76c6ca3 100644 --- a/src/terminal.zig +++ b/src/terminal.zig @@ -1,5 +1,6 @@ const std = @import("std"); pub const code_point = @import("code_point"); +const ctlseqs = @import("ctlseqs.zig"); const Key = @import("key.zig").Key; const Position = @import("size.zig").Position; @@ -25,35 +26,43 @@ pub fn getTerminalSize() Size { } pub fn saveScreen() !void { - _ = try std.posix.write(std.posix.STDIN_FILENO, "\x1b[?47h"); + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.save_screen); } pub fn restoreScreen() !void { - _ = try std.posix.write(std.posix.STDIN_FILENO, "\x1b[?47l"); + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.restore_screen); } pub fn enterAltScreen() !void { - _ = try std.posix.write(std.posix.STDIN_FILENO, "\x1b[?1049h"); + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.smcup); } pub fn exitAltScreen() !void { - _ = try std.posix.write(std.posix.STDIN_FILENO, "\x1b[?1049l"); + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.rmcup); } pub fn clearScreen() !void { - _ = try std.posix.write(std.posix.STDIN_FILENO, "\x1b[2J"); + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.clear_screen); } pub fn hideCursor() !void { - _ = try std.posix.write(std.posix.STDIN_FILENO, "\x1b[?25l"); + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.hide_cursor); } pub fn showCursor() !void { - _ = try std.posix.write(std.posix.STDIN_FILENO, "\x1b[?25h"); + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.show_cursor); } pub fn setCursorPositionHome() !void { - _ = try std.posix.write(std.posix.STDIN_FILENO, "\x1b[H"); + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.home); +} + +pub fn enableMouseSupport() !void { + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.mouse_set); +} + +pub fn disableMouseSupport() !void { + _ = try std.posix.write(std.posix.STDIN_FILENO, ctlseqs.mouse_reset); } pub fn read(buf: []u8) !usize {