diff --git a/res/lang/ar.ini b/res/lang/ar.ini index b06f253..eaa78b3 100644 --- a/res/lang/ar.ini +++ b/res/lang/ar.ini @@ -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 = اسم نطاق غير صالح diff --git a/res/lang/cat.ini b/res/lang/cat.ini index d0ce33e..71eabd6 100644 --- a/res/lang/cat.ini +++ b/res/lang/cat.ini @@ -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 diff --git a/res/lang/cs.ini b/res/lang/cs.ini index 7c87ea6..e91dfbd 100644 --- a/res/lang/cs.ini +++ b/res/lang/cs.ini @@ -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 diff --git a/res/lang/de.ini b/res/lang/de.ini index 44bbc53..34c352e 100644 --- a/res/lang/de.ini +++ b/res/lang/de.ini @@ -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 diff --git a/res/lang/en.ini b/res/lang/en.ini index 9554658..9bcfeb0 100644 --- a/res/lang/en.ini +++ b/res/lang/en.ini @@ -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 diff --git a/res/lang/es.ini b/res/lang/es.ini index 2bd51a7..d4c79d5 100644 --- a/res/lang/es.ini +++ b/res/lang/es.ini @@ -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 diff --git a/res/lang/fr.ini b/res/lang/fr.ini index e024820..9553985 100644 --- a/res/lang/fr.ini +++ b/res/lang/fr.ini @@ -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 diff --git a/res/lang/it.ini b/res/lang/it.ini index 3a7f5a8..27f6e46 100644 --- a/res/lang/it.ini +++ b/res/lang/it.ini @@ -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 diff --git a/res/lang/ja_JP.ini b/res/lang/ja_JP.ini index c5f5596..1bb02fc 100644 --- a/res/lang/ja_JP.ini +++ b/res/lang/ja_JP.ini @@ -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 diff --git a/res/lang/pl.ini b/res/lang/pl.ini index b3eee3d..e94d8c0 100644 --- a/res/lang/pl.ini +++ b/res/lang/pl.ini @@ -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 diff --git a/res/lang/pt.ini b/res/lang/pt.ini index 587d3b4..ef566de 100644 --- a/res/lang/pt.ini +++ b/res/lang/pt.ini @@ -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 diff --git a/res/lang/pt_BR.ini b/res/lang/pt_BR.ini index 2485522..a15f0c9 100644 --- a/res/lang/pt_BR.ini +++ b/res/lang/pt_BR.ini @@ -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 diff --git a/res/lang/ro.ini b/res/lang/ro.ini index 74c0461..53a7432 100644 --- a/res/lang/ro.ini +++ b/res/lang/ro.ini @@ -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 diff --git a/res/lang/ru.ini b/res/lang/ru.ini index 131e602..07d164c 100644 --- a/res/lang/ru.ini +++ b/res/lang/ru.ini @@ -7,6 +7,7 @@ err_alloc = не удалось выделить память err_bounds = за пределами индекса err_brightness_change = не удалось изменить яркость err_chdir = не удалось открыть домашнюю папку + err_config = не удалось разобрать файл конфигурации err_dgn_oob = отладочное сообщение (log) err_domain = неверный домен diff --git a/res/lang/sr.ini b/res/lang/sr.ini index c63fe28..fb8c26c 100644 --- a/res/lang/sr.ini +++ b/res/lang/sr.ini @@ -8,6 +8,7 @@ err_bounds = izvan granica indeksa err_chdir = neuspijesno otvaranje home foldera + err_dgn_oob = log poruka err_domain = nevazeci domen diff --git a/res/lang/sv.ini b/res/lang/sv.ini index 17359cc..7aaff8d 100644 --- a/res/lang/sv.ini +++ b/res/lang/sv.ini @@ -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 diff --git a/res/lang/tr.ini b/res/lang/tr.ini index 535015c..aee7fbd 100644 --- a/res/lang/tr.ini +++ b/res/lang/tr.ini @@ -8,6 +8,7 @@ err_bounds = sinirlarin disinda dizin err_chdir = ev klasoru acilamadi + err_dgn_oob = log mesaji err_domain = gecersiz etki alani diff --git a/res/lang/uk.ini b/res/lang/uk.ini index 9e6de2d..16d740c 100644 --- a/res/lang/uk.ini +++ b/res/lang/uk.ini @@ -8,6 +8,7 @@ err_bounds = поза межами індексу err_chdir = не вдалося відкрити домашній каталог + err_dgn_oob = повідомлення журналу (log) err_domain = недійсний домен diff --git a/res/lang/zh_CN.ini b/res/lang/zh_CN.ini index 9afdc66..971cb1c 100644 --- a/res/lang/zh_CN.ini +++ b/res/lang/zh_CN.ini @@ -8,6 +8,7 @@ err_bounds = 索引越界 err_chdir = 无法打开home文件夹 + err_dgn_oob = 日志消息 err_domain = 无效的域 diff --git a/src/config/Lang.zig b/src/config/Lang.zig index 7175e0f..0649619 100644 --- a/src/config/Lang.zig +++ b/src/config/Lang.zig @@ -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", diff --git a/src/interop.zig b/src/interop.zig index 8540c21..68d4332 100644 --- a/src/interop.zig +++ b/src/interop.zig @@ -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]; } diff --git a/src/main.zig b/src/main.zig index 0cc2c6e..ddd6cfb 100644 --- a/src/main.zig +++ b/src/main.zig @@ -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, ¶ms, .{}); @@ -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); }