From f988f0294a5f4b157d2145c59a294b094696d9fe Mon Sep 17 00:00:00 2001 From: RadsammyT Date: Wed, 18 Mar 2026 14:33:29 -0400 Subject: [PATCH] Review part 3 --- res/lang/ar.ini | 3 +++ res/lang/bg.ini | 3 +++ res/lang/cat.ini | 3 +++ res/lang/cs.ini | 3 +++ res/lang/de.ini | 3 +++ res/lang/en.ini | 3 +++ res/lang/eo.ini | 4 ++++ res/lang/es.ini | 3 +++ res/lang/fr.ini | 3 +++ res/lang/it.ini | 3 +++ res/lang/ja_JP.ini | 3 +++ res/lang/ku.ini | 3 +++ res/lang/lv.ini | 3 +++ res/lang/pl.ini | 3 +++ res/lang/pt.ini | 3 +++ res/lang/pt_BR.ini | 3 +++ res/lang/ro.ini | 3 +++ res/lang/ru.ini | 3 +++ res/lang/sr.ini | 3 +++ res/lang/sv.ini | 3 +++ res/lang/tr.ini | 3 +++ res/lang/uk.ini | 3 +++ res/lang/zh_CN.ini | 3 +++ src/config/Lang.zig | 3 +++ src/config/custom.zig | 8 +------- src/config/migrator.zig | 18 ----------------- src/main.zig | 44 +++++++++++++++++++++++------------------ 27 files changed, 99 insertions(+), 44 deletions(-) diff --git a/res/lang/ar.ini b/res/lang/ar.ini index 14aaee6..d8cbecf 100644 --- a/res/lang/ar.ini +++ b/res/lang/ar.ini @@ -3,6 +3,9 @@ brightness_down = خفض السطوع brightness_up = رفع السطوع capslock = capslock + + + err_alloc = فشل في تخصيص الذاكرة diff --git a/res/lang/bg.ini b/res/lang/bg.ini index ee38f60..6795a4d 100644 --- a/res/lang/bg.ini +++ b/res/lang/bg.ini @@ -3,6 +3,9 @@ brightness_down = намаляване на яркостта brightness_up = увеличаване на яркостта capslock = caps lock custom = персонализирано + + + err_alloc = неуспешно заделяне на памет err_args = неуспешен анализ на аргументите от командния ред err_autologin_session = сесията за автоматично влизане не е намерена diff --git a/res/lang/cat.ini b/res/lang/cat.ini index 967c728..152cb96 100644 --- a/res/lang/cat.ini +++ b/res/lang/cat.ini @@ -3,6 +3,9 @@ brightness_down = abaixar brillantor brightness_up = apujar brillantor capslock = Bloq Majús + + + err_alloc = assignació de memòria fallida diff --git a/res/lang/cs.ini b/res/lang/cs.ini index 9e879e1..da0bce2 100644 --- a/res/lang/cs.ini +++ b/res/lang/cs.ini @@ -3,6 +3,9 @@ capslock = capslock + + + err_alloc = alokace paměti selhala diff --git a/res/lang/de.ini b/res/lang/de.ini index d4a5f30..f869dcb 100644 --- a/res/lang/de.ini +++ b/res/lang/de.ini @@ -3,6 +3,9 @@ brightness_down = Helligkeit- brightness_up = Helligkeit+ capslock = Feststelltaste + + + err_alloc = Speicherzuweisung fehlgeschlagen diff --git a/res/lang/en.ini b/res/lang/en.ini index 082b02f..3442c38 100644 --- a/res/lang/en.ini +++ b/res/lang/en.ini @@ -3,6 +3,9 @@ brightness_down = decrease brightness brightness_up = increase brightness capslock = capslock custom = custom + + + err_alloc = failed memory allocation err_args = unable to parse command line arguments err_autologin_session = autologin session not found diff --git a/res/lang/eo.ini b/res/lang/eo.ini index 9c75dc3..8463432 100644 --- a/res/lang/eo.ini +++ b/res/lang/eo.ini @@ -3,6 +3,9 @@ brightness_down = malpliigi helecon brightness_up = pliigi helecon capslock = majuskla baskulo custom = propra + + + err_alloc = malsukcesis memorasignon err_args = ne povas analizi argumentojn de komanda linio err_autologin_session = aŭtomatan ensalutan seancon ne trovis @@ -73,6 +76,7 @@ restart = restartigi shell = ŝelo shutdown = malŝalti sleep = memordormi + wayland = wayland x11 = x11 xinitrc = xinitrc diff --git a/res/lang/es.ini b/res/lang/es.ini index 9f04ecb..38c2b9d 100644 --- a/res/lang/es.ini +++ b/res/lang/es.ini @@ -3,6 +3,9 @@ brightness_down = bajar brillo brightness_up = subir brillo capslock = Bloq Mayús + + + err_alloc = asignación de memoria fallida diff --git a/res/lang/fr.ini b/res/lang/fr.ini index 886149b..df619d2 100644 --- a/res/lang/fr.ini +++ b/res/lang/fr.ini @@ -3,6 +3,9 @@ brightness_down = diminuer la luminosité brightness_up = augmenter la luminosité capslock = verr.maj custom = customisé + + + err_alloc = échec d'allocation mémoire err_args = échec de l'analyse des arguments en lignes de commande err_autologin_session = session de connexion automatique introuvable diff --git a/res/lang/it.ini b/res/lang/it.ini index 245c84e..e8af2a6 100644 --- a/res/lang/it.ini +++ b/res/lang/it.ini @@ -3,6 +3,9 @@ capslock = capslock + + + err_alloc = impossibile allocare memoria diff --git a/res/lang/ja_JP.ini b/res/lang/ja_JP.ini index 9c98b93..309ff39 100644 --- a/res/lang/ja_JP.ini +++ b/res/lang/ja_JP.ini @@ -3,6 +3,9 @@ brightness_down = 明るさを下げる brightness_up = 明るさを上げる capslock = CapsLock + + + err_alloc = メモリ割り当て失敗 diff --git a/res/lang/ku.ini b/res/lang/ku.ini index a47ef65..5775274 100644 --- a/res/lang/ku.ini +++ b/res/lang/ku.ini @@ -3,6 +3,9 @@ brightness_down = ronahiyê kêm bike brightness_up = ronahiyê bilind bike capslock = tîpên girdek (capslock) custom = kesane + + + err_alloc = veqetandina bîrê têk çû err_args = argumanên rêzika fermanê nehatin analîzkirin err_autologin_session = danişîna têketina xweber nehate dîtin diff --git a/res/lang/lv.ini b/res/lang/lv.ini index 6def7f8..a1a3fa9 100644 --- a/res/lang/lv.ini +++ b/res/lang/lv.ini @@ -3,6 +3,9 @@ brightness_down = samazināt spilgtumu brightness_up = palielināt spilgtumu capslock = caps lock custom = pielāgots + + + err_alloc = neizdevās atmiņas piešķiršana diff --git a/res/lang/pl.ini b/res/lang/pl.ini index 3adef78..4c521e4 100644 --- a/res/lang/pl.ini +++ b/res/lang/pl.ini @@ -3,6 +3,9 @@ brightness_down = zmniejsz jasność brightness_up = zwiększ jasność capslock = capslock custom = własny + + + err_alloc = nieudana alokacja pamięci err_autologin_session = nie znaleziono sesji autologowania diff --git a/res/lang/pt.ini b/res/lang/pt.ini index 608a122..0b13276 100644 --- a/res/lang/pt.ini +++ b/res/lang/pt.ini @@ -3,6 +3,9 @@ capslock = capslock + + + err_alloc = erro na atribuição de memória diff --git a/res/lang/pt_BR.ini b/res/lang/pt_BR.ini index fb5d58e..ca96a3e 100644 --- a/res/lang/pt_BR.ini +++ b/res/lang/pt_BR.ini @@ -3,6 +3,9 @@ capslock = caixa alta + + + err_alloc = alocação de memória malsucedida diff --git a/res/lang/ro.ini b/res/lang/ro.ini index 33c6e5d..0bf92f2 100644 --- a/res/lang/ro.ini +++ b/res/lang/ro.ini @@ -22,6 +22,9 @@ capslock = capslock + + + diff --git a/res/lang/ru.ini b/res/lang/ru.ini index baad2f2..23cec27 100644 --- a/res/lang/ru.ini +++ b/res/lang/ru.ini @@ -3,6 +3,9 @@ brightness_down = уменьшить яркость brightness_up = увеличить яркость capslock = capslock custom = пользовательский + + + err_alloc = не удалось выделить память err_autologin_session = не найдена сессия с автологином diff --git a/res/lang/sr.ini b/res/lang/sr.ini index e5dcd4b..d0ad85a 100644 --- a/res/lang/sr.ini +++ b/res/lang/sr.ini @@ -3,6 +3,9 @@ capslock = capslock + + + err_alloc = neuspijesna alokacija memorije diff --git a/res/lang/sv.ini b/res/lang/sv.ini index 2cb113c..adec801 100644 --- a/res/lang/sv.ini +++ b/res/lang/sv.ini @@ -3,6 +3,9 @@ brightness_down = minska ljusstyrka brightness_up = öka ljusstyrka capslock = capslock custom = anpassad + + + err_alloc = minnesallokering misslyckades err_args = tolkning av kommandoargument misslyckades err_autologin_session = autologin-session hittades inte diff --git a/res/lang/tr.ini b/res/lang/tr.ini index 807cf30..4ee5960 100644 --- a/res/lang/tr.ini +++ b/res/lang/tr.ini @@ -3,6 +3,9 @@ brightness_down = parlakligi azalt brightness_up = parlakligi arttir capslock = capslock + + + err_alloc = basarisiz bellek ayirma diff --git a/res/lang/uk.ini b/res/lang/uk.ini index fe37435..7b47f8a 100644 --- a/res/lang/uk.ini +++ b/res/lang/uk.ini @@ -3,6 +3,9 @@ capslock = capslock + + + err_alloc = невдале виділення пам'яті diff --git a/res/lang/zh_CN.ini b/res/lang/zh_CN.ini index ce1b23c..d2af6c3 100644 --- a/res/lang/zh_CN.ini +++ b/res/lang/zh_CN.ini @@ -3,6 +3,9 @@ capslock = 大写锁定 + + + err_alloc = 内存分配失败 diff --git a/src/config/Lang.zig b/src/config/Lang.zig index e21700a..c01cff0 100644 --- a/src/config/Lang.zig +++ b/src/config/Lang.zig @@ -8,6 +8,9 @@ brightness_down: []const u8 = "decrease brightness", brightness_up: []const u8 = "increase brightness", capslock: []const u8 = "capslock", custom: []const u8 = "custom", +custom_info_err_output_long: []const u8 = "output too long", +custom_info_err_no_output: []const u8 = "no output", +custom_info_err_no_output_error: []const u8 = ", possible error", err_alloc: []const u8 = "failed memory allocation", err_args: []const u8 = "unable to parse command line arguments", err_autologin_session: []const u8 = "autologin session not found", diff --git a/src/config/custom.zig b/src/config/custom.zig index 3b430bc..980b4fc 100644 --- a/src/config/custom.zig +++ b/src/config/custom.zig @@ -5,15 +5,13 @@ const custom = @This(); pub const CustomCommandBind = struct { name: []const u8 = "", cmd: []const u8 = "", - posX: u32 = 0, - posY: u32 = 0, }; pub const UNDEFINED_CMD: []const u8 = "echo \"You forgot to define 'cmd'!\""; pub const CustomCommandInfo = struct { name: []const u8 = "", - cmd: []const u8 = UNDEFINED_CMD, + cmd: ?[]const u8 = null, /// To be set to the label widget's `lid` id: u64 = 0, @@ -21,10 +19,6 @@ pub const CustomCommandInfo = struct { /// If 0, only run once. refresh: u32 = 0, counter: u32 = 0, - posX: u32 = 0, - posY: u32 = 0, - invertY: bool = false, - invertX: bool = false, }; pub var binds: std.StringHashMap(CustomCommandBind) = undefined; diff --git a/src/config/migrator.zig b/src/config/migrator.zig index acbfa58..eb0ac94 100644 --- a/src/config/migrator.zig +++ b/src/config/migrator.zig @@ -176,12 +176,6 @@ pub fn configFieldHandler(_: std.mem.Allocator, field: ini.IniField) ?ini.IniFie if (std.mem.eql(u8, field.key, "cmd")) { command.cmd = temporary_allocator.dupe(u8, field.value) catch ""; } - if (std.mem.eql(u8, field.key, "posX")) { - command.posX = std.fmt.parseInt(u32, field.value, 10) catch 0; - } - if (std.mem.eql(u8, field.key, "posY")) { - command.posY = std.fmt.parseInt(u32, field.value, 10) catch 0; - } } } @@ -197,22 +191,10 @@ pub fn configFieldHandler(_: std.mem.Allocator, field: ini.IniField) ?ini.IniFie if (std.mem.eql(u8, field.key, "cmd")) { label.cmd = temporary_allocator.dupe(u8, field.value) catch ""; } - if (std.mem.eql(u8, field.key, "posX")) { - label.posX = std.fmt.parseInt(u32, field.value, 10) catch 0; - } - if (std.mem.eql(u8, field.key, "posY")) { - label.posY = std.fmt.parseInt(u32, field.value, 10) catch 0; - } if (std.mem.eql(u8, field.key, "refresh")) { label.refresh = std.fmt.parseInt(u32, field.value, 10) catch 0; label.refresh += 1; } - if (std.mem.eql(u8, field.key, "invertX")) { - label.invertX = if (std.mem.eql(u8, field.value, "true")) true else false; - } - if (std.mem.eql(u8, field.key, "invertY")) { - label.invertY = if (std.mem.eql(u8, field.value, "true")) true else false; - } } } diff --git a/src/main.zig b/src/main.zig index 8208668..20872a3 100644 --- a/src/main.zig +++ b/src/main.zig @@ -237,8 +237,8 @@ pub fn main() !void { var labelIter = custom.labels.iterator(); while (labelIter.next()) |i| { temporary_allocator.free(i.key_ptr.*); - if (i.value_ptr.cmd.ptr != custom.UNDEFINED_CMD.ptr) - temporary_allocator.free(i.value_ptr.*.cmd); + if (i.value_ptr.cmd) |cmd| + temporary_allocator.free(cmd); } custom.labels.deinit(); } @@ -1769,11 +1769,15 @@ fn updateCustomInfo(lbl: *Label, ptr: *anyopaque) !void { defer stderr.deinit(state.allocator); for (state.custom_info.items) |*i| { if (i.info.id != wid) continue; + // Here, a counter ticks down every time `updateCustomInfo` runs on that + // particular label. It will only run the command and update the label + // once it reaches to 1. If a refresh value is defined it's then reset to + // that refresh value. if (i.info.counter == 1) { var c = std.process.Child.init(&[_][]const u8 { "/bin/sh", "-c", - i.info.cmd + i.info.cmd orelse custom.UNDEFINED_CMD }, state.allocator); c.stderr_behavior = .Pipe; c.stdout_behavior = .Pipe; @@ -1781,7 +1785,7 @@ fn updateCustomInfo(lbl: *Label, ptr: *anyopaque) !void { c.collectOutput(state.allocator, &stdout, &stderr, state.buffer.width) catch { - try stdout.print(state.allocator, "{s}: [Output too long]", .{i.info.name}); + try stdout.print(state.allocator, "{s}: [{s}]", .{i.info.name, state.lang.custom_info_err_output_long}); }; const newlineIdx = std.mem.indexOfAny(u8, stdout.items, "\n"); @@ -1791,23 +1795,27 @@ fn updateCustomInfo(lbl: *Label, ptr: *anyopaque) !void { if (stdout.items.len > state.buffer.width) { stdout.clearRetainingCapacity(); - try stdout.print(state.allocator, "{s}: [Output too long]", .{i.info.name}); + try stdout.print(state.allocator, "{s}: [{s}]", .{i.info.name, state.lang.custom_info_err_output_long}); } _ = try c.wait(); + + // Sometimes, the output of a command would have an unprintable character at + // the end of its output, causing '�' to appear in its place. Here, we check + // if this is the case and remove it. if (stdout.items.len != 0 and !std.ascii.isPrint(stdout.items[stdout.items.len-1])) { _ = stdout.pop(); } else if (stdout.items.len == 0) { - try stdout.print(state.allocator, "{s}: [No output{s}]", .{ + try stdout.print(state.allocator, "{s}: [{s}{s}]", .{ i.info.name, - if (stderr.items.len > 0) ": Possible Error" else "" + state.lang.custom_info_err_no_output, + if (stderr.items.len > 0) state.lang.custom_info_err_no_output_error else "" }); } state.allocator.free(lbl.text); lbl.text = try state.allocator.dupe(u8, stdout.items); - // we reposition the widgets in the event of a inverted label. - // not doing so causes the inverted label to not be positioned correctly + // Called to re-position the widgets after they receive their output. try positionWidgets(state); if (i.info.refresh != 0) i.info.counter = i.info.refresh; @@ -1911,19 +1919,17 @@ fn positionWidgets(ptr: *anyopaque) !void { state.brightness_up_label.positionXY(last_label .childrenPosition() .addX(1)); - for (state.custom_binds.items) |*item| { + for (state.custom_binds.items, 1..) |*item, i| { item.lbl.positionXY(state.edge_margin - .addX(@intCast(item.cmd.posX)) - .addY(@intCast(item.cmd.posY))); + .addY(@intCast(i))); } - for (state.custom_info.items) |*item| { + for (state.custom_info.items, 0..) |*item, i| { item.lbl.positionXY(state.edge_margin - .addX(@intCast(item.info.posX)) - .addY(@intCast(item.info.posY)) - .invertXIf(state.buffer.width, item.info.invertX) - .removeXIf(item.lbl.text.len, item.info.invertX) - .invertYIf(state.buffer.height, item.info.invertY) - .removeYIf(1, item.info.invertY)); + .addY(@intCast(i)) + .invertX(state.buffer.width) + .removeX(item.lbl.text.len) + .invertY(state.buffer.height) + .removeY(1)); } }