Fix clock string length issues (fixes #716)

Co-authored-by: Plash <plash@noreply.codeberg.org>
Signed-off-by: AnErrupTion <anerruption@disroot.org>
This commit is contained in:
AnErrupTion 2025-08-02 13:08:07 +02:00
parent c05c32c5be
commit b35c055e7b
No known key found for this signature in database
22 changed files with 99 additions and 138 deletions

View File

@ -7,6 +7,7 @@ err_alloc = فشل في تخصيص الذاكرة
err_bounds = out-of-bounds index
err_brightness_change = فشل في تغيير سطوع الشاشة
err_chdir = فشل في فتح مجلد المنزل
err_config = فشل في تفسير ملف الإعدادات
err_dgn_oob = رسالة سجل (Log)
err_domain = اسم نطاق غير صالح

View File

@ -8,6 +8,7 @@ err_bounds = índex fora de límits
err_brightness_change = error en canviar la brillantor
err_chdir = error en obrir la carpeta home
err_dgn_oob = missatge de registre
err_domain = domini invàlid

View File

@ -8,6 +8,7 @@ err_bounds = index je mimo hranice pole
err_chdir = nelze otevřít domovský adresář
err_dgn_oob = zpráva protokolu
err_domain = neplatná doména

View File

@ -7,6 +7,7 @@ err_alloc = Speicherzuweisung fehlgeschlagen
err_bounds = Index ausserhalb des Bereichs
err_brightness_change = Helligkeitsänderung fehlgeschlagen
err_chdir = Fehler beim Oeffnen des Home-Ordners
err_config = Fehler beim Verarbeiten der Konfigurationsdatei
err_dgn_oob = Diagnose-Nachricht
err_domain = Ungueltige Domain

View File

@ -7,6 +7,7 @@ err_alloc = failed memory allocation
err_bounds = out-of-bounds index
err_brightness_change = failed to change brightness
err_chdir = failed to open home folder
err_clock_too_long = clock string too long
err_config = unable to parse config file
err_dgn_oob = log message
err_domain = invalid domain

View File

@ -8,6 +8,7 @@ err_bounds = índice fuera de límites
err_chdir = error al abrir la carpeta home
err_dgn_oob = mensaje de registro
err_domain = dominio inválido

View File

@ -7,6 +7,7 @@ err_alloc = échec d'allocation mémoire
err_bounds = indice hors-limite
err_brightness_change = échec du changement de luminosité
err_chdir = échec de l'ouverture du répertoire home
err_clock_too_long = chaîne de formattage de l'horloge trop longue
err_config = échec de lecture du fichier de configuration
err_dgn_oob = message
err_domain = domaine invalide

View File

@ -8,6 +8,7 @@ err_bounds = indice fuori limite
err_chdir = impossibile aprire home directory
err_dgn_oob = messaggio log
err_domain = dominio non valido

View File

@ -1,126 +1,67 @@
authenticating=認証中...
brightness_down=明るさを下げる
brightness_up=明るさを上げる
capslock=CapsLock
err_alloc=メモリ割り当て失敗
err_bounds=境界外インデックス
err_brightness_change=明るさの変更に失敗しました
err_chdir=ホームフォルダを開けませんでした
err_config=設定ファイルを解析できません
err_console_dev=コンソールへのアクセスに失敗しました
err_dgn_oob=ログメッセージ
err_domain=無効なドメイン
err_empty_password=空のパスワードは許可されていません
err_envlist=環境変数リストの取得に失敗しました
err_hostname=ホスト名の取得に失敗しました
err_mlock=パスワードメモリのロックに失敗しました
err_null=ヌルポインタ
err_numlock=NumLockの設定に失敗しました
err_pam=PAMトランザクション失敗
err_pam_abort=PAMトランザクションが中断されました
err_pam_acct_expired=アカウントの有効期限が切れています
err_pam_auth=認証エラー
err_pam_authinfo_unavail=ユーザー情報の取得に失敗しました
err_pam_authok_reqd=トークンの有効期限が切れています
err_pam_buf=メモリバッファエラー
err_pam_cred_err=認証情報の設定に失敗しました
err_pam_cred_expired=認証情報の有効期限が切れています
err_pam_cred_insufficient=認証情報が不十分です
err_pam_cred_unavail=認証情報の取得に失敗しました
err_pam_maxtries=最大試行回数に到達しました
err_pam_perm_denied=アクセスが拒否されました
err_pam_session=セッションエラー
err_pam_sys=システムエラー
err_pam_user_unknown=不明なユーザー
err_path=パスの設定に失敗しました
err_perm_dir=カレントディレクトリの変更に失敗しました
err_perm_group=グループ権限のダウングレードに失敗しました
err_perm_user=ユーザー権限のダウングレードに失敗しました
err_pwnam=ユーザー情報の取得に失敗しました
err_sleep=スリープコマンドの実行に失敗しました
err_tty_ctrl=TTY制御の転送に失敗しました
err_user_gid=ユーザーGIDの設定に失敗しました
err_user_init=ユーザーの初期化に失敗しました
err_user_uid=ユーザーUIDの設定に失敗しました
err_xauth=xauthコマンドの実行に失敗しました
err_xcb_conn=XCB接続に失敗しました
err_xsessions_dir=セッションフォルダが見つかりませんでした
err_xsessions_open=セッションフォルダを開けませんでした
insert=挿入
login=ログイン
logout=ログアウト済み
no_x11_support=X11サポートはコンパイル時に無効化されています
normal=通常
numlock=NumLock
other=その他
password=パスワード
restart=再起動
shell=シェル
shutdown=シャットダウン
sleep=スリープ
wayland=Wayland
x11=X11
xinitrc=xinitrc
authenticating=認証中...
brightness_down=明るさを下げる
brightness_up=明るさを上げる
capslock=CapsLock
err_alloc=メモリ割り当て失敗
err_bounds=境界外インデックス
err_brightness_change=明るさの変更に失敗しました
err_chdir=ホームフォルダを開けませんでした
err_config=設定ファイルを解析できません
err_console_dev=コンソールへのアクセスに失敗しました
err_dgn_oob=ログメッセージ
err_domain=無効なドメイン
err_empty_password=空のパスワードは許可されていません
err_envlist=環境変数リストの取得に失敗しました
err_hostname=ホスト名の取得に失敗しました
err_mlock=パスワードメモリのロックに失敗しました
err_null=ヌルポインタ
err_numlock=NumLockの設定に失敗しました
err_pam=PAMトランザクション失敗
err_pam_abort=PAMトランザクションが中断されました
err_pam_acct_expired=アカウントの有効期限が切れています
err_pam_auth=認証エラー
err_pam_authinfo_unavail=ユーザー情報の取得に失敗しました
err_pam_authok_reqd=トークンの有効期限が切れています
err_pam_buf=メモリバッファエラー
err_pam_cred_err=認証情報の設定に失敗しました
err_pam_cred_expired=認証情報の有効期限が切れています
err_pam_cred_insufficient=認証情報が不十分です
err_pam_cred_unavail=認証情報の取得に失敗しました
err_pam_maxtries=最大試行回数に到達しました
err_pam_perm_denied=アクセスが拒否されました
err_pam_session=セッションエラー
err_pam_sys=システムエラー
err_pam_user_unknown=不明なユーザー
err_path=パスの設定に失敗しました
err_perm_dir=カレントディレクトリの変更に失敗しました
err_perm_group=グループ権限のダウングレードに失敗しました
err_perm_user=ユーザー権限のダウングレードに失敗しました
err_pwnam=ユーザー情報の取得に失敗しました
err_sleep=スリープコマンドの実行に失敗しました
err_tty_ctrl=TTY制御の転送に失敗しました
err_user_gid=ユーザーGIDの設定に失敗しました
err_user_init=ユーザーの初期化に失敗しました
err_user_uid=ユーザーUIDの設定に失敗しました
err_xauth=xauthコマンドの実行に失敗しました
err_xcb_conn=XCB接続に失敗しました
err_xsessions_dir=セッションフォルダが見つかりませんでした
err_xsessions_open=セッションフォルダを開けませんでした
insert=挿入
login=ログイン
logout=ログアウト済み
no_x11_support=X11サポートはコンパイル時に無効化されています
normal=通常
numlock=NumLock
other=その他
password=パスワード
restart=再起動
shell=シェル
shutdown=シャットダウン
sleep=スリープ
wayland=Wayland
x11=X11
xinitrc=xinitrc
authenticating = 認証中...
brightness_down = 明るさを下げる
brightness_up = 明るさを上げる
capslock = CapsLock
err_alloc = メモリ割り当て失敗
err_bounds = 境界外インデックス
err_brightness_change = 明るさの変更に失敗しました
err_chdir = ホームフォルダを開けませんでした
err_config = 設定ファイルを解析できません
err_dgn_oob = ログメッセージ
err_domain = 無効なドメイン
err_empty_password = 空のパスワードは許可されていません
err_envlist = 環境変数リストの取得に失敗しました
err_hostname = ホスト名の取得に失敗しました
err_mlock = パスワードメモリのロックに失敗しました
err_null = ヌルポインタ
err_numlock = NumLockの設定に失敗しました
err_pam = PAMトランザクション失敗
err_pam_abort = PAMトランザクションが中断されました
err_pam_acct_expired = アカウントの有効期限が切れています
err_pam_auth = 認証エラー
err_pam_authinfo_unavail = ユーザー情報の取得に失敗しました
err_pam_authok_reqd = トークンの有効期限が切れています
err_pam_buf = メモリバッファエラー
err_pam_cred_err = 認証情報の設定に失敗しました
err_pam_cred_expired = 認証情報の有効期限が切れています
err_pam_cred_insufficient = 認証情報が不十分です
err_pam_cred_unavail = 認証情報の取得に失敗しました
err_pam_maxtries = 最大試行回数に到達しました
err_pam_perm_denied = アクセスが拒否されました
err_pam_session = セッションエラー
err_pam_sys = システムエラー
err_pam_user_unknown = 不明なユーザー
err_path = パスの設定に失敗しました
err_perm_dir = カレントディレクトリの変更に失敗しました
err_perm_group = グループ権限のダウングレードに失敗しました
err_perm_user = ユーザー権限のダウングレードに失敗しました
err_pwnam = ユーザー情報の取得に失敗しました
err_sleep = スリープコマンドの実行に失敗しました
err_tty_ctrl = TTY制御の転送に失敗しました
err_user_gid = ユーザーGIDの設定に失敗しました
err_user_init = ユーザーの初期化に失敗しました
err_user_uid = ユーザーUIDの設定に失敗しました
err_xauth = xauthコマンドの実行に失敗しました
err_xcb_conn = XCB接続に失敗しました
err_xsessions_dir = セッションフォルダが見つかりませんでした
err_xsessions_open = セッションフォルダを開けませんでした
insert = 挿入
login = ログイン
logout = ログアウト済み
no_x11_support = X11サポートはコンパイル時に無効化されています
normal = 通常
numlock = NumLock
other = その他
password = パスワード
restart = 再起動
shell = シェル
shutdown = シャットダウン
sleep = スリープ
wayland = Wayland
x11 = X11
xinitrc = xinitrc

View File

@ -7,6 +7,7 @@ err_alloc = nieudana alokacja pamięci
err_bounds = indeks poza zakresem
err_brightness_change = nie udało się zmienić jasności
err_chdir = nie udało się otworzyć folderu domowego
err_config = nie można przetworzyć pliku konfiguracyjnego
err_dgn_oob = wiadomość loga
err_domain = niepoprawna domena

View File

@ -8,6 +8,7 @@ err_bounds = índice fora de limites
err_chdir = erro ao abrir a pasta home
err_dgn_oob = mensagem de registo
err_domain = domínio inválido

View File

@ -8,6 +8,7 @@ err_bounds = índice fora de limites
err_chdir = não foi possível abrir o diretório home
err_dgn_oob = mensagem de log
err_domain = domínio inválido

View File

@ -18,6 +18,7 @@ capslock = capslock
err_pam_abort = tranzacţie pam anulată
err_pam_acct_expired = cont expirat
err_pam_auth = eroare de autentificare

View File

@ -7,6 +7,7 @@ err_alloc = не удалось выделить память
err_bounds = за пределами индекса
err_brightness_change = не удалось изменить яркость
err_chdir = не удалось открыть домашнюю папку
err_config = не удалось разобрать файл конфигурации
err_dgn_oob = отладочное сообщение (log)
err_domain = неверный домен

View File

@ -8,6 +8,7 @@ err_bounds = izvan granica indeksa
err_chdir = neuspijesno otvaranje home foldera
err_dgn_oob = log poruka
err_domain = nevazeci domen

View File

@ -8,6 +8,7 @@ err_bounds = utanför banan index
err_chdir = misslyckades att öppna hemkatalog
err_dgn_oob = loggmeddelande
err_domain = okänd domän

View File

@ -8,6 +8,7 @@ err_bounds = sinirlarin disinda dizin
err_chdir = ev klasoru acilamadi
err_dgn_oob = log mesaji
err_domain = gecersiz etki alani

View File

@ -8,6 +8,7 @@ err_bounds = поза межами індексу
err_chdir = не вдалося відкрити домашній каталог
err_dgn_oob = повідомлення журналу (log)
err_domain = недійсний домен

View File

@ -8,6 +8,7 @@ err_bounds = 索引越界
err_chdir = 无法打开home文件夹
err_dgn_oob = 日志消息
err_domain = 无效的域

View File

@ -12,6 +12,7 @@ err_alloc: []const u8 = "failed memory allocation",
err_bounds: []const u8 = "out-of-bounds index",
err_brightness_change: []const u8 = "failed to change brightness",
err_chdir: []const u8 = "failed to open home folder",
err_clock_too_long: []const u8 = "clock string too long",
err_config: []const u8 = "unable to parse config file",
err_dgn_oob: []const u8 = "log message",
err_domain: []const u8 = "invalid domain",

View File

@ -65,12 +65,10 @@ const set_led_state = if (builtin.os.tag.isBSD()) kbio.KDSETLED else kd.KDSKBLED
const numlock_led = if (builtin.os.tag.isBSD()) kbio.LED_NUM else kd.K_NUMLOCK;
const capslock_led = if (builtin.os.tag.isBSD()) kbio.LED_CAP else kd.K_CAPSLOCK;
pub fn timeAsString(buf: [:0]u8, format: [:0]const u8) ![]u8 {
pub fn timeAsString(buf: [:0]u8, format: [:0]const u8) []u8 {
const timer = std.time.timestamp();
const tm_info = time.localtime(&timer);
const len = time.strftime(buf, buf.len, format, tm_info);
if (len < 0) return error.CannotGetFormattedTime;
return buf[0..len];
}

View File

@ -106,6 +106,7 @@ pub fn main() !void {
var save: Save = undefined;
var config_load_failed = false;
var can_get_lock_state = true;
var can_draw_clock = true;
if (res.args.help != 0) {
try clap.help(stderr, clap.Help, &params, .{});
@ -465,15 +466,13 @@ pub fn main() !void {
length += ly_top_str.len + 1;
}
if (config.bigclock != .none and buffer.box_height + (bigclock.HEIGHT + 2) * 2 < buffer.height) draw_big_clock: {
if (config.bigclock != .none and buffer.box_height + (bigclock.HEIGHT + 2) * 2 < buffer.height) {
const format = "%H:%M";
const xo = buffer.width / 2 - @min(buffer.width, (format.len * (bigclock.WIDTH + 1))) / 2;
const yo = (buffer.height - buffer.box_height) / 2 - bigclock.HEIGHT - 2;
var clock_buf: [format.len + 1:0]u8 = undefined;
const clock_str = interop.timeAsString(&clock_buf, format) catch {
break :draw_big_clock;
};
const clock_str = interop.timeAsString(&clock_buf, format);
for (clock_str, 0..) |c, i| {
const clock_cell = bigclock.clockCell(animate, c, buffer.fg, buffer.bg, config.bigclock);
@ -503,12 +502,16 @@ pub fn main() !void {
}
if (config.clock) |clock| draw_clock: {
var clock_buf: [32:0]u8 = undefined;
const clock_str = interop.timeAsString(&clock_buf, clock) catch {
break :draw_clock;
};
if (!can_draw_clock) break :draw_clock;
if (clock_str.len == 0) return error.FormattedTimeEmpty;
var clock_buf: [64:0]u8 = undefined;
const clock_str = interop.timeAsString(&clock_buf, clock);
if (clock_str.len == 0) {
try info_line.addMessage(lang.err_clock_too_long, config.error_bg, config.error_fg);
can_draw_clock = false;
break :draw_clock;
}
buffer.drawLabel(clock_str, buffer.width - @min(buffer.width, clock_str.len), 0);
}