1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-05 01:03:14 +02:00

Compare commits

...

194 Commits

Author SHA1 Message Date
Sébastien Helleu f8cebd9d82 core: add description to built-in light theme 2026-07-05 00:46:00 +02:00
Sébastien Helleu cbc147b0a5 core: always write all options in theme files
Theme files saved with /theme save and automatic backups now always
contain every themable option (full snapshot), so a theme file is
self-contained and round-trips exactly regardless of the current
configuration. The diff-only mode and the "-full" argument of
/theme save are removed.
2026-07-05 00:46:00 +02:00
Sébastien Helleu 4cb55ce0af core: fix description of automatic theme backup 2026-07-05 00:46:00 +02:00
Sébastien Helleu 8275745b8c core: add /theme rename to rename a user theme file 2026-07-05 00:46:00 +02:00
Sébastien Helleu 3fd5c321da core: auto-detect terminal background and apply light theme on first start
Detect the terminal background (via COLORFGBG or an OSC 11 query) before
GUI init and, on the first start, automatically apply the built-in
"light" theme when a light terminal is detected.

The function gui_term_theme_is_light returns an int (1 if light, 0 otherwise,
0 being the safe value when detection is unsure).
2026-07-05 00:46:00 +02:00
Sébastien Helleu 1dc651742b core: display path to theme written with /theme save <name> 2026-07-05 00:46:00 +02:00
Sébastien Helleu 867625b65a core: add /theme reset to restore original themable defaults 2026-07-05 00:46:00 +02:00
Sébastien Helleu 887108463c tests: cover apply edge cases for /theme command 2026-07-05 00:46:00 +02:00
Sébastien Helleu 27426e4f25 doc: document /theme command and theme file format 2026-07-05 00:46:00 +02:00
Sébastien Helleu 94ad3ca5fd script: track per-script theme contributions and purge on script unload
Make individual scripts the unit of ownership for theme contributions
so that loading a script that calls weechat.theme_register(...) and
later unloading it correctly removes the script's overrides.

Plugin API addition (weechat-plugin.h):

  - new function pointer t_weechat_plugin.theme_unregister_script
    delegates to core's theme_unregister_script.
  - new convenience macro weechat_theme_unregister_script(script).
  - WEECHAT_PLUGIN_API_VERSION bumped to 20260704-03.

Script API additions (plugin-script-api.{c,h}):

  - new plugin_script_api_theme_register (plugin, script, name,
    overrides) forwards to the plugin API with the script pointer
    as the contribution owner, so contributions are tracked
    per-script (not per script-language plugin).

Lifecycle wiring (plugin-script.c):

  - new internal plugin_script_remove_themes (plugin, script)
    calls weechat_theme_unregister_script.
  - plugin_script_remove now calls it alongside the other
    plugin_script_remove_* helpers, so script-unload tears down
    everything (configs, bar items, themes, hooks).

Eight language bindings updated to call
plugin_script_api_theme_register instead of weechat_theme_register
directly, so they pass the script pointer as owner:

  - python, perl, ruby, lua, tcl, javascript, php, guile.
2026-07-05 00:46:00 +02:00
Sébastien Helleu ea02f83389 core: auto-purge plugin contributions on plugin unload
Call theme_unregister_plugin (plugin) from plugin_remove, right after
config_file_free_all_plugin and before unhook_all_plugin. This drops
every theme contribution whose plugin pointer matches the plugin being
unloaded, so subsequent /theme apply runs no longer try to set
options for an unloaded plugin and per-plugin contributions don't
outlive the plugin.

Script-owned contributions (plugin != NULL && script != NULL) are
left intact - they are cleaned up per-script on script unload.

This commit is wiring only: the underlying theme_unregister_plugin
function and its semantics are already covered by
TEST(CoreTheme, UnregisterByOwner).
2026-07-05 00:46:00 +02:00
Sébastien Helleu 051c8a839f core: add missing translation in output of /theme list 2026-07-05 00:46:00 +02:00
Sébastien Helleu 34263a2e6e core: track per-contributor overrides in theme registry
Refactor the theme registry to store one sub-table per contributor
instead of a single merged hashtable. Each registered theme now holds
a linked list of t_theme_contribution entries:

  struct t_theme_contribution {
      struct t_weechat_plugin *plugin;  /* NULL = core */
      const void *script;               /* NULL for non-script */
      struct t_hashtable *overrides;
      ...
  };

Identity of a contributor is the (plugin, script) pair:

  - (NULL, NULL)     -> core (theme_builtin_init)
  - (plugin, NULL)   -> plugin-level contribution
  - (plugin, script) -> individual script

theme_register is now (plugin, script, name, overrides). It searches
the existing contributions for a matching (plugin, script) and merges
the new overrides into it; otherwise it appends a fresh contribution.
The public macro weechat_theme_register(name, overrides) still takes
two args - it now expands to pass weechat_plugin and NULL for script.

theme_apply iterates contributions in list order, calling
config_file_option_set for each entry; later contributions naturally
win for duplicate keys.

Two new internal helpers prepare for the plugin/script unload
lifecycle:

  - theme_unregister_plugin (plugin): drops every contribution owned
    by that plugin (with script == NULL).
  - theme_unregister_script (plugin, script): drops every contribution
    owned by that script.

Neither is called yet.

Other touched code:

  - core-theme-builtin.c switches to theme_register (NULL, NULL, ...).
  - core-command.c /theme info uses theme_overrides_count helper
    instead of reaching into theme->overrides (which no longer
    exists).
  - WEECHAT_PLUGIN_API_VERSION bumped to 20260704-02 (function-pointer
    signature change).

Two new tests cover the new semantics:

  - UnregisterByOwner: registers four contributions from distinct
    (plugin, script) pairs, then prunes by plugin and by script,
    asserting per-contribution removal.
  - RegisterMergesPerContributor: two successive register calls from
    the same (plugin, script) merge into a single contribution with
    later keys overriding earlier ones.

Existing tests are updated to use the new theme_register signature,
theme_overrides_count, and theme_get_override (replacing direct
access to theme->overrides->items_count and hashtable_get on
theme->overrides). No plugin or script call sites change - the
public weechat_theme_register macro keeps the same shape.
2026-07-05 00:45:59 +02:00
Sébastien Helleu ce4fb15c8b trigger: contribute "light" theme overrides
Add trigger-theme.{c,h} with the trigger plugin contribution to the
built-in "light" theme: 6 entries (flag_command, flag_conditions,
flag_post_action, flag_regex, flag_return_code, regex) tuned for a
light-background terminal.

Same 2D-array pattern as the other plugin contributions.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 1d9b8e8109 spell: contribute "light" theme overrides
Add spell-theme.{c,h} with the spell plugin contribution to the
built-in "light" theme: 1 entry (spell.color.misspelled=red) tuned for
a light-background terminal.

Same 2D-array pattern as the other plugin contributions.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 0ea5e61207 script: contribute "light" theme overrides
Add script-theme.{c,h} with the script plugin contribution to the
built-in "light" theme: 24 entries on script.color.* (status_* and
text_*) tuned for a light-background terminal.

Same 2D-array pattern as the other plugin contributions.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu d54a2d8ca3 relay: contribute "light" theme overrides
Add relay-theme.{c,h} with the relay plugin contribution to the
built-in "light" theme: 5 entries (status_auth_failed, status_authenticating,
status_connecting, status_disconnected, text_selected) tuned for a
light-background terminal.

Same 2D-array pattern as the other plugin contributions.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 4b67c9133f logger: contribute "light" theme overrides
Add logger-theme.{c,h} with the logger plugin contribution to the
built-in "light" theme: 2 entries (logger.color.backlog_end=darkgray,
logger.color.backlog_line=darkgray) tuned for a light-background
terminal.

Same 2D-array pattern as the other plugin contributions.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 0ae0b4c217 exec: contribute "light" theme overrides
Add exec-theme.{c,h} with the exec plugin contribution to the built-in
"light" theme: 2 entries (exec.color.flag_finished=red,
exec.color.flag_running=green) tuned for a light-background terminal.

Same 2D-array pattern as the other plugin contributions.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 368aafe679 xfer: contribute "light" theme overrides
Add xfer-theme.{c,h} with the xfer plugin contribution to the built-in
"light" theme: 7 overrides on xfer.color.* (status_aborted,
status_active, status_connecting, status_done, status_failed,
status_waiting, text_selected) tuned for a light-background terminal.

Same NULL-terminated 2D-array pattern as the irc, fset and buflist
contributions; xfer_theme_init() is called once from
weechat_plugin_init after xfer_config_init / xfer_config_read.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 4cf111153b buflist: contribute "light" theme overrides
Add buflist-theme.{c,h} with the buflist plugin contribution to the
built-in "light" theme: 5 overrides on buflist.format.* options
(buffer_current, hotlist_low, hotlist_message, lag, number) tuned for
a light-background terminal. Each target is a "string|themable" option
holding an evaluated format expression with embedded ${color:...}
references.

Follows the same pattern as the irc and fset contributions: a
NULL-terminated 2D string table consumed by a tiny local register
helper that builds a hashtable and calls weechat_theme_register;
buflist_theme_init() is called once from weechat_plugin_init after
buflist_config_init / buflist_config_read.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu efdcb6f2dd fset: contribute "light" theme overrides
Add fset-theme.{c,h} with the fset plugin contribution to the built-in
"light" theme: 47 overrides on fset.color.* options (line backgrounds,
selected-row tuning, title and value colors) tuned for a
light-background terminal.

The table is a NULL-terminated 2-column array of strings (no struct
wrapper, matching the pattern adopted for the irc contribution).
fset_theme_register builds a hashtable from the table and calls
weechat_theme_register; fset_theme_init() is called once from
weechat_plugin_init after fset_config_init / fset_config_read.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 3a5f177a28 irc: contribute "light" theme overrides
Add irc-theme.{c,h} with the IRC plugin contribution to the built-in
"light" theme: 9 overrides on irc.color.* options tuned for a
light-background terminal (input_nick, item_lag_finished,
item_tls_version_deprecated, list_buffer_line_selected,
message_chghost, message_setname, nick_prefixes, topic_new, topic_old).

The registration is a small wrapper around weechat_theme_register that
builds a hashtable from a static (option, value) table and frees it
after the call. irc_theme_init() is called from weechat_plugin_init
after irc_config_init/read so the option names are already created
when the theme registry references them.

Default option values are NOT changed.
2026-07-05 00:45:59 +02:00
Sébastien Helleu daaca6dee6 core: register built-in "light" theme
Add a small core-theme-builtin.c module containing the core
contribution to the "light" theme: 33 overrides for
"weechat.bar.{status,title}.color_*" and "weechat.color.*" tuned for
light-background terminals.

theme_builtin_init() builds a hashtable from the static entry table and
calls theme_register("light", overrides), then frees the temporary
hashtable. It is called once from weechat_init right after theme_init.
Calling it twice is a no-op (the registry merges identical keys).

Default option values are NOT changed. Existing configs render exactly
as before; users opt in with "/theme apply light".

Add TEST(CoreTheme, BuiltinInit) covering:
  - the "light" theme is absent before theme_builtin_init();
  - it is present after, with >= 30 overrides;
  - three spot-checked values match the source table;
  - calling theme_builtin_init() a second time does not change the
    override count.

Plugins contribute their own "light" overrides via weechat_theme_register
in subsequent commits.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 4c352f5c38 script: expose theme_register to python, perl, ruby, lua, tcl, javascript, php, guile
Add weechat.theme_register (name, overrides) to all eight script
languages. Each binding is a mechanical translation of the same
signature:

  - name:      string
  - overrides: language-native dict / hash / associative array of
               full_option_name -> value strings
  - returns:   pointer-as-string of the registered t_theme (empty
               string on failure)

Each binding converts the dict to a struct t_hashtable using the
existing per-language helper (weechat_python_dict_to_hashtable,
weechat_perl_hash_to_hashtable, weechat_ruby_hash_to_hashtable,
weechat_lua_tohashtable, weechat_tcl_dict_to_hashtable,
weechat_js_object_to_hashtable, weechat_php_array_to_hashtable,
weechat_guile_alist_to_hashtable), calls weechat_theme_register,
frees the temporary hashtable, and returns the result. The new
function is registered right after the config_* functions so the API
listing stays grouped by topic.

PHP also receives a new arginfo entry (string, array -> string) in
both weechat-php_arginfo.h and weechat-php_legacy_arginfo.h.

This is plumbing only - the underlying theme_register function is
already covered by tests/unit/core/test-core-theme.cpp
(TEST(CoreTheme, Register)). No script-side tests are added here.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 0ed1b03b36 api: expose theme_register to plugins
Add a single new entry point to the plugin API:

  struct t_theme *weechat_theme_register (const char *name,
                                          struct t_hashtable *overrides);

Plugins call this at init time to contribute their per-theme color (or
other themable) overrides for a built-in theme like "dark". The
overrides hashtable maps full option names ("irc.color.input_nick") to
their string values; the caller retains ownership and may free it
right after the call. Repeated calls with the same theme name merge
into the existing registry entry, so each plugin can declare its own
contributions independently of core and of other plugins.

Wiring:

- struct t_theme forward-declared in weechat-plugin.h alongside the
  other opaque types.
- theme_register function pointer added to t_weechat_plugin.
- weechat_theme_register convenience macro added.
- plugin.c initializes the pointer to core's theme_register.
- WEECHAT_PLUGIN_API_VERSION bumped to 20260704-01.

This commit is plumbing only: the underlying theme_register function
already has unit-test coverage in tests/unit/core/test-core-theme.cpp
(TEST(CoreTheme, Register)), so no new tests are added here.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 266d05ac66 core: add theme name completion
Add two completion items hooked alongside "layouts_names":

- "theme_themes_all": all theme names (built-ins from the registry
  plus every *.theme file in <weechat_config_dir>/themes/, including
  backup-*.theme). Used by tab-complete on /theme apply and
  /theme info.
- "theme_themes_user": user theme files only (excludes built-ins
  and backup-*.theme). Used by tab-complete on /theme save and
  /theme del, so users cannot accidentally try to overwrite a
  built-in name or save a name colliding with the reserved backup
  prefix.

Both callbacks share a small dir_exec_on_files-based helper to filter
the themes directory. The /theme command's completion template in
core-command.c is updated to reference these new items.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 9e7903c601 core: implement /theme save and /theme del
Add two complementary subcommands:

  /theme save <name> [-full]: writes a user theme file at
    ${weechat_config_dir}/themes/<name>.theme containing the current
    themable options. By default only options whose value differs from
    their default (config_file_option_has_changed) are written, which
    keeps the file small and focused. Pass "-full" to write every
    themable option (matches the format used by automatic backups).

    Name validation: refuses any name matching a built-in theme (those
    are reserved for in-memory registrations) and any name starting
    with "backup-" (reserved for /theme apply backups). Both checks
    print an error and abort without writing.

  /theme del <name>: removes ${weechat_config_dir}/themes/<name>.theme
    via unlink. Refuses to delete a name registered as a built-in
    theme (a built-in has no file on disk to delete, even if the user
    has a shadowing file of the same name they cannot remove it this
    way; they can rename or delete it manually).

The full-snapshot writer used by /theme apply backups is refactored
into theme_write_file (name, description, diff_only). It is reused
by theme_make_backup (diff_only=0) and theme_save (diff_only inverted
from the user's -full flag).
2026-07-05 00:45:59 +02:00
Sébastien Helleu 0e245e8e0c core: implement theme file parsing and transient file reads in /theme apply
Add a small INI-style parser for *.theme files and wire it into the
/theme command so user themes living in directory "themes" inside the
WeeChat configuration directory can be applied (and inspected) without
ever being cached.

Parser (theme_file_parse in core-theme.c) accepts two sections:

  [info]
  name = "..."          \ shown by /theme info; ignored for apply
  description = "..."   |
  date = "..."          |
  weechat = "..."       /
  (unknown keys are ignored with a warning)

  [options]
  full.option.name = "value"

Surrounding single or double quotes around a value are stripped (same
rule used by the regular config file reader). The parsed result is a
heap-allocated t_theme; the caller frees with theme_free.

Resolution rule in theme_apply: if the path
"${weechat_config_dir}/themes/<name>.theme" is readable it is parsed
and used (file shadows any built-in of the same name); otherwise the
built-in registry is consulted. The transient t_theme is freed before
the final refresh, so user themes have no steady-state memory
footprint regardless of how many .theme files have accumulated.

/theme list now also scans the themes directory and appends user
files to the listing (each marked "(file)"). backup-*.theme are
hidden by default; pass "-backups" to include them.

/theme info <name> works for both sources: file path is shown when the
information comes from disk; "built-in (in-memory)" otherwise.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 9a86f1327b core: implement /theme apply with themable enforcement and auto-backup
Implement /theme apply <name> for themes currently in the in-memory
registry. The file-shadowing branch (read a .theme file from
${weechat_config_dir}/themes/ when no built-in matches) is added in
the next commit together with the parser.

Apply algorithm (theme_apply in core-theme.c):

- Look up the theme in the registry; abort with an error if unknown.
- If weechat.look.theme_backup is on and the target name does not
  begin with "backup-", write a full snapshot of every themable
  option to ${weechat_config_dir}/themes/backup-<timestamp>.theme
  via theme_make_backup; abort the apply if the backup cannot be
  written, so the user can always undo.
- Iterate the theme's overrides with theme_applying=1 so the
  per-option config_change_color skips its gui refresh; for each
  entry look up the option, refuse it if missing or non-themable
  (warning to core buffer), otherwise call config_file_option_set.
- Perform a single gui_color_init_weechat + gui_window_ask_refresh
  at the end.
- Persist the active label in weechat.look.theme and send signal
  "theme_applied" with the name as data.

Add the new option weechat.look.theme_backup (boolean, default on)
which controls the backup-or-abort behavior described above.

Wire the new /theme apply subcommand into core-command.c with the
existing /theme registration; update help text accordingly.
2026-07-05 00:45:59 +02:00
Sébastien Helleu 4d8588116e core: add /theme command with list and info subcommands
Add the /theme command with two read-only subcommands for now:

- /theme (or /theme list): list registered themes; the active theme
  (matching weechat.look.theme) is marked with "->".
- /theme info <name>: show name, description, creation date, WeeChat
  version and override count of a theme.

Both subcommands only consider themes present in the in-memory
registry (registered via core/plugins/scripts). User theme files on
disk are not yet handled: the file parser and transient file reads
land in a later commit together with /theme apply.
2026-07-05 00:45:59 +02:00
Sébastien Helleu afd2728255 core: add weechat.look.theme option and theme_applying guard
Add a new string option "weechat.look.theme" holding the name of the
last theme applied via the upcoming /theme command. It is set
automatically by /theme apply and persisted on disk for /theme info to
display after restart; it is NOT re-applied at startup (the user's
saved color values win to avoid clobbering manual post-apply tweaks).

Amend config_change_color so it skips the gui_color_init_weechat ()
and gui_window_ask_refresh (1) calls when theme_applying is set.
/theme apply will set this flag while iterating overrides so the N
individual option changes do not trigger N redundant screen refreshes;
the apply path then performs a single refresh at the end.
2026-07-05 00:45:58 +02:00
Sébastien Helleu 3e0c5ff556 core: add core-theme skeleton and theme registry
Introduce a new module (core-theme.{c,h}) holding the in-memory registry
of built-in themes used by the upcoming /theme command:

- struct t_theme stores name, description, date and weechat version
  captured at registration time, plus a hashtable of overrides keyed by
  full option name (file.section.option) -> value string.
- theme_register (name, overrides) creates a new theme or merges the
  given overrides into an existing one (later calls override duplicate
  keys); this is the API plugins and scripts will use to contribute
  per-theme color values.
- theme_search and theme_list provide lookup and ordered enumeration.
- theme_init / theme_end are called from weechat_init / weechat_end.

The theme_applying flag is declared here but not yet consumed (it will
gate config_change_color in the next commit to avoid N redundant
window refreshes during /theme apply).

User theme files are not handled by this module: they are read
transiently inside /theme apply (a later commit) and never cached.
2026-07-05 00:45:58 +02:00
Sébastien Helleu d8433eaf55 fset: add "t:themable" filter
Extend the "t:" filter so the special value "themable" matches every
option whose new themable flag is set, regardless of type (color,
string, integer, boolean, enum). This makes the flag interactively
discoverable in the fset buffer and is the natural way to inspect the
surface area that an upcoming /theme command will be allowed to touch.

The themable flag of an option is now mirrored on struct t_fset_option,
exposed via hdata ("themable", integer) and infolist ("themable",
integer), and printed in the log.
2026-07-05 00:45:58 +02:00
Sébastien Helleu 68d5004e12 core: add themable flag to configuration options
Add an "int themable" field on struct t_config_option. The flag is set
automatically for every CONFIG_OPTION_TYPE_COLOR option, and may be set
explicitly on any other type by suffixing the type argument with
"|themable" in the call to config_file_new_option (e.g. "string|themable"
for a string option whose value contains "${color:...}" references).

Opt in the relevant string options in core and in the buflist, fset, irc,
relay plugins.

The flag is exposed via hdata, infolist, and print_log so scripts and
/debug can read it. This is the foundation for an upcoming /theme
command that will only be allowed to modify themable options.
2026-07-05 00:45:58 +02:00
Sébastien Helleu 5a341c69f5 core: set max curl version to 8.22.0 for TLSAUTH symbols 2026-07-05 00:45:03 +02:00
Sébastien Helleu 825f05015f core: update ChangeLog (issue #2331) 2026-07-03 07:50:22 +02:00
Matthew Horan 055642b9df relay/api: only decompress compressed messages
With permessage-deflate, RSV1 of the first fragment indicates whether or
not the message is compressed [1]. If RSV1 is not set then the message
should not be decompressed.

[1] https://datatracker.ietf.org/doc/html/rfc7692#section-6
2026-07-02 14:48:05 +02:00
Sébastien Helleu 5a2c412ded core: set pointers to NULL after free of data when a buffer is closed (closes #2332) 2026-06-29 08:52:10 +02:00
Sébastien Helleu f3e14829ab ci: remove check of gettext files with msgcheck
Use only poexam to check gettext files.
2026-06-28 16:56:15 +02:00
Sébastien Helleu 376ea3cc9e ci: cache poexam binary 2026-06-28 16:55:36 +02:00
Sébastien Helleu df6b994d3b ci: bump poexam to version 0.0.12 2026-06-28 11:10:59 +02:00
Sébastien Helleu 1f9c3784c7 core: fix copyright and gettext headers 2026-06-28 08:59:43 +02:00
Ivan Pešić a217e9f72f Update of the Serbian translations (#2329)
* core: update Serbian translations

* doc: update Serbian translations
2026-06-27 08:59:03 +02:00
weechatter 8858d4b6b4 core: update German translations 2026-06-23 13:29:41 +02:00
Sébastien Helleu e9d998a9bf trigger: add unit for timer interval in /help trigger 2026-06-23 12:15:47 +02:00
Sébastien Helleu bfb34faa97 irc: replace "atol" by "atoll" for variables cast to time_t
On modern 32-bit platforms with a 64-bit time_t, long is 32-bit but time_t is
64-bit.
2026-06-21 08:19:42 +02:00
Sébastien Helleu a4b8d7aedd tcl: fix conversion of dates in the API functions
On modern 32-bit platforms with a 64-bit time_t, long is 32-bit but time_t is
64-bit.

Replace calls to Tcl_GetLongFromObj by Tcl_GetWideIntFromObj.
2026-06-21 08:19:42 +02:00
Sébastien Helleu 75b364cd89 ruby: fix conversion of dates in the API functions
On modern 32-bit platforms with a 64-bit time_t, long is 32-bit but time_t is
64-bit.

Replace calls to NUM2ULONG by NUM2ULL.
2026-06-21 08:19:42 +02:00
Sébastien Helleu 914d3df639 python: fix conversion of dates in the API functions
On modern 32-bit platforms with a 64-bit time_t, long is 32-bit but time_t is
64-bit.

Use "long long" for variables cast to time_t.
2026-06-21 08:19:42 +02:00
Sébastien Helleu a5404172c8 perl: fix conversion of dates in the API functions
On modern 32-bit platforms with a 64-bit time_t, the value returned by SvIV can
be 32-bit (its width depends on how Perl was built), whereas time_t is 64-bit.

Read the date with SvNV instead: a double represents all real timestamps
exactly, so the conversion to time_t no longer depends on the size of the Perl
integer type.
2026-06-21 08:19:42 +02:00
Sébastien Helleu 1dd423cb23 lua: fix conversion of dates in the API functions
On modern 32-bit platforms with a 64-bit time_t, long is 32-bit but time_t is
64-bit.

Use "long long" for variables cast to time_t.
2026-06-21 07:43:59 +02:00
Sébastien Helleu 8f33a72c99 guile: fix conversion of dates in the API functions
On modern 32-bit platforms with a 64-bit time_t, long is 32-bit but time_t is
64-bit.

Replace calls to scm_to_long by scm_to_long_long.
2026-06-21 07:42:02 +02:00
Sébastien Helleu f4564a1cb0 core, api: remove unneeded cast to time_t
The field `tv_sec` of struct timeval is already time_t, the cast is not needed.
2026-06-20 21:50:25 +02:00
Sébastien Helleu c4dfb16df0 core: use function util_parse_longlong to parse date in command /print 2026-06-20 17:30:42 +02:00
Sébastien Helleu 6facd390fe core: use function util_parse_longlong to parse time in function hdata_set 2026-06-20 17:30:41 +02:00
Sébastien Helleu 2aada3d0ca xfer: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu 791c39cc84 trigger: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu ce6a214ce1 script: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu 3c302e078d relay: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu 90761d6350 api: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu 4eba4f9a47 python: use function util_parse_int in API function hook_signal_send 2026-06-20 17:30:41 +02:00
Sébastien Helleu fcbb508cd7 javascript: use function util_parse_int in API function hook_signal_send 2026-06-20 17:30:41 +02:00
Sébastien Helleu b49eac6f2d irc: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu 9b418b4dc2 fset: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu 08b173f9b7 exec: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu 42b91aa91d buflist: use util functions to parse integers 2026-06-20 17:30:41 +02:00
Sébastien Helleu 4ac2f6c2ad core: use util functions to parse integers in buffer functions 2026-06-20 17:30:41 +02:00
Sébastien Helleu 3d804810a0 core: use util functions to parse integers in window functions 2026-06-20 17:30:41 +02:00
Sébastien Helleu 987b03da39 core: use util functions to parse integers in nicklist functions 2026-06-20 17:30:41 +02:00
Sébastien Helleu a1f1443fd8 core: use util functions to parse integers in function gui_line_hook_update 2026-06-20 17:30:41 +02:00
Sébastien Helleu ca8312a48c core: use function util_parse_int in function gui_key_grab_init 2026-06-20 17:30:41 +02:00
Sébastien Helleu 971f7b1660 core: use function util_parse_int in function gui_hotlist_clear_level_string 2026-06-20 17:30:41 +02:00
Sébastien Helleu 643f2fab5b core: use function util_parse_int in function gui_focus_info_hashtable_gui_focus_info_cb 2026-06-20 17:30:41 +02:00
Sébastien Helleu 5f36c52935 core: use function util_parse_int in color functions 2026-06-20 17:30:41 +02:00
Sébastien Helleu 92219ba132 core: use function util_parse_longlong in function gui_chat_hsignal_quote_line_cb 2026-06-20 17:30:41 +02:00
Matthew Horan 905a68739e doc/api: note that colors param is supported nicks endpoint 2026-06-20 17:18:23 +02:00
Sébastien Helleu 3200a05c00 relay/api: fix memory leak in resources "handshake", "input" and "completion" 2026-06-17 21:54:15 +02:00
Sébastien Helleu 861f589fc2 core: update ChangeLog (#2326) 2026-06-17 21:31:03 +02:00
aizu-m c40261aed1 xfer: fix out-of-bounds write in xfer_dcc_resume_hash (#2326) 2026-06-17 21:29:45 +02:00
Sébastien Helleu 770e733303 ci: switch from Ubuntu 24.04 to 26.04 2026-06-15 21:55:54 +02:00
Sébastien Helleu 9bd2aaa25d core: mute compiler warning on calls to dup() function 2026-06-15 08:22:03 +02:00
Sébastien Helleu 4e206ee3ae trigger: use "const char *" variables for result of string functions with const parameter 2026-06-15 07:55:20 +02:00
Sébastien Helleu 7ff71d2b0e spell: use "const char *" variables for result of string functions with const parameter 2026-06-15 07:55:10 +02:00
Sébastien Helleu 203fdca3e8 script: use "const char *" variables for result of string functions with const parameter 2026-06-15 07:54:40 +02:00
Sébastien Helleu e3ba25df19 relay: use "const char *" variables for result of string functions with const parameter 2026-06-15 07:54:10 +02:00
Sébastien Helleu 64566629c5 irc: use "const char *" variables for result of string functions with const parameter 2026-06-15 07:52:12 +02:00
Sébastien Helleu 7e3afaf46d core, api: use "const char *" variables for result of string functions with const parameter 2026-06-15 07:52:10 +02:00
Sébastien Helleu cf702d541f api: change type of parameter "pos_option_name" to "const char **" in function config_search_with_string 2026-06-15 07:29:33 +02:00
Sébastien Helleu a8067751eb doc/plugin: fix parameters of mkdir functions
The directory parameter is always `const char *` and not `char *`.
2026-06-15 07:29:28 +02:00
Sébastien Helleu a696a100d8 core: update ChangeLog (#2325) 2026-06-12 13:02:05 +02:00
aizu-m e60786d059 core: fix buffer overflow in function network_pass_socks5proxy (#2325)
bound the configured proxy username and password before they are copied into the fixed stack buffer in network_pass_socks5proxy, otherwise a login longer than the buffer (a long password or token) overruns it while building the SOCKS5 auth request.
2026-06-12 13:00:17 +02:00
Sébastien Helleu d78105ddf5 core: add CVE IDs in ChangeLog 2026-06-09 22:10:17 +02:00
weechatter 2a8c86242b core: update German translations 2026-06-09 10:42:23 +02:00
Sébastien Helleu dd9ef2f4d9 tests: add missing include of string.h 2026-06-08 23:17:19 +02:00
Sébastien Helleu 4c6c55befe core: update translations 2026-06-08 23:15:00 +02:00
Sébastien Helleu de878b2303 relay/api: remove error 400 which is never returned in response to GET /api/scripts 2026-06-08 23:11:27 +02:00
Sébastien Helleu 80a47b6731 relay/api: add missing fields in script object in OpenAPI document 2026-06-08 23:11:06 +02:00
Sébastien Helleu 551c12e049 relay/api: add resource GET /api/scripts 2026-06-08 23:04:40 +02:00
Sébastien Helleu 12016c4c05 script: add info "script_languages" 2026-06-08 18:54:06 +02:00
Sébastien Helleu 3aeaa70e64 ci: bump poexam to version 0.0.11 2026-06-07 21:56:22 +02:00
Sébastien Helleu 66e633e27e core: add version 4.9.2 2026-06-07 11:51:55 +02:00
Sébastien Helleu 436bbeceff tests: increase buffer size for injection of fake IRC message 2026-06-07 08:47:36 +02:00
Sébastien Helleu c307087e2d core: update ChangeLog (#2324) 2026-06-06 11:19:14 +02:00
aizu-m 51a1149852 relay: fix out-of-bounds read in relay_http_print_log_request (#2324) 2026-06-06 11:18:06 +02:00
Sébastien Helleu d74993a42c relay: limit size of partial message received while reading an HTTP request to prevent memory exhaustion
A relay client could send data with no end-of-line (an unterminated method
or header line) and dribble its payload, making WeeChat accumulate it in the
partial message buffer that grew without limit, until all memory was
exhausted. This path is reachable before authentication during websocket
initialization with the "weechat" and "irc" protocols.

The accumulated partial message is now bounded by
RELAY_HTTP_PARTIAL_MESSAGE_MAX_LENGTH: once the limit is reached, the extra
data is ignored.
2026-06-06 09:36:22 +02:00
Sébastien Helleu 51464e400f core: add links to issues in ChangeLog (#2321, #2322) 2026-06-06 07:20:41 +02:00
Sébastien Helleu 1c5e6c3fc2 core: update ChangeLog (#2323) 2026-06-06 07:20:38 +02:00
Sébastien Helleu e563dfc903 doc: add build of Serbian API Relay doc 2026-06-06 07:09:04 +02:00
Sébastien Helleu befbcceb7f relay/api: add field "last_read_line_id" in GET /api/buffers 2026-06-06 07:04:46 +02:00
aizu-m 56f9ad68fb xfer: fix out-of-bounds read in xfer_chat_recv_cb on empty line (#2323) 2026-06-06 07:01:18 +02:00
aizu-m 328f86affc irc: fix out-of-bounds read in DCC command with quoted filename 2026-06-04 23:17:58 +02:00
Sébastien Helleu f4dc30ec58 tests: add tests on function xfer_file_find_filename 2026-06-04 23:17:58 +02:00
aizu-m 23291acb7b xfer: replace directory separator in remote nick by underscore in download filename 2026-06-04 22:38:08 +02:00
Sébastien Helleu b802681230 api: fix infinite loop in function string_replace when the search string is empty 2026-06-03 21:15:16 +02:00
Sébastien Helleu 3687ce0f0f relay: limit size of received websocket frame and HTTP body to prevent memory exhaustion
A relay client could announce a huge websocket frame (or HTTP body via
"Content-Length") and dribble its payload, making WeeChat accumulate it
in a buffer that grew without limit, until all memory was exhausted. The
websocket frame path is reachable before authentication with the
"weechat" and "irc" protocols.

The announced websocket frame length and HTTP "Content-Length" are now
bounded by WEBSOCKET_FRAME_MAX_LENGTH and RELAY_HTTP_BODY_MAX_LENGTH: an
oversized websocket frame closes the connection, and an oversized body is
rejected.
2026-06-01 21:56:34 +02:00
Sébastien Helleu 1211510ded irc: limit size of data received from the server to prevent memory exhaustion
A malicious or compromised IRC server could send data with no end-of-line
(or a flood of "005" messages), making WeeChat accumulate it in a buffer
that grew without limit, until all memory was exhausted.

The unterminated received message and the accumulated "005" (ISUPPORT)
data are now bounded by IRC_SERVER_RECV_MSG_MAX_LENGTH and
IRC_SERVER_ISUPPORT_MAX_LENGTH: extra data is ignored once the limit is
reached.
2026-06-01 21:53:03 +02:00
aizu-m 07871f123f core: fix possible integer truncation in function eval_string_split (#2320) 2026-06-01 10:25:35 +02:00
Sébastien Helleu a0cf82d4a6 core: replace Bash/Ubuntu with WSL in README 2026-05-31 17:24:41 +02:00
Sébastien Helleu 13291b6b9a core: add missing trailing slash to Ruby scripts URL in README 2026-05-31 17:24:24 +02:00
Sébastien Helleu 76d652a513 core: fix multi-protocol feature wording in README 2026-05-31 17:24:13 +02:00
Sébastien Helleu ff9b698665 core: improve wording of semantic versioning section in README 2026-05-31 17:24:01 +02:00
Sébastien Helleu d5c985eb11 core: add security policy in SECURITY.md 2026-05-31 16:04:33 +02:00
Sébastien Helleu b29f464322 ci: enable ruby 3.3 module on Rocky Linux 9 2026-05-31 15:13:43 +02:00
Sébastien Helleu 171a9a9fc4 ci: install dnf-plugins-core on Rocky Linux 9 for dnf config-manager 2026-05-31 15:13:43 +02:00
Sébastien Helleu d7bc041098 core: add version 4.9.1 2026-05-31 15:09:01 +02:00
Sébastien Helleu 43a118ac47 core: fix timing attack on TOTP validation (GHSA-vhv8-g2r9-cwcc)
weecrypto_totp_validate compared the generated and client-supplied OTPs
with strcmp and broke out of the time-window loop on the first match.
Both choices leaked information via response timing: strcmp leaked the
expected OTP digit-by-digit (shrinking the brute-force search from
~10^digits to a handful of guesses within the 30-second window), and
the early break leaked which window offset matched.

Compare in constant time with string_memcmp_constant_time and always
iterate the full window, OR-ing the result into otp_ok without an
early exit.

This affects both relay protocols (which call totp_validate via the
public info hook) and any other caller of the info hook.
2026-05-31 09:16:46 +02:00
Sébastien Helleu e540d7a2cf relay/irc: fix timing attack on PASS command (GHSA-vhv8-g2r9-cwcc)
The IRC relay protocol's PASS handler compared the server password with
the client-supplied value using strcmp, leaking the password byte-by-byte
via response timing. This is the same class of bug fixed for the api and
weechat protocols, on a separate code path that did not go through
relay_auth_check_password_plain.

Extract the HMAC-then-constant-time-compare logic from
relay_auth_check_password_plain into relay_auth_password_equals, then
use it in both the plain-auth wrapper and the IRC PASS handler.
2026-05-31 09:16:36 +02:00
Sébastien Helleu 6948aea626 relay: fix timing attack on password authentication (GHSA-vhv8-g2r9-cwcc)
The relay authentication used non-constant-time comparisons (strcasecmp,
strcmp) to verify password hashes and plaintext passwords, allowing an
attacker to derive the expected hash byte-by-byte from response timing
and then authenticate without knowing the password.

- SHA/PBKDF2 hex hash comparisons: normalize the client-supplied hash to
  uppercase and compare in constant time over the fixed expected length.
- Plaintext password comparison: HMAC-SHA256 both passwords with a fresh
  per-call random key and compare the fixed-size MACs in constant time,
  hiding both per-byte timing and the password length.

Add string_memcmp_constant_time helper in core, exposed via the plugin
API. Bump WEECHAT_PLUGIN_API_VERSION accordingly.
2026-05-31 09:16:15 +02:00
Sébastien Helleu 5dbb96b66a relay: limit size of decompressed websocket frame to prevent memory exhaustion (GHSA-v2v4-45wm-5cr3)
An authenticated relay client using the permessage-deflate websocket
extension could send a small compressed frame that decompresses to an
unbounded amount of data, exhausting all memory and crashing WeeChat.

The output buffer in relay_websocket_inflate is now capped to
WEBSOCKET_INFLATE_MAX_SIZE: frames decompressing beyond this limit are
rejected and the connection is closed.
2026-05-31 09:16:06 +02:00
Sébastien Helleu 4fdcbf8f93 irc: fix description of info "irc_nick_from_host"
This fixes the following warning from xgettext:

src/plugins/irc/irc-info.c:1361: warning: Message contains an embedded email address.  Better move it out of the translatable string, see https://www.gnu.org/software/gettext/manual/html_node/No-embedded-URLs.html
2026-05-30 15:36:26 +02:00
Sébastien Helleu e4b70ad252 core: update translations 2026-05-30 14:00:43 +02:00
Sébastien Helleu d7fd2b7b0b core: define author name/email as constants
This fixes the following compiler warning:

src/core/core-args.c:180: warning: Message contains an embedded email address.  Better move it out of the translatable string, see https://www.gnu.org/software/gettext/manual/html_node/No-embedded-URLs.html
2026-05-30 13:39:45 +02:00
Sébastien Helleu 73cf57742e doc: make pygmentize optional at build time
If pygmentize is not found, the build now emits a CMake warning and
proceeds with an empty dark theme stylesheet rather than aborting.
A non-zero exit from pygmentize is also downgraded from SEND_ERROR to
WARNING for the same reason. This restores the pre-existing behavior
where the documentation could be built without any pygments tooling
installed (Asciidoctor then renders code blocks as plain text).
2026-05-24 18:03:12 +02:00
Sébastien Helleu bf7b8484cd doc: switch syntax highlighting to automatic light/dark theme with bevel on code blocks
Syntax highlighting now follows the user's `prefers-color-scheme`:

- Light theme uses the pygments `default` style, embedded by Asciidoctor as before.
- Dark theme uses the pygments `monokai` style, generated at CMake
  configure time via `pygmentize` and injected into the docinfo through a
  `@PYGMENTS_DARK_CSS@` placeholder, scoped under
  `@media (prefers-color-scheme: dark)`.

To support template substitution, `doc/docinfo.html` is renamed to
`docinfo.html.in` and produced into the build directory via
`configure_file`; all HTML targets now depend on the generated docinfo
and the `docinfodir` attribute points to the binary dir.

Code blocks also gain a subtle 3D bevel:

- `pre` borders use theme-specific bevel colors (`--pre-bevel-light` on
  top/left, `--pre-bevel-dark` on bottom/right) for a raised look in both
  themes.
- A shared `--pre-bevel-bg` surface color is applied to literalblock,
  listingblock and `pre.pygments`, so all code blocks sit on the same
  background regardless of the pygments style.
- `pre { line-height: 1.25 }` is forced to keep line spacing consistent
  between light (Asciidoctor base `1.45`) and dark (pygments `125%`).

`python3-pygments` is added to the documented build dependencies (the
`pygmentize` binary it provides is required at configure time).
2026-05-24 16:46:36 +02:00
weechatter 86f51b66b3 core: update German translations 2026-05-23 21:42:48 +02:00
Sébastien Helleu 1400b6c197 core: add fix of IRC tag in ChangeLog 2026-05-23 13:23:26 +02:00
Sébastien Helleu c71978c0b3 core: fix option weechat.look.color_real_white not applied when color is "white" on 16+ colors terminals (closes #1742) 2026-05-23 12:15:04 +02:00
Sébastien Helleu 4c38ce050b irc, script: display all input actions and in the same way in /list and /script buffers title 2026-05-22 07:56:31 +02:00
Sébastien Helleu 5520ed1950 fset: remove error displayed in core buffer when clicking with the mouse below the last option displayed 2026-05-21 13:55:15 +02:00
Sébastien Helleu ad35aef1f4 core: fix French translations 2026-05-20 21:56:45 +02:00
Sébastien Helleu 88f0070674 irc: fix tag in message with list of tags when joining a channel
The message with list of nicks on the channel has now tag irc_353 instead of
irc_366.
2026-05-20 20:24:06 +02:00
Sébastien Helleu 7683287f71 relay: add "api" protocol in help on options relay.network.password_hash_algo and relay.network.password_hash_iterations 2026-05-20 20:19:30 +02:00
Sébastien Helleu 33adaef85c core: add missing word in French translation of the welcome message 2026-05-20 20:13:26 +02:00
Sébastien Helleu 6f3c804379 core: add missing word in French translation of /help upgrade 2026-05-20 20:12:37 +02:00
Sébastien Helleu 617b4e4dee core: fix option name in French translation of /help buffer 2026-05-20 08:31:55 +02:00
Sébastien Helleu ea1eb76b2d core: fix trailing punctuation in German translation of /help script.look.use_keys 2026-05-17 20:59:07 +02:00
weechatter ad12925d6c core: update German translations 2026-05-13 21:04:45 +02:00
Sébastien Helleu a5fcf898b9 ci: bump poexam to version 0.0.10 2026-05-13 07:43:47 +02:00
Ivan Pešić 14d544be39 core: update Serbian translation (#2318) 2026-05-12 22:40:12 +02:00
Sébastien Helleu 3e994996c6 core: set max curl version to 8.21.0 for symbol CURLAUTH_DIGEST_IE 2026-05-12 13:12:12 +02:00
Sébastien Helleu 3341b9a2d2 core: remove zero width spaces (U+200B) in German translation of /help pipe 2026-05-10 19:28:25 +02:00
Sébastien Helleu 815640b840 relay: add option relay.network.unix_socket_permissions (closes #2317) 2026-05-10 19:22:57 +02:00
Sébastien Helleu acd3d91318 core: fix "Language" field in German translations
Country code is unnecessary: language "de" is equivalent to "de_DE".
2026-05-10 10:04:21 +02:00
Sébastien Helleu ef5f4d8ee6 core: fix "Language-Team" field in gettext file headers 2026-05-10 10:04:19 +02:00
weechatter d40217d1e6 core: update German translations 2026-05-06 15:59:20 +02:00
Sébastien Helleu 17b593325a core: complete /help away by mentioning the option irc.look.display_away 2026-05-04 18:47:04 +02:00
weechatter 3456e848da core: update German translations 2026-04-30 14:33:33 +02:00
Sébastien Helleu 723232ac35 ci: bump Lua from 5.3 to 5.4 2026-04-30 00:17:54 +02:00
Sébastien Helleu 5f5f9f35e7 debian: bump Lua from 5.3 to 5.4 2026-04-30 00:17:23 +02:00
Sébastien Helleu 86a6c4f5ff debian: remove patch for build of Debian packages on Ubuntu Focal 2026-04-29 23:58:22 +02:00
Sébastien Helleu 3082c2e4e5 core: add condition on connected relay api clients in default value of option weechat.look.hotlist_add_conditions 2026-04-28 21:30:51 +02:00
Sébastien Helleu 062109e33d relay: add protocol "api" in description of info "relay_client_count" 2026-04-28 21:22:38 +02:00
Sébastien Helleu fd88c9a45b relay: remove protocols from the plugin description 2026-04-28 21:19:10 +02:00
Sébastien Helleu a8c4d5604e ci: bump poexam to version 0.0.9 2026-04-16 20:32:06 +02:00
Emir SARI ef4c657157 core: update Turkish translations
Signed-off-by: Emir SARI <emir_sari@icloud.com>
2026-04-15 13:20:06 +02:00
Sébastien Helleu 0c29e5a630 core: fix possible integer truncation in functions eval_string_cut and eval_string_repeat 2026-04-10 21:48:56 +02:00
Sébastien Helleu 77a0dbfd44 core: remove dead code 2026-04-10 21:48:37 +02:00
weechatter afa42ec851 core: update German translations 2026-04-06 11:29:02 +02:00
Sébastien Helleu 8da86431da logger: fix file size example in /help logger.file.rotation_size_max 2026-04-05 21:50:41 +02:00
Sébastien Helleu 3d7f988973 core: use util functions to parse integers in bar functions 2026-04-05 16:53:05 +02:00
Sébastien Helleu 5ed21d7dad core: use util functions to parse integers in gui curses functions 2026-04-05 15:33:33 +02:00
Sébastien Helleu 54eff44d74 core: check error ERANGE after call to strtoul in function util_version_number 2026-04-05 15:33:33 +02:00
Sébastien Helleu 83d760deae core: check error ERANGE after call to strtoull in function util_parse_delay 2026-04-05 15:33:33 +02:00
Sébastien Helleu 5147b19e51 core: use function util_parse_longlong in function util_parse_time 2026-04-05 15:33:33 +02:00
Sébastien Helleu 50959eeb01 core: use function util_parse_longlong in upgrade functions 2026-04-05 15:33:33 +02:00
Sébastien Helleu ac2ed69c0b core: use function util_parse_longlong in function sys_setrlimit 2026-04-05 15:33:33 +02:00
Sébastien Helleu 2f7f707df0 core: use function util_parse_longlong in function string_parse_size 2026-04-05 15:33:33 +02:00
Sébastien Helleu 94e5de4836 core: use function util_parse_int in function string_get_priority_and_name 2026-04-05 15:33:33 +02:00
Sébastien Helleu 38f9a5587f core: use util functions to parse integers in function network_connect_child_read_cb 2026-04-05 15:33:33 +02:00
Sébastien Helleu 6432711798 core: use util functions to parse integers in hook functions 2026-04-05 15:33:33 +02:00
Sébastien Helleu 81c23a5134 core: use util functions to parse integers in hdata functions 2026-04-05 15:33:33 +02:00
Sébastien Helleu 6336c22293 core: use util functions to parse integers in eval functions 2026-04-05 15:33:33 +02:00
Sébastien Helleu 6658122b03 core: use util functions to parse integers in config functions 2026-04-05 15:33:33 +02:00
Sébastien Helleu 7e8f8b5178 core: use util functions to parse integers in core commands 2026-04-05 15:33:33 +02:00
Sébastien Helleu d00e334738 core: add missing non-breaking spaces in French translations 2026-04-05 09:58:44 +02:00
Sébastien Helleu f48b0bae2e core: fix URL in /help relay.network.websocket_allowed_origins (Polish) 2026-04-02 19:59:25 +02:00
Sébastien Helleu d3d18cd4c2 core: add missing double quotes in /help relay.network.websocket_allowed_origins (German) 2026-04-02 19:30:28 +02:00
Sébastien Helleu cead39b52f core: add /mute in default command for key alt+"=" (toggle filters)
Since v4.8.0 and commit d0298b4738, toggling
filters with `/filter toggle` displays a message on core buffer.

This is OK when running the command manually, but not when pressing the key
alt+"=".
2026-03-31 19:12:46 +02:00
Emil Velikov 7d88e53182 Bump required zstd to v1.4.0
Bump the requirement to v1.4.0, which means we can remove all the ifdef
guards.

It was released over 6 years ago, with latest release being 1.5.7.

The oldest distributions we target Ubuntu 20.04 and Debian Bullseye,
have 1.4.4 and 1.4.8 respectively.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
2026-03-29 18:39:02 +02:00
Luc Schrijvers 8fe741e057 Build fix for Haiku 2026-03-29 18:31:27 +02:00
LuK1337 b6ef936cca cmake: enable position independent code (PIE)
Fixes the following build error when compiling Fedora 45 RPM:

/usr/bin/ld.bfd: tests/unit/CMakeFiles/tests.dir/tests.cpp.o: relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld.bfd: failed to set dynamic section sizes: bad value
collect2: error: ld returned 1 exit status

See: https://cmake.org/cmake/help/latest/prop_tgt/POSITION_INDEPENDENT_CODE.html
     https://cmake.org/cmake/help/latest/policy/CMP0083.html
2026-03-29 18:28:48 +02:00
Sébastien Helleu 7c2bae9faf ci: add tests with Fedora 43 2026-03-29 12:36:30 +02:00
Sébastien Helleu 2b48eba784 Version 4.10.0-dev 2026-03-29 10:24:55 +02:00
235 changed files with 14875 additions and 2871 deletions
+76 -19
View File
@@ -36,7 +36,7 @@ env:
libcurl4-gnutls-dev
libgcrypt20-dev
libgnutls28-dev
liblua5.3-dev
liblua5.4-dev
libncurses-dev
libperl-dev
libphp-embed
@@ -51,7 +51,7 @@ env:
ruby-pygments.rb
tcl8.6-dev
zlib1g-dev
WEECHAT_DEPS_ROCKYLINUX: >-
WEECHAT_DEPS_REDHAT: >-
asciidoctor
aspell-devel
cjson-devel
@@ -115,10 +115,13 @@ jobs:
checks:
env:
POEXAM_VERSION: "0.0.12"
strategy:
matrix:
os:
- ubuntu-24.04
- ubuntu-26.04
runs-on: ${{ matrix.os }}
@@ -130,13 +133,20 @@ jobs:
run: |
sudo apt-get update -qq
sudo apt-get --yes --no-install-recommends install ${{ env.CHECK_DEPS_UBUNTU }}
pipx install msgcheck ruff
cargo install --version 0.0.8 poexam
pipx install ruff
- name: Check gettext files (msgcheck)
run: msgcheck po/*.po
- name: Cache poexam
id: cache-poexam
uses: actions/cache@v6
with:
path: ~/.cargo/bin/poexam
key: poexam-${{ env.POEXAM_VERSION }}-${{ runner.os }}
- name: Check gettext files (poexam)
- name: Install poexam
if: steps.cache-poexam.outputs.cache-hit != 'true'
run: cargo install --version "$POEXAM_VERSION" poexam
- name: Check gettext files
run: poexam check --file-stats --rule-stats
- name: Check shell and Python scripts
@@ -153,7 +163,7 @@ jobs:
strategy:
matrix:
os:
- ubuntu-24.04
- ubuntu-26.04
config:
- name: "gcc"
cc: "gcc"
@@ -194,6 +204,8 @@ jobs:
name: "install (${{ matrix.os }}, ${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
env:
PHP_INI_SCAN_DIR: /tmp/php-noscan # embed PHP loads no add-on extensions (see #2009)
steps:
@@ -203,8 +215,7 @@ jobs:
run: |
sudo apt-get update -qq
sudo apt-get --yes --no-install-recommends install ${{ env.WEECHAT_DEPS_UBUNTU }}
# uninstall php imagick as is causes a crash when loading php plugin (see #2009)
sudo apt-get --yes purge php8.3-imagick
mkdir -p /tmp/php-noscan
pipx install schemathesis
- name: Build and run tests
@@ -253,12 +264,58 @@ jobs:
lcov --list coverage.info
bash <(curl -s https://codecov.io/bash) -f coverage.info || echo 'Codecov error'
install_fedora:
strategy:
matrix:
os:
- ubuntu-26.04
config:
- name: "gcc"
cc: "gcc"
cxx: "g++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON"
- name: "clang"
cc: "clang"
cxx: "clang++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON"
name: "install (fedora:43, ${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
container:
image: fedora:43
steps:
- uses: actions/checkout@v6
- name: Install dependencies
run: dnf install -y ${{ env.WEECHAT_DEPS_REDHAT }}
- name: Build and run tests
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
run: ./tools/build_test.sh ${{ matrix.config.buildargs }}
- name: Run WeeChat
env:
TERM: xterm-256color
run: |
weechat --help
weechat-curses --help
weechat --version
weechat --build-info
weechat --colors
weechat --license
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
install_rockylinux:
strategy:
matrix:
os:
- ubuntu-24.04
- ubuntu-26.04
config:
- name: "gcc"
cc: "gcc"
@@ -280,9 +337,11 @@ jobs:
- name: Install dependencies
run: |
dnf install -y epel-release
dnf install -y epel-release dnf-plugins-core
dnf config-manager --set-enabled crb
dnf install -y ${{ env.WEECHAT_DEPS_ROCKYLINUX }}
# pin a working ruby stream (ruby:4.0 has broken module metadata on Rocky 9.8)
dnf module enable -y ruby:3.3
dnf install -y ${{ env.WEECHAT_DEPS_REDHAT }}
- name: Build and run tests
env:
@@ -307,7 +366,7 @@ jobs:
strategy:
matrix:
os:
- ubuntu-24.04
- ubuntu-26.04
config:
# - name: "gcc"
# cc: "gcc"
@@ -402,7 +461,7 @@ jobs:
strategy:
matrix:
os:
- ubuntu-24.04
- ubuntu-26.04
runs-on: ${{ matrix.os }}
@@ -439,7 +498,7 @@ jobs:
strategy:
matrix:
os:
- ubuntu-24.04
- ubuntu-26.04
runs-on: ${{ matrix.os }}
@@ -457,8 +516,6 @@ jobs:
run: |
sudo apt-get update -qq
sudo apt-get --yes --no-install-recommends install ${{ env.WEECHAT_DEPS_UBUNTU }}
# uninstall php imagick as is causes a crash when loading php plugin (see #2009)
sudo apt-get --yes purge php8.3-imagick
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
+1
View File
@@ -235,6 +235,7 @@ sys
tThe
tcl
tg
themable
tls
tlscertkey
toggleautoload
+7
View File
@@ -69,6 +69,9 @@ autorejoin
away
away-notify
backspace
backup
backup-
backups
bare
bash
beep
@@ -529,6 +532,9 @@ tcl
term
text
tg
themable
theme
themes
time
timeout
timer
@@ -573,6 +579,7 @@ users
usr
util
valer
valgrind
verbose
verify
versiongit
+6
View File
@@ -7,9 +7,15 @@ select = [
"checks",
]
ignore = [
"acronyms",
"brackets",
"double-quotes",
"double-words",
"functions",
"html-tags",
"paths",
"unchanged",
"urls",
]
path_words = "."
langs = [
+67
View File
@@ -6,6 +6,73 @@ SPDX-License-Identifier: GPL-3.0-or-later
# WeeChat ChangeLog
## Version 4.10.0 (under dev)
### Changed
- core: add condition on connected relay api clients in default value of option weechat.look.hotlist_add_conditions
- core: add `/mute` in default command for key `Alt`+`=` (toggle filters)
- api: change type of parameter "pos_option_name" to "const char **" in function config_search_with_string
- relay/api: add field "last_read_line_id" in GET /api/buffers
### Added
- core: add command `/theme`
- core: add built-in "light" theme
- core: add `themable` flag on configuration options
- core: add options weechat.look.theme and weechat.look.theme_backup
- api: add function theme_register
- fset: add filter `t:themable`
- relay/api: add resource `GET /api/scripts`
- relay: add option relay.network.unix_socket_permissions ([#2317](https://github.com/weechat/weechat/issues/2317))
- script: add info "script_languages"
### Fixed
- core: fix option weechat.look.color_real_white not applied when color is "white" on 16+ colors terminals ([#1742](https://github.com/weechat/weechat/issues/1742))
- core: fix buffer overflow in connection to SOCKS5 proxy ([#2325](https://github.com/weechat/weechat/issues/2325))
- api: fix infinite loop in function string_replace when the search string is empty
- irc: fix tag in message with list of names when joining a channel
- fset: remove error displayed in core buffer when clicking with the mouse below the last option displayed
- guile, lua, perl, python, ruby, tcl: fix conversion of dates in the API functions
- irc: limit size of data received from the server to prevent memory exhaustion
- irc: fix out-of-bounds read on incoming DCC command with a quoted filename ending the message ([#2322](https://github.com/weechat/weechat/issues/2322))
- irc: fix conversion of dates in received messages
- relay: limit size of decompressed websocket frame with permessage-deflate to prevent memory exhaustion ([GHSA-v2v4-45wm-5cr3](https://github.com/weechat/weechat/security/advisories/GHSA-v2v4-45wm-5cr3), [CVE-2026-53524](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-53524))
- relay: limit size of received websocket frame and HTTP body to prevent memory exhaustion
- relay: limit size of partial message received while reading an HTTP request to prevent memory exhaustion
- relay: fix timing attack on password authentication ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc), [CVE-2026-53525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-53525))
- relay: fix out-of-bounds read in dump of data ([#2324](https://github.com/weechat/weechat/issues/2324))
- relay/api: fix memory leak in resources "handshake", "input" and "completion"
- relay: fix read of uncompressed websocket frame ([#2331](https://github.com/weechat/weechat/issues/2331))
- api, relay: fix timing attack on TOTP validation ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc), [CVE-2026-53525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-53525))
- xfer: replace directory separator in remote nick by underscore in download filename to prevent writing the file outside the download directory ([#2321](https://github.com/weechat/weechat/issues/2321))
- xfer: fix out-of-bounds read when receiving empty line in DCC chat ([#2323](https://github.com/weechat/weechat/issues/2323))
- xfer: fix out-of-bounds write in xfer file transfer resume ([#2326](https://github.com/weechat/weechat/issues/2326))
## Version 4.9.2 (2026-06-07)
### Fixed
- api: fix infinite loop in function string_replace when the search string is empty
- irc: limit size of data received from the server to prevent memory exhaustion
- irc: fix out-of-bounds read on incoming DCC command with a quoted filename ending the message ([#2322](https://github.com/weechat/weechat/issues/2322))
- relay: limit size of received websocket frame and HTTP body to prevent memory exhaustion
- relay: limit size of partial message received while reading an HTTP request to prevent memory exhaustion
- relay: fix out-of-bounds read in dump of data ([#2324](https://github.com/weechat/weechat/issues/2324))
- xfer: replace directory separator in remote nick by underscore in download filename to prevent writing the file outside the download directory ([#2321](https://github.com/weechat/weechat/issues/2321))
- xfer: fix out-of-bounds read when receiving empty line in DCC chat ([#2323](https://github.com/weechat/weechat/issues/2323))
## Version 4.9.1 (2026-05-31)
### Fixed
- core: fix option weechat.look.color_real_white not applied when color is "white" on 16+ colors terminals ([#1742](https://github.com/weechat/weechat/issues/1742))
- irc: fix tag in message with list of names when joining a channel
- relay: limit size of decompressed websocket frame with permessage-deflate to prevent memory exhaustion ([GHSA-v2v4-45wm-5cr3](https://github.com/weechat/weechat/security/advisories/GHSA-v2v4-45wm-5cr3), [CVE-2026-53524](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-53524))
- relay: fix timing attack on password authentication ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc), [CVE-2026-53525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-53525))
- api, relay: fix timing attack on TOTP validation ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc), [CVE-2026-53525](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-53525))
## Version 4.9.0 (2026-03-29)
### Changed
+2 -1
View File
@@ -28,6 +28,7 @@ project(weechat C)
# CMake options
set(CMAKE_VERBOSE_MAKEFILE OFF)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_SKIP_RPATH ON)
# compiler options
@@ -245,7 +246,7 @@ list(APPEND EXTRA_LIBS ${ZLIB_LIBRARY})
# Check for zstd
if(ENABLE_ZSTD)
pkg_check_modules(LIBZSTD REQUIRED libzstd)
pkg_check_modules(LIBZSTD REQUIRED libzstd>=1.4.0)
include_directories(${LIBZSTD_INCLUDE_DIRS})
list(APPEND EXTRA_LIBS ${LIBZSTD_LDFLAGS})
add_definitions(-DHAVE_ZSTD)
+1 -2
View File
@@ -19,8 +19,7 @@ First, some basic things:
### Security reports
Please **DO NOT** file a GitHub issue for security related problems, but send an
email to [security@weechat.org](mailto:security@weechat.org) instead.
Please **DO NOT** file a GitHub issue for security related problems; see [SECURITY.md](SECURITY.md) instead.
### Required info
+4 -4
View File
@@ -27,11 +27,11 @@ Homepage: [https://weechat.org/](https://weechat.org/)
## Features
- **Modular chat client**: WeeChat has a lightweight core and optional [plugins](https://weechat.org/doc/weechat/user/#plugins). All plugins (including [IRC](https://weechat.org/doc/weechat/user/#irc)) are independent and can be unloaded.
- **Multi-platform**: WeeChat runs on GNU/Linux, *BSD, GNU/Hurd, Haiku, macOS and Windows (Bash/Ubuntu and Cygwin).
- **Multi-protocols**: WeeChat is designed to support multiple protocols by plugins, like IRC.
- **Multi-platform**: WeeChat runs on GNU/Linux, *BSD, GNU/Hurd, Haiku, macOS and Windows (WSL and Cygwin).
- **Multi-protocol**: WeeChat is designed to support multiple protocols via plugins, like IRC.
- **Standards-compliant**: the IRC plugin is compliant with RFCs [1459](https://datatracker.ietf.org/doc/html/rfc1459), [2810](https://datatracker.ietf.org/doc/html/rfc2810), [2811](https://datatracker.ietf.org/doc/html/rfc2811), [2812](https://datatracker.ietf.org/doc/html/rfc2812), [2813](https://datatracker.ietf.org/doc/html/rfc2813) and [7194](https://datatracker.ietf.org/doc/html/rfc7194).
- **Small, fast, and very light**: the core is and should stay as light and fast as possible.
- **Customizable and extensible**: there are a lot of options to customize WeeChat, and it is extensible with C plugins and [scripts](https://weechat.org/scripts/) ([Perl](https://weechat.org/scripts/language/perl/), [Python](https://weechat.org/scripts/language/python/), [Ruby](https://weechat.org/scripts/language/ruby), [Lua](https://weechat.org/scripts/language/lua/), [Tcl](https://weechat.org/scripts/language/tcl/), [Scheme](https://weechat.org/scripts/language/guile/), [JavaScript](https://weechat.org/scripts/language/javascript/) and [PHP](https://weechat.org/scripts/language/php/)).
- **Customizable and extensible**: there are a lot of options to customize WeeChat, and it is extensible with C plugins and [scripts](https://weechat.org/scripts/) ([Perl](https://weechat.org/scripts/language/perl/), [Python](https://weechat.org/scripts/language/python/), [Ruby](https://weechat.org/scripts/language/ruby/), [Lua](https://weechat.org/scripts/language/lua/), [Tcl](https://weechat.org/scripts/language/tcl/), [Scheme](https://weechat.org/scripts/language/guile/), [JavaScript](https://weechat.org/scripts/language/javascript/) and [PHP](https://weechat.org/scripts/language/php/)).
- **Fully documented**: there is comprehensive [documentation](https://weechat.org/doc/weechat/), which is [translated](https://weechat.org/doc/weechat/dev/#translations) into several languages.
- **Developed from scratch**: WeeChat was built from scratch and is not based on any other client.
- **Free software**: WeeChat is released under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html).
@@ -49,7 +49,7 @@ For detailed instructions, please check the [WeeChat user's guide](https://weech
## Semantic versioning
WeeChat is following a "practical" semantic versioning, see file [CONTRIBUTING.md](CONTRIBUTING.md#semantic-versioning).
WeeChat follows "practical" semantic versioning; see [CONTRIBUTING.md](CONTRIBUTING.md#semantic-versioning).
## Copyright
+26
View File
@@ -0,0 +1,26 @@
<!--
SPDX-FileCopyrightText: 2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
-->
# Security Policy
## Supported versions
Only the latest stable version of WeeChat is supported.
| Version | Supported | Notes |
| -------------- | ------------------ | --------------------------------------------------- |
| Latest stable | :white_check_mark: | Fully supported. |
| Older releases | :x: | Not supported. Contact us in case of specific need. |
However, we may help to backport fixes on older versions, especially when they are used in released distributions with no way to upgrade to the latest stable release (please contact us).
## Reporting a vulnerability
Please report security issues using <https://github.com/weechat/weechat/security/advisories/new>.
Alternatively, if you are not able to use this form, you can send an email to [security@weechat.org](mailto:security@weechat.org) instead.
We will investigate all legitimate reports and do our best to quickly fix the problem.
+13
View File
@@ -13,6 +13,19 @@ When upgrading from version X to Y, please read and apply all instructions from
For a list of all changes in each version, please see [CHANGELOG.md](CHANGELOG.md).
## Version 4.10.0
### Command on mouse click in fset buffer
The command executed when clicking in the fset buffer has been updated to prevent
errors on the core buffer when the click is done below the last option.
To reset the key and use the new default command:
```text
/reset weechat.key_mouse.@chat(fset.fset):button1
```
## Version 4.8.0
### IRC temporary servers
+1 -1
View File
@@ -12,7 +12,7 @@ Build-Depends:
libperl-dev,
python3-dev,
libaspell-dev,
liblua5.3-dev,
liblua5.4-dev,
tcl8.6-dev,
guile-3.0-dev,
php-dev, libphp-embed, libargon2-dev, libsodium-dev,
+1 -1
View File
@@ -12,7 +12,7 @@ Build-Depends:
libperl-dev,
python3-dev,
libaspell-dev,
liblua5.3-dev,
liblua5.4-dev,
tcl8.6-dev,
guile-3.0-dev,
php-dev, libphp-embed, libargon2-dev, libsodium-dev,
+36 -11
View File
@@ -30,12 +30,37 @@ if(ENABLE_MAN OR ENABLE_DOC)
set(SCRIPTING_LANG de en fr it ja pl sr)
set(FAQ_LANG de en es fr it ja pl sr)
set(QUICKSTART_LANG cs de en es fr it ja pl ru sr)
set(RELAY_API_LANG en fr)
set(RELAY_API_LANG en fr sr)
set(RELAY_WEECHAT_LANG en fr ja sr)
set(DEV_LANG en fr ja sr)
find_package(Asciidoctor)
if(ASCIIDOCTOR_FOUND)
# Asciidoctor embeds the light style automatically; the dark stylesheet
# is generated below and scoped via @media in docinfo.html.in.
set(PYGMENTS_LIGHT_STYLE "default")
set(PYGMENTS_DARK_STYLE "monokai")
find_program(PYGMENTIZE_EXECUTABLE pygmentize)
set(PYGMENTS_DARK_CSS "")
if(PYGMENTIZE_EXECUTABLE)
execute_process(
COMMAND "${PYGMENTIZE_EXECUTABLE}" -O "classprefix=tok-" -f html -a "pre.pygments" -S "${PYGMENTS_DARK_STYLE}"
OUTPUT_VARIABLE PYGMENTS_DARK_CSS
RESULT_VARIABLE _pygmentize_result
)
if(NOT _pygmentize_result EQUAL 0)
message(WARNING "Failed to generate pygments CSS for dark theme (style: ${PYGMENTS_DARK_STYLE}); doc will be built without dark theme syntax highlighting")
set(PYGMENTS_DARK_CSS "")
endif()
else()
message(WARNING "pygmentize not found (install python3-pygments); doc will be built without syntax highlighting colors")
endif()
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html.in"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
@ONLY
)
# common asciidoctor arguments
set(ASCIIDOCTOR_ARGS
-v
@@ -46,8 +71,8 @@ if(ENABLE_MAN OR ENABLE_DOC)
-a revnumber="${VERSION}"
-a sectanchors
-a source-highlighter=pygments
-a pygments-style=native
-a docinfodir="${CMAKE_CURRENT_SOURCE_DIR}"
-a pygments-style=${PYGMENTS_LIGHT_STYLE}
-a docinfodir="${CMAKE_CURRENT_BINARY_DIR}"
-a autogendir="${CMAKE_CURRENT_BINARY_DIR}/autogen"
)
@@ -205,7 +230,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_user.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_USER_ARGS} -o "weechat_user.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_user.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_user.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/cmdline_options.${lang}.adoc"
@@ -226,7 +251,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_plugin_api.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_PLUGIN_API_ARGS} -o "weechat_plugin_api.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_plugin_api.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_plugin_api.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
doc-autogen
@@ -250,7 +275,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_scripting.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_SCRIPTING_ARGS} -o "weechat_scripting.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_scripting.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_scripting.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
doc-autogen
@@ -268,7 +293,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_faq.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_FAQ_ARGS} -o "weechat_faq.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_faq.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_faq.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
@@ -283,7 +308,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_quickstart.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_QUICKSTART_ARGS} -o "weechat_quickstart.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_quickstart.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_quickstart.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
@@ -298,7 +323,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_api.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_RELAY_API_ARGS} -o "weechat_relay_api.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_relay_api.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_relay_api.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/relay.${lang}.adoc"
@@ -314,7 +339,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_weechat.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_RELAY_WEECHAT_ARGS} -o "weechat_relay_weechat.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_relay_weechat.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_relay_weechat.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/relay.${lang}.adoc"
@@ -330,7 +355,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_DEV_ARGS} -o "weechat_dev.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_dev.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_dev.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+147 -1
View File
@@ -212,7 +212,7 @@ WeeChat optional sind:
| asciidoctor | ≥ 1.5.4
| zum Erstellen der man page und der Dokumentation.
| ruby-pygments.rb |
| python3-pygments, ruby-pygments.rb |
| Build Dokumentation.
| libcpputest-dev | ≥ 3.4
@@ -2197,6 +2197,152 @@ Um der Vordergrundfarbe des Terminals das Attribut "fett" zuzuordnen:
/set weechat.color.status_time *99999
----
// TRANSLATION MISSING
[[themes]]
=== Themen
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme del mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
+13 -26
View File
@@ -26,9 +26,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
--header-details-color: #aaa;
--border: 1px solid #444;
--code-bg-color: #252525;
--pre-color: #ddd;
--pre-bg-color: #202020;
--pre-code-bg-color: #202020;
--keyseq-color: #777;
--kbd-bg-color: #252525;
--kbd-border: 1px solid #333;
@@ -39,7 +36,11 @@ SPDX-License-Identifier: GPL-3.0-or-later
--icon-caution-color: #bf3400;
--icon-important-color: #f44336;
--mark-bg-color: #007;
--pre-bevel-light: #3e3e3e;
--pre-bevel-dark: #2a2a2a;
--pre-bevel-bg: #1f1f1f;
}
@PYGMENTS_DARK_CSS@
}
@media (not (prefers-color-scheme: dark)), (prefers-color-scheme: light) {
@@ -59,9 +60,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
--border: 1px solid #dddddf;
--code-bg-color: #f7f7f8;
--keyseq-color: #333c;
--pre-color: #353535;
--pre-bg-color: #f7f7f8;
--pre-code-bg-color: #202020;
--kbd-bg-color: #f7f7f7;
--kbd-border: 1px solid #ccc;
--kbd-box-shadow: 0 1px 0 rgba(0, 0, 0, .2), inset 0 0 0 .1em #fff;
@@ -71,6 +69,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
--icon-caution-color: #ff0000;
--icon-important-color: #bf0000;
--mark-bg-color: #9df;
--pre-bevel-light: #e5e5e7;
--pre-bevel-dark: #b4b4b8;
--pre-bevel-bg: #f6f6f7;
}
}
@@ -145,6 +146,10 @@ code, .prettyprint {
pre {
color: var(--pre-color) !important;
border: 1px solid;
border-color: var(--pre-bevel-light) var(--pre-bevel-dark) var(--pre-bevel-dark) var(--pre-bevel-light);
border-radius: 3px;
line-height: 1.25;
}
pre > code {
@@ -162,8 +167,8 @@ kbd {
color: var(--body-color);
}
.literalblock pre, .listingblock > .content > pre:not(.highlight), .listingblock > .content > pre[class="highlight"], .listingblock > .content > pre[class^="highlight "] {
background-color: var(--pre-bg-color);
.literalblock pre, .listingblock > .content > pre:not(.highlight), .listingblock > .content > pre[class="highlight"], .listingblock > .content > pre[class^="highlight "], pre.pygments {
background-color: var(--pre-bg-color, var(--pre-bevel-bg));
color: var(--body-color);
}
@@ -200,24 +205,6 @@ mark {
color: var(--body-color);
}
/* syntax highlighting tuning */
pre.pygments {
color: #ddd !important;
}
pre.pygments .tok-cp {
color: #44cfaf;
}
pre.pygments .tok-nc, pre.pygments .tok-nf {
color: #649fef;
}
pre.pygments .tok-gu, pre.pygments .tok-nc, pre.pygments .tok-nn {
text-decoration: none;
}
/* asciidoctor styles tuning */
#header, #content, #footnotes, #footer {
+94 -9
View File
@@ -4348,7 +4348,7 @@ Prototype:
[source,c]
----
int weechat_mkdir_home (char *directory, int mode);
int weechat_mkdir_home (const char *directory, int mode);
----
Arguments:
@@ -4395,7 +4395,7 @@ Prototype:
[source,c]
----
int weechat_mkdir (char *directory, int mode);
int weechat_mkdir (const char *directory, int mode);
----
Arguments:
@@ -4436,7 +4436,7 @@ Prototype:
[source,c]
----
int weechat_mkdir_parents (char *directory, int mode);
int weechat_mkdir_parents (const char *directory, int mode);
----
Arguments:
@@ -7367,7 +7367,7 @@ section = weechat.config_search_section(config_file, "section")
==== config_new_option
_Updated in 1.5, 4.1.0._
_Updated in 1.5, 4.1.0, 4.10.0._
Create a new option in a section of a configuration file.
@@ -7413,7 +7413,9 @@ Arguments:
option name (the value of parent option will be displayed in `/set` command
output if this option is "null"), the syntax is then:
"name << file.section.option"
* _type_: type of option:
* _type_: type of option; any type can be suffixed with `+|themable+` to mark
the option as themable, so that it can be set by the `/theme` command
(options of type _color_ are always themable) _(WeeChat ≥ 4.10.0)_:
** _boolean_: boolean value (on/off)
** _integer_: integer value
** _string_: string value
@@ -7499,7 +7501,7 @@ struct t_config_option *option_int =
/* string */
struct t_config_option *option_str =
weechat_config_new_option (config_file, section, "option_str", "string",
weechat_config_new_option (config_file, section, "option_str", "string|themable",
"My option, type string",
NULL,
0, 0,
@@ -7575,7 +7577,7 @@ option_int = weechat.config_new_option(config_file, section, "option_int", "inte
"", "",
"", "")
option_str = weechat.config_new_option(config_file, section, "option_str", "string",
option_str = weechat.config_new_option(config_file, section, "option_str", "string|themable",
"My option, type string",
"", 0, 0, "test", "test", 1,
"option_str_check_value_cb", "",
@@ -7709,7 +7711,7 @@ void weechat_config_search_with_string (const char *option_name,
struct t_config_file **config_file,
struct t_config_section **section,
struct t_config_option **option,
char **pos_option_name);
const char **pos_option_name);
----
Arguments:
@@ -7731,7 +7733,7 @@ C example:
struct t_config_file *ptr_config_file;
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
char *option_name;
const char *option_name;
weechat_config_search_with_string ("file.section.option",
&ptr_config_file,
@@ -9627,6 +9629,89 @@ elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
# ...
----
[[themes]]
=== Themes
Functions to contribute color (and other themable option) overrides to
built-in themes. See the
link:weechat_user.en.html#themes[user's guide / Themes] section for the
end-user side and the `+/theme+` command.
==== theme_register
_WeeChat ≥ 4.10.0._
Register a contribution of option overrides under a named theme. The
caller's plugin is the owner of the contribution; subsequent calls
with the same theme name from the same plugin merge into the existing
contribution (later keys win for duplicates).
When the calling plugin is unloaded, all its contributions are
automatically dropped from every theme.
Prototype:
[source,c]
----
struct t_theme *weechat_theme_register (const char *name,
struct t_hashtable *overrides);
----
Arguments:
* _name_: theme name (for example `+light+` or a custom name)
* _overrides_: hashtable mapping full option names
(e.g. `+irc.color.input_nick+`) to their string values; the caller
retains ownership and may free the hashtable right after the call
Return value:
* pointer to the registered theme (existing or newly created), NULL on
error
C example:
[source,c]
----
struct t_hashtable *overrides = weechat_hashtable_new (
8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (overrides)
{
weechat_hashtable_set (overrides, "irc.color.input_nick", "cyan");
weechat_hashtable_set (overrides, "irc.color.topic_old", "darkgray");
weechat_theme_register ("light", overrides);
weechat_hashtable_free (overrides);
}
----
Script (Python):
[source,python]
----
# prototype
def theme_register(name: str, overrides: Dict[str, str]) -> str: ...
# example
weechat.theme_register("light", {
"irc.color.input_nick": "cyan",
"irc.color.topic_old": "darkgray",
})
----
[NOTE]
Only options that have the _themable_ flag will be set by `/theme apply`.
All `*.color.*` options are themable by default; string options that
hold `+${color:...}+` references are explicitly opted in. Entries
targeting non-themable options are silently skipped at apply-time with
a warning logged to the _core_ buffer.
[NOTE]
When called from a script, the contribution is automatically dropped
when the script unloads (no manual cleanup is needed).
[[key_bindings]]
=== Key bindings
+64 -5
View File
@@ -541,7 +541,8 @@ HTTP/1.1 200 OK
"plugin": "core",
"name": "weechat"
},
"keys": []
"keys": [],
"last_read_line_id": -1
},
{
"id": 1709932823423765,
@@ -571,7 +572,8 @@ HTTP/1.1 200 OK
"tls_version": "TLS1.3",
"host": "~alice@example.com"
},
"keys": []
"keys": [],
"last_read_line_id": -1
},
{
"id": 1709932823649069,
@@ -599,7 +601,8 @@ HTTP/1.1 200 OK
"nick": "alice",
"host": "~alice@example.com"
},
"keys": []
"keys": [],
"last_read_line_id": -1
}
]
----
@@ -655,7 +658,8 @@ HTTP/1.1 200 OK
"message": "Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, javascript, logger, lua, perl, php, python, relay, ruby, script, spell, tcl, trigger, typing, xfer",
"tags": []
}
]
],
"last_read_line_id": -1
}
----
@@ -702,6 +706,7 @@ HTTP/1.1 200 OK
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1,
"nicklist_root": {
"id": 0,
"parent_group_id": -1,
@@ -900,7 +905,8 @@ HTTP/1.1 200 OK
"key": "up",
"command": "/fset -up"
}
]
],
"last_read_line_id": -1
}
----
@@ -1028,6 +1034,13 @@ Path parameters:
confused with the buffer number, which is different)
* `buffer_name` (string, **required**): buffer name
Query parameters:
* `colors` (string, optional, default: `ansi`): how to return strings with color codes:
** `ansi`: return ANSI color codes
** `weechat`: return WeeChat internal color codes
** `strip`: strip colors
Request example: get nicks of a buffer:
[source,shell]
@@ -1173,6 +1186,51 @@ HTTP/1.1 200 OK
]
----
[[resource_scripts]]
=== Scripts
Return loaded scripts (all languages).
Endpoint:
----
GET /api/scripts
----
Request example:
[source,shell]
----
curl -L -u 'plain:secret_password' 'https://localhost:9000/api/scripts'
----
Response:
[source,http]
----
HTTP/1.1 200 OK
----
[source,json]
----
[
{
"name": "highmon.pl",
"version": "2.7",
"description": "Highlight Monitor",
"author": "KenjiE20",
"license": "GPL3"
},
{
"name": "go.py",
"version": "3.1.1",
"description": "Quick jump to buffers",
"author": "Sébastien Helleu <flashcode@flashtux.org>",
"license": "GPL3"
}
]
----
[[resource_input]]
=== Input
@@ -1504,6 +1562,7 @@ Body types that can be returned:
* `nick_group` (object)
* `nick` (object)
* `hotlist` (object)
* `scripts` (array)
* `ping` (object)
[TIP]
+146 -1
View File
@@ -210,7 +210,7 @@ WeeChat:
| asciidoctor | ≥ 1.5.4
| Build man page and documentation.
| ruby-pygments.rb |
| python3-pygments, ruby-pygments.rb |
| Build documentation.
| libcpputest-dev | ≥ 3.4
@@ -2185,6 +2185,151 @@ Example of bold with terminal foreground color:
/set weechat.color.status_time *99999
----
[[themes]]
=== Themes
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme del mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
+101 -9
View File
@@ -4424,7 +4424,7 @@ Prototype :
[source,c]
----
int weechat_mkdir_home (char *directory, int mode);
int weechat_mkdir_home (const char *directory, int mode);
----
Paramètres :
@@ -4471,7 +4471,7 @@ Prototype :
[source,c]
----
int weechat_mkdir (char *directory, int mode);
int weechat_mkdir (const char *directory, int mode);
----
Paramètres :
@@ -4512,7 +4512,7 @@ Prototype :
[source,c]
----
int weechat_mkdir_parents (char *directory, int mode);
int weechat_mkdir_parents (const char *directory, int mode);
----
Paramètres :
@@ -7488,7 +7488,7 @@ section = weechat.config_search_section(config_file, "section")
==== config_new_option
_Mis à jour dans la 1.5, 4.1.0._
_Mis à jour dans la 1.5, 4.1.0, 4.10.0._
Créer une nouvelle option dans une section d'un fichier de configuration.
@@ -7534,7 +7534,10 @@ Paramètres :
d'une option parente (la valeur de l'option parente sera affichée dans la
sortie de `/set` si cette option est "null"), la syntaxe est alors :
"name << file.section.option"
* _type_ : type de l'option :
* _type_ : type de l'option ; n'importe quel type peut être suffixé par
`+|themable+` pour rendre l'option modifiable par un thème, afin qu'elle
puisse être définie par la commande `/theme` (les options de type _color_
sont toujours modifiables par un thème) _(WeeChat ≥ 4.10.0)_ :
** _boolean_ : valeur booléenne (on/off)
** _integer_ : valeur entière
** _string_ : une chaîne de caractères
@@ -7625,7 +7628,7 @@ struct t_config_option *option_int =
/* chaîne */
struct t_config_option *option_str =
weechat_config_new_option (config_file, section, "option_str", "string",
weechat_config_new_option (config_file, section, "option_str", "string|themable",
"Mon option, type chaîne",
NULL,
0, 0,
@@ -7701,7 +7704,7 @@ option_int = weechat.config_new_option(config_file, section, "option_int", "inte
"", "",
"", "")
option_str = weechat.config_new_option(config_file, section, "option_str", "string",
option_str = weechat.config_new_option(config_file, section, "option_str", "string|themable",
"Mon option, type chaîne",
"", 0, 0, "test", "test", 1,
"option_str_check_value_cb", "",
@@ -7838,7 +7841,7 @@ void weechat_config_search_with_string (const char *option_name,
struct t_config_file **config_file,
struct t_config_section **section,
struct t_config_option **option,
char **pos_option_name);
const char **pos_option_name);
----
Paramètres :
@@ -7861,7 +7864,7 @@ Exemple en C :
struct t_config_file *ptr_config_file;
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
char *option_name;
const char *option_name;
weechat_config_search_with_string ("fichier.section.option",
&ptr_config_file,
@@ -9771,6 +9774,95 @@ elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
# ...
----
[[themes]]
=== Thèmes
Fonctions permettant de contribuer des surcharges d'options de couleur
(et autres options modifiables par un thème) à des thèmes intégrés.
Voir la section
link:weechat_user.fr.html#themes[guide utilisateur / Thèmes] pour le
côté utilisateur final et la commande `+/theme+`.
==== theme_register
_WeeChat ≥ 4.10.0._
Enregistrer une contribution de surcharges d'options sous un thème
nommé. L'extension appelante est le propriétaire de la contribution ;
les appels suivants avec le même nom de thème depuis la même extension
sont fusionnés dans la contribution existante (en cas de doublons, les
dernières clés gagnent).
Lorsque l'extension appelante est déchargée, toutes ses contributions
sont automatiquement retirées de tous les thèmes.
Prototype :
[source,c]
----
struct t_theme *weechat_theme_register (const char *name,
struct t_hashtable *overrides);
----
Paramètres :
* _name_ : nom du thème (par exemple `+light+` ou un nom personnalisé)
* _overrides_ : table de hachage associant des noms d'options complets
(par exemple `+irc.color.input_nick+`) à leurs valeurs chaîne ;
l'appelant en conserve la propriété et peut la libérer juste après
l'appel
Valeur de retour :
* pointeur vers le thème enregistré (existant ou nouvellement créé),
NULL en cas d'erreur
Exemple en C :
[source,c]
----
struct t_hashtable *overrides = weechat_hashtable_new (
8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (overrides)
{
weechat_hashtable_set (overrides, "irc.color.input_nick", "cyan");
weechat_hashtable_set (overrides, "irc.color.topic_old", "darkgray");
weechat_theme_register ("light", overrides);
weechat_hashtable_free (overrides);
}
----
Script (Python) :
[source,python]
----
# prototype
def theme_register(name: str, overrides: Dict[str, str]) -> str: ...
# exemple
weechat.theme_register("light", {
"irc.color.input_nick": "cyan",
"irc.color.topic_old": "darkgray",
})
----
[NOTE]
Seules les options possédant le flag _themable_ seront modifiées par
`/theme apply`. Toutes les options `*.color.*` sont modifiables par
défaut ; les options de type chaîne contenant des références
`+${color:...}+` sont explicitement déclarées comme modifiables. Les
entrées ciblant des options non modifiables sont silencieusement
ignorées au moment de l'application avec un avertissement écrit sur
le tampon _core_.
[NOTE]
Lorsqu'elle est appelée depuis un script, la contribution est
automatiquement retirée lorsque le script est déchargé (aucun nettoyage
manuel n'est nécessaire).
[[key_bindings]]
=== Associations de touches
+65 -5
View File
@@ -551,7 +551,8 @@ HTTP/1.1 200 OK
"plugin": "core",
"name": "weechat"
},
"keys": []
"keys": [],
"last_read_line_id": -1
},
{
"id": 1709932823423765,
@@ -580,7 +581,8 @@ HTTP/1.1 200 OK
"tls_version": "TLS1.3",
"host": "~alice@example.com"
},
"keys": []
"keys": [],
"last_read_line_id": -1
},
{
"id": 1709932823649069,
@@ -607,7 +609,8 @@ HTTP/1.1 200 OK
"nick": "alice",
"host": "~alice@example.com"
},
"keys": []
"keys": [],
"last_read_line_id": -1
}
]
----
@@ -663,7 +666,8 @@ HTTP/1.1 200 OK
"message": "Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, javascript, logger, lua, perl, php, python, relay, ruby, script, spell, tcl, trigger, typing, xfer",
"tags": []
}
]
],
"last_read_line_id": -1
}
----
@@ -709,6 +713,7 @@ HTTP/1.1 200 OK
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1,
"nicklist_root": {
"id": 0,
"parent_group_id": -1,
@@ -906,7 +911,8 @@ HTTP/1.1 200 OK
"key": "up",
"command": "/fset -up"
}
]
],
"last_read_line_id": -1
}
----
@@ -1040,6 +1046,14 @@ Paramètres de chemin :
confondre avec le numéro du tampon, qui est différent)
* `buffer_name` (chaîne, **obligatoire**) : nom du tampon
Paramètres de requête :
* `colors` (chaîne, facultatif, par défaut : `ansi`) : comment les chaînes avec
des couleurs sont retournées :
** `ansi` : retourner les codes couleur ANSI
** `weechat` : retourner les codes couleur internes WeeChat
** `strip` : supprimer les couleurs
Exemple de requête : obtenir les pseudos d'un tampon :
[source,shell]
@@ -1185,6 +1199,51 @@ HTTP/1.1 200 OK
]
----
[[resource_scripts]]
=== Scripts
Retourner la liste des scripts chargés (tous les langages).
Point de terminaison:
----
GET /api/scripts
----
Exemple de requête:
[source,shell]
----
curl -L -u 'plain:secret_password' 'https://localhost:9000/api/scripts'
----
Réponse:
[source,http]
----
HTTP/1.1 200 OK
----
[source,json]
----
[
{
"name": "highmon.pl",
"version": "2.7",
"description": "Highlight Monitor",
"author": "KenjiE20",
"license": "GPL3"
},
{
"name": "go.py",
"version": "3.1.1",
"description": "Quick jump to buffers",
"author": "Sébastien Helleu <flashcode@flashtux.org>",
"license": "GPL3"
}
]
----
[[resource_input]]
=== Entrée
@@ -1524,6 +1583,7 @@ Les types de corps qui peuvent être retournés :
* `nick_group` (objet)
* `nick` (objet)
* `hotlist` (objet)
* `scripts` (tableau)
* `ping` (objet)
[TIP]
+161 -1
View File
@@ -208,7 +208,7 @@ Le tableau suivant liste les paquets optionnels pour compiler WeeChat :
| asciidoctor | ≥ 1.5.4
| Construction de la page man et de la documentation.
| ruby-pygments.rb |
| python3-pygments, ruby-pygments.rb |
| Construction de la documentation.
| libcpputest-dev | ≥ 3.4
@@ -2227,6 +2227,166 @@ Exemple de gras avec la couleur de texte du terminal :
/set weechat.color.status_time *99999
----
[[themes]]
=== Thèmes
Un thème est un ensemble nommé de surcharges d'options qui peut être
appliqué par la commande <<command_weechat_theme,/theme>>. WeeChat est
livré avec un thème intégré `"light"` adapté aux terminaux à fond clair
et permet de charger temporairement des thèmes utilisateur depuis des
fichiers.
[[themes_themable_options]]
==== Options modifiables par un thème
Les thèmes ne peuvent modifier que les options marquées comme
_themable_ (modifiables par un thème). Toutes les options `*.color.*`
le sont par défaut ; certaines options de type chaîne contenant des
références `+${color:...}+` (par exemple
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` ou les
formats `+buflist.format.*+`) sont explicitement déclarées comme
modifiables.
La liste complète des options modifiables peut être affichée depuis le
tampon <<command_fset_fset,/fset>> avec le filtre `+t:themable+`.
[[themes_apply]]
==== Appliquer un thème
Pour basculer vers le thème intégré pour fond clair :
----
/theme apply light
----
L'état actuel de toutes les options modifiables est sauvegardé au
préalable dans un fichier de sauvegarde nommé
`+backup-AAAAMMJJ-HHMMSS-uuuuuu+` dans le répertoire `+themes+` du
répertoire de configuration de WeeChat. L'apparence précédente peut
ainsi être restaurée à tout moment avec :
----
/theme apply backup-AAAAMMJJ-HHMMSS-uuuuuu
----
La création de la sauvegarde peut être désactivée (déconseillé) :
----
/set weechat.look.theme_backup off
----
Si la sauvegarde est activée et que le fichier ne peut pas être écrit,
l'application est annulée avant qu'aucune option ne soit modifiée.
Le nom du dernier thème appliqué est conservé dans
`+weechat.look.theme+` (à titre informatif uniquement ; il n'est pas
ré-appliqué au démarrage).
[[themes_reset]]
==== Réinitialiser aux valeurs par défaut
Pour rétablir l'apparence d'origine livrée avec WeeChat, réinitialiser
toutes les options modifiables à leur valeur par défaut :
----
/theme reset
----
Une sauvegarde est écrite au préalable (même garde-fou que
`+/theme apply+`) ; si la sauvegarde échoue, la réinitialisation est
annulée avant qu'aucune option ne soit modifiée. L'option
`+weechat.look.theme+` est également remise à vide.
[[themes_save_delete]]
==== Sauvegarder et supprimer des thèmes utilisateur
Sauvegarder l'état actuel des options modifiables en tant que nouveau
thème utilisateur :
----
/theme save monTheme
----
Toutes les options modifiables sont écrites, donc le fichier est
autonome et applique exactement le même aspect sur n'importe quel
WeeChat, quelle que soit sa configuration actuelle.
Les noms réservés (noms de thèmes intégrés comme `+light+` et tout nom
commençant par `+backup-+`) sont refusés. Les fichiers sont placés
dans `+${weechat_config_dir}/themes/<nom>.theme+`.
Renommer un thème utilisateur (usage typique : conserver une
sauvegarde automatique utile sous un nom plus parlant) :
----
/theme rename backup-20260525-094210-123456 maSauvegarde
----
Les thèmes intégrés n'ont pas de fichier et ne peuvent pas être
renommés ; le nom cible ne peut pas correspondre à un nom intégré ni
commencer par `+backup-+`, et le fichier cible ne doit pas déjà
exister. Le champ `+name+` de la section `+[info]+` à l'intérieur du
fichier est réécrit afin que `/theme info` affiche le nouveau nom de
manière cohérente.
Supprimer un thème utilisateur :
----
/theme del monTheme
----
Cela supprime le fichier sur le disque ; les thèmes intégrés ne
peuvent pas être supprimés.
[[themes_file_format]]
==== Format du fichier de thème
Un fichier de thème est de type INI avec deux sections :
----
[info]
name = "solarized_light"
description = "Thème fond clair inspiré de Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` est une section de métadonnées informatives affichées par
`/theme info`. `+[options]+` contient les surcharges réelles ; les clés
sont les noms complets d'options tels qu'affichés par `/set`. Les
valeurs de type chaîne peuvent être encadrées par des guillemets
simples ou doubles ; les guillemets sont retirés à l'analyse. Les
options non modifiables par un thème listées dans un fichier sont
refusées au moment de l'application et signalées sur le tampon _core_
(ainsi, un fichier `.theme` importé depuis une source non fiable ne
peut pas écraser des mots de passe, des listes d'auto-chargement ou
des commandes de démarrage).
Les fichiers de thème utilisateur ne sont jamais mis en cache : à
chaque `/theme apply <nom>`, le fichier est analysé, appliqué, puis
libéré.
[[themes_resolution]]
==== Ordre de résolution
Lors de l'exécution de `+/theme apply <nom>+` :
* Si `+${weechat_config_dir}/themes/<nom>.theme+` existe, le fichier
est analysé et utilisé (il masque tout thème intégré du même nom).
* Sinon, le registre des thèmes intégrés est consulté ; les thèmes
intégrés sont enregistrés par programmation par le cœur, les
extensions et les scripts (voir la documentation des extensions et
des scripts pour `+weechat_theme_register+`).
Si aucune des deux sources ne fournit le nom, l'application est
refusée.
[[charset]]
=== Charset
+96 -9
View File
@@ -4549,7 +4549,7 @@ Prototipo:
[source,c]
----
int weechat_mkdir_home (char *directory, int mode);
int weechat_mkdir_home (const char *directory, int mode);
----
Argomenti:
@@ -4597,7 +4597,7 @@ Prototipo:
[source,c]
----
int weechat_mkdir (char *directory, int mode);
int weechat_mkdir (const char *directory, int mode);
----
Argomenti:
@@ -4638,7 +4638,7 @@ Prototipo:
[source,c]
----
int weechat_mkdir_parents (char *directory, int mode);
int weechat_mkdir_parents (const char *directory, int mode);
----
Argomenti:
@@ -7661,7 +7661,7 @@ section = weechat.config_search_section(config_file, "section")
==== config_new_option
// TRANSLATION MISSING
_Updated in 1.5, 4.1.0._
_Updated in 1.5, 4.1.0, 4.10.0._
Crea una nuova opzione nella sezione di un file di configurazione.
@@ -7708,7 +7708,10 @@ Argomenti:
option name (the value of parent option will be displayed in `/set` command
output if this option is "null"), the syntax is then:
"name << file.section.option"
* _type_: tipo dell'opzione:
// TRANSLATION MISSING
* _type_: type of option; any type can be suffixed with `+|themable+` to mark
the option as themable, so that it can be set by the `/theme` command
(options of type _color_ are always themable) _(WeeChat ≥ 4.10.0)_:
** _boolean_: valore booleano (on/off)
** _integer_: valore intero
** _string_: valore stringa
@@ -7799,7 +7802,7 @@ struct t_config_option *option_int =
/* stringa */
struct t_config_option *option_str =
weechat_config_new_option (config_file, section, "option_str", "string",
weechat_config_new_option (config_file, section, "option_str", "string|themable",
"My option, type string",
NULL,
0, 0,
@@ -7875,7 +7878,7 @@ option_int = weechat.config_new_option(config_file, section, "option_int", "inte
"", "",
"", "")
option_str = weechat.config_new_option(config_file, section, "option_str", "string",
option_str = weechat.config_new_option(config_file, section, "option_str", "string|themable",
"My option, type string",
"", 0, 0, "test", "test", 1,
"option_str_check_value_cb", "",
@@ -8011,7 +8014,7 @@ void weechat_config_search_with_string (const char *option_name,
struct t_config_file **config_file,
struct t_config_section **section,
struct t_config_option **option,
char **pos_option_name);
const char **pos_option_name);
----
Argomenti:
@@ -8034,7 +8037,7 @@ Esempio in C:
struct t_config_file *ptr_config_file;
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
char *option_name;
const char *option_name;
weechat_config_search_with_string ("file.section.option",
&ptr_config_file,
@@ -9967,6 +9970,90 @@ elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
# ...
----
// TRANSLATION MISSING
[[themes]]
=== Themes
Functions to contribute color (and other themable option) overrides to
built-in themes. See the
link:weechat_user.it.html#themes[user's guide / Themes] section for the
end-user side and the `+/theme+` command.
==== theme_register
_WeeChat ≥ 4.10.0._
Register a contribution of option overrides under a named theme. The
caller's plugin is the owner of the contribution; subsequent calls
with the same theme name from the same plugin merge into the existing
contribution (later keys win for duplicates).
When the calling plugin is unloaded, all its contributions are
automatically dropped from every theme.
Prototype:
[source,c]
----
struct t_theme *weechat_theme_register (const char *name,
struct t_hashtable *overrides);
----
Arguments:
* _name_: theme name (for example `+light+` or a custom name)
* _overrides_: hashtable mapping full option names
(e.g. `+irc.color.input_nick+`) to their string values; the caller
retains ownership and may free the hashtable right after the call
Return value:
* pointer to the registered theme (existing or newly created), NULL on
error
C example:
[source,c]
----
struct t_hashtable *overrides = weechat_hashtable_new (
8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (overrides)
{
weechat_hashtable_set (overrides, "irc.color.input_nick", "cyan");
weechat_hashtable_set (overrides, "irc.color.topic_old", "darkgray");
weechat_theme_register ("light", overrides);
weechat_hashtable_free (overrides);
}
----
Script (Python):
[source,python]
----
# prototype
def theme_register(name: str, overrides: Dict[str, str]) -> str: ...
# example
weechat.theme_register("light", {
"irc.color.input_nick": "cyan",
"irc.color.topic_old": "darkgray",
})
----
[NOTE]
Only options that have the _themable_ flag will be set by `/theme apply`.
All `*.color.*` options are themable by default; string options that
hold `+${color:...}+` references are explicitly opted in. Entries
targeting non-themable options are silently skipped at apply-time with
a warning logged to the _core_ buffer.
[NOTE]
When called from a script, the contribution is automatically dropped
when the script unloads (no manual cleanup is needed).
[[key_bindings]]
=== Combinazione tasti
+147 -1
View File
@@ -245,7 +245,7 @@ WeeChat:
| Build man page and documentation.
// TRANSLATION MISSING
| ruby-pygments.rb |
| python3-pygments, ruby-pygments.rb |
| Build documentation.
// TRANSLATION MISSING
@@ -2439,6 +2439,152 @@ Esempio di grassetto con il colore di primo piano del terminale:
/set weechat.color.status_time *99999
----
// TRANSLATION MISSING
[[themes]]
=== Themes
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme del mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
+96 -9
View File
@@ -4477,7 +4477,7 @@ WeeChat ホームディレクトリの下にディレクトリを作成。
[source,c]
----
int weechat_mkdir_home (char *directory, int mode);
int weechat_mkdir_home (const char *directory, int mode);
----
引数:
@@ -4525,7 +4525,7 @@ weechat.mkdir_home("${weechat_cache_dir}/temp", 0755)
[source,c]
----
int weechat_mkdir (char *directory, int mode);
int weechat_mkdir (const char *directory, int mode);
----
引数:
@@ -4566,7 +4566,7 @@ weechat.mkdir("/tmp/mydir", 0755)
[source,c]
----
int weechat_mkdir_parents (char *directory, int mode);
int weechat_mkdir_parents (const char *directory, int mode);
----
引数:
@@ -7472,7 +7472,7 @@ section = weechat.config_search_section(config_file, "section")
==== config_new_option
// TRANSLATION MISSING
_Updated in 1.5, 4.1.0._
_Updated in 1.5, 4.1.0, 4.10.0._
設定ファイルのあるセクションに新しいオプションを作成。
@@ -7518,7 +7518,10 @@ struct t_config_option *weechat_config_new_option (
(このオプションが "null" の場合、親オプションの値が `/set`
コマンドの出力に表示されます)。以下の構文を使ってください:
"name << file.section.option"
* _type_: オプションの型:
// TRANSLATION MISSING
* _type_: type of option; any type can be suffixed with `+|themable+` to mark
the option as themable, so that it can be set by the `/theme` command
(options of type _color_ are always themable) _(WeeChat ≥ 4.10.0)_:
** _boolean_: ブール値 (on/off)
** _integer_: 整数値
** _string_: 文字列
@@ -7606,7 +7609,7 @@ struct t_config_option *option_int =
/* string */
struct t_config_option *option_str =
weechat_config_new_option (config_file, section, "option_str", "string",
weechat_config_new_option (config_file, section, "option_str", "string|themable",
"My option, type string",
NULL,
0, 0,
@@ -7682,7 +7685,7 @@ option_int = weechat.config_new_option(config_file, section, "option_int", "inte
"", "",
"", "")
option_str = weechat.config_new_option(config_file, section, "option_str", "string",
option_str = weechat.config_new_option(config_file, section, "option_str", "string|themable",
"My option, type string",
"", 0, 0, "test", "test", 1,
"option_str_check_value_cb", "",
@@ -7816,7 +7819,7 @@ void weechat_config_search_with_string (const char *option_name,
struct t_config_file **config_file,
struct t_config_section **section,
struct t_config_option **option,
char **pos_option_name);
const char **pos_option_name);
----
引数:
@@ -7838,7 +7841,7 @@ C 言語での使用例:
struct t_config_file *ptr_config_file;
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
char *option_name;
const char *option_name;
weechat_config_search_with_string ("file.section.option",
&ptr_config_file,
@@ -9746,6 +9749,90 @@ elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
# ...
----
// TRANSLATION MISSING
[[themes]]
=== Themes
Functions to contribute color (and other themable option) overrides to
built-in themes. See the
link:weechat_user.ja.html#themes[user's guide / Themes] section for the
end-user side and the `+/theme+` command.
==== theme_register
_WeeChat ≥ 4.10.0._
Register a contribution of option overrides under a named theme. The
caller's plugin is the owner of the contribution; subsequent calls
with the same theme name from the same plugin merge into the existing
contribution (later keys win for duplicates).
When the calling plugin is unloaded, all its contributions are
automatically dropped from every theme.
Prototype:
[source,c]
----
struct t_theme *weechat_theme_register (const char *name,
struct t_hashtable *overrides);
----
Arguments:
* _name_: theme name (for example `+light+` or a custom name)
* _overrides_: hashtable mapping full option names
(e.g. `+irc.color.input_nick+`) to their string values; the caller
retains ownership and may free the hashtable right after the call
Return value:
* pointer to the registered theme (existing or newly created), NULL on
error
C example:
[source,c]
----
struct t_hashtable *overrides = weechat_hashtable_new (
8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (overrides)
{
weechat_hashtable_set (overrides, "irc.color.input_nick", "cyan");
weechat_hashtable_set (overrides, "irc.color.topic_old", "darkgray");
weechat_theme_register ("light", overrides);
weechat_hashtable_free (overrides);
}
----
Script (Python):
[source,python]
----
# prototype
def theme_register(name: str, overrides: Dict[str, str]) -> str: ...
# example
weechat.theme_register("light", {
"irc.color.input_nick": "cyan",
"irc.color.topic_old": "darkgray",
})
----
[NOTE]
Only options that have the _themable_ flag will be set by `/theme apply`.
All `*.color.*` options are themable by default; string options that
hold `+${color:...}+` references are explicitly opted in. Entries
targeting non-themable options are silently skipped at apply-time with
a warning logged to the _core_ buffer.
[NOTE]
When called from a script, the contribution is automatically dropped
when the script unloads (no manual cleanup is needed).
[[key_bindings]]
=== キー割り当て
+147 -1
View File
@@ -229,7 +229,7 @@ WeeChat:
| man ページと文書のビルド
// TRANSLATION MISSING
| ruby-pygments.rb |
| python3-pygments, ruby-pygments.rb |
| Build documentation.
| libcpputest-dev | 3.4 以上
@@ -2375,6 +2375,152 @@ WeeChat は画面に色が表示された時点で色ペアを動的に割り当
/set weechat.color.status_time *99999
----
// TRANSLATION MISSING
[[themes]]
=== Themes
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme del mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
+147 -1
View File
@@ -210,7 +210,7 @@ WeeChat:
| asciidoctor | ≥ 1.5.4
| Tworzenie strony man i dokumentacji.
| ruby-pygments.rb |
| python3-pygments, ruby-pygments.rb |
| Dokumentacja budowania.
| libcpputest-dev | ≥ 3.4
@@ -2191,6 +2191,152 @@ Przykład pogrubienia z domyślnym kolorem terminala:
/set weechat.color.status_time *99999
----
// TRANSLATION MISSING
[[themes]]
=== Motywy
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme del mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
+1 -2
View File
@@ -128,8 +128,7 @@ WeeChat „језгро” се налази у следећим директо
|===
| Путања/фајл | Опис
| core/ | Функције језгра: тачка улаза, интерне структуре.
// TRANSLATION MISSING
|    core-args.c | Command-line arguments.
|    core-args.c | Аргументи командне-линије.
|    core-arraylist.c | Листе низова.
|    core-backtrace.c | Испис трага након краха.
|    core-calc.c | Израчунавање резултата израза.
+96 -9
View File
@@ -4209,7 +4209,7 @@ _Ажурирано у верзији 3.2._
[source,c]
----
int weechat_mkdir_home (char *directory, int mode);
int weechat_mkdir_home (const char *directory, int mode);
----
Аргументи:
@@ -4255,7 +4255,7 @@ weechat.mkdir_home("${weechat_cache_dir}/temp", 0755)
[source,c]
----
int weechat_mkdir (char *directory, int mode);
int weechat_mkdir (const char *directory, int mode);
----
Аргументи:
@@ -4296,7 +4296,7 @@ weechat.mkdir("/tmp/mydir", 0755)
[source,c]
----
int weechat_mkdir_parents (char *directory, int mode);
int weechat_mkdir_parents (const char *directory, int mode);
----
Аргументи:
@@ -7171,7 +7171,7 @@ section = weechat.config_search_section(config_file, "section")
==== config_new_option
_Ажурирано у верзији 1.5, 4.1.0._
_Ажурирано у верзији 1.5, 4.1.0, 4.10.0._
Креира нову опцију у одељку конфигурационог фајла.
@@ -7214,7 +7214,10 @@ struct t_config_option *weechat_config_new_option (
* _config_file_: показивач на конфигурациони фајл
* _section_: показивач на одељак
* _name_: име опције; у програм у WeeChat верзије ≥ 1.4, име може да укључи и име родитељске опције (у случају да је ова опција „null”, вредност родитељске опције ће се приказати у излазу команде `/set`), тада је синтакса: „име << фајл.одељак.опција”
* _type_: тип опције:
// TRANSLATION MISSING
* _type_: type of option; any type can be suffixed with `+|themable+` to mark
the option as themable, so that it can be set by the `/theme` command
(options of type _color_ are always themable) _(WeeChat ≥ 4.10.0)_:
** _boolean_: логичка вредност (on/off)
** _integer_: целобројна вредност
** _string_: стринг вредност
@@ -7287,7 +7290,7 @@ struct t_config_option *option_int =
/* стринг */
struct t_config_option *option_str =
weechat_config_new_option (config_file, section, "option_str", "string",
weechat_config_new_option (config_file, section, "option_str", "string|themable",
"My option, type string",
NULL,
0, 0,
@@ -7363,7 +7366,7 @@ option_int = weechat.config_new_option(config_file, section, "option_int", "inte
"", "",
"", "")
option_str = weechat.config_new_option(config_file, section, "option_str", "string",
option_str = weechat.config_new_option(config_file, section, "option_str", "string|themable",
"My option, type string",
"", 0, 0, "test", "test", 1,
"option_str_check_value_cb", "",
@@ -7492,7 +7495,7 @@ void weechat_config_search_with_string (const char *option_name,
struct t_config_file **config_file,
struct t_config_section **section,
struct t_config_option **option,
char **pos_option_name);
const char **pos_option_name);
----
Аргументи:
@@ -7510,7 +7513,7 @@ C пример:
struct t_config_file *ptr_config_file;
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
char *option_name;
const char *option_name;
weechat_config_search_with_string ("file.section.option",
&ptr_config_file,
@@ -9436,6 +9439,90 @@ elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
# ...
----
// TRANSLATION MISSING
[[themes]]
=== Теме
Functions to contribute color (and other themable option) overrides to
built-in themes. See the
link:weechat_user.sr.html#themes[user's guide / Themes] section for the
end-user side and the `+/theme+` command.
==== theme_register
_WeeChat ≥ 4.10.0._
Register a contribution of option overrides under a named theme. The
caller's plugin is the owner of the contribution; subsequent calls
with the same theme name from the same plugin merge into the existing
contribution (later keys win for duplicates).
When the calling plugin is unloaded, all its contributions are
automatically dropped from every theme.
Prototype:
[source,c]
----
struct t_theme *weechat_theme_register (const char *name,
struct t_hashtable *overrides);
----
Arguments:
* _name_: theme name (for example `+light+` or a custom name)
* _overrides_: hashtable mapping full option names
(e.g. `+irc.color.input_nick+`) to their string values; the caller
retains ownership and may free the hashtable right after the call
Return value:
* pointer to the registered theme (existing or newly created), NULL on
error
C example:
[source,c]
----
struct t_hashtable *overrides = weechat_hashtable_new (
8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (overrides)
{
weechat_hashtable_set (overrides, "irc.color.input_nick", "cyan");
weechat_hashtable_set (overrides, "irc.color.topic_old", "darkgray");
weechat_theme_register ("light", overrides);
weechat_hashtable_free (overrides);
}
----
Script (Python):
[source,python]
----
# prototype
def theme_register(name: str, overrides: Dict[str, str]) -> str: ...
# example
weechat.theme_register("light", {
"irc.color.input_nick": "cyan",
"irc.color.topic_old": "darkgray",
})
----
[NOTE]
Only options that have the _themable_ flag will be set by `/theme apply`.
All `*.color.*` options are themable by default; string options that
hold `+${color:...}+` references are explicitly opted in. Entries
targeting non-themable options are silently skipped at apply-time with
a warning logged to the _core_ buffer.
[NOTE]
When called from a script, the contribution is automatically dropped
when the script unloads (no manual cleanup is needed).
[[key_bindings]]
=== Тастерске пречице
+65 -6
View File
@@ -543,7 +543,8 @@ HTTP/1.1 200 OK
"plugin": "core",
"name": "weechat"
},
"keys": []
"keys": [],
"last_read_line_id": -1
},
{
"id": 1709932823423765,
@@ -573,7 +574,8 @@ HTTP/1.1 200 OK
"tls_version": "TLS1.3",
"host": "~alice@example.com"
},
"keys": []
"keys": [],
"last_read_line_id": -1
},
{
"id": 1709932823649069,
@@ -601,7 +603,8 @@ HTTP/1.1 200 OK
"nick": "alice",
"host": "~alice@example.com"
},
"keys": []
"keys": [],
"last_read_line_id": -1
}
]
----
@@ -657,7 +660,8 @@ HTTP/1.1 200 OK
"message": "Учитани додаци: alias, buflist, charset, exec, fifo, fset, guile, irc, javascript, logger, lua, perl, php, python, relay, ruby, script, spell, tcl, trigger, typing, xfer",
"tags": []
}
]
],
"last_read_line_id": -1
}
----
@@ -704,6 +708,7 @@ HTTP/1.1 200 OK
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1,
"nicklist_root": {
"id": 0,
"parent_group_id": -1,
@@ -902,7 +907,8 @@ HTTP/1.1 200 OK
"key": "up",
"command": "/fset -up"
}
]
],
"last_read_line_id": -1
}
----
@@ -1024,12 +1030,19 @@ GET /api/buffers/{id_бафера}/nicks
GET /api/buffers/{име_бафера}/nicks
----
Параметри упита:
Параметри путање:
* `id_бафера` (цео број, **обавезно**): јединствени идентификатор бафера (не треба
да се помеша са бројем бафера, то је нешто друго)
* `име_бафера` (стринг, **обавезно**): име бафера
Параметри упита:
* `colors` (стринг, није обавезно, подразумевано: `ansi`): како се враћају стрингови са кодовима боје:
** `ansi`: враћају се ANSI кодови боје
** `weechat`: враћају се WeeChat интерни кодови боје
** `strip`: уклањају се боје
Пример захтева: врати надимке бафера:
[source,shell]
@@ -1175,6 +1188,51 @@ HTTP/1.1 200 OK
]
----
[[resource_scripts]]
=== Скрипте
Враћа учитане скрипте (на свим језицима).
Крајња тачка:
----
GET /api/scripts
----
Пример захтева:
[source,shell]
----
curl -L -u 'plain:secret_password' 'https://localhost:9000/api/scripts'
----
Одговор:
[source,http]
----
HTTP/1.1 200 OK
----
[source,json]
----
[
{
"name": "highmon.pl",
"version": "2.7",
"description": "Highlight Monitor",
"author": "KenjiE20",
"license": "GPL3"
},
{
"name": "go.py",
"version": "3.1.1",
"description": "Quick jump to buffers",
"author": "Sébastien Helleu <flashcode@flashtux.org>",
"license": "GPL3"
}
]
----
[[resource_input]]
=== Input
@@ -1504,6 +1562,7 @@ GUID `258EAFA5-E914-47DA-95CA-C5AB0DC85B11` (SHA-1 се кодира у base64).
* `nick_group` (објекат)
* `nick` (објекат)
* `hotlist` (објекат)
* `scripts` (низ)
* `ping` (објекат)
[TIP]
+147 -1
View File
@@ -203,7 +203,7 @@ WeeChat мора да се изгради са CMake.
| asciidoctor | ≥ 1.5.4
| Изградња man странице и документације.
| ruby-pygments.rb |
| python3-pygments, ruby-pygments.rb |
| Документација изградње.
| libcpputest-dev | ≥ 3.4
@@ -2093,6 +2093,152 @@ include::{autogendir}/autogen_user_options.sr.adoc[tag=fset_options]
/set weechat.color.status_time *99999
----
// TRANSLATION MISSING
[[themes]]
=== Теме
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme del mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
+362 -51
View File
@@ -23,10 +23,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-12 20:24+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-05-30 14:01+0200\n"
"Last-Translator: Ondřej Súkup <mimi.vx@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: Czech <weechat-dev@nongnu.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -164,10 +164,10 @@ msgstr ""
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s Copyright %s, zkompilováno %s %s\n"
"Vyvinutý Sébastienem Helleu <flashcode@flashtux.org> - %s"
"Vyvinutý %s <%s> - %s"
msgid "Usage:"
msgstr ""
@@ -1005,6 +1005,55 @@ msgstr "Volba vytvořena: "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%s: upozornění: slovník \"%s\" není dostupný ve vašem systému"
#, fuzzy
#| msgid "no variable"
msgid "No theme available"
msgstr "není proměnná"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sKlávesa \"%s\" nenalezena"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "Volba \"%s%s%s\":"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " soubor: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "popis"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " soubor: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "verze WeeChat"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sSelhalo odnastavení volby \"%s\""
@@ -1178,6 +1227,16 @@ msgstr ""
"zpráva: zpráva pro nepřítomnost (pokud není zadána je status nepřítomnosti "
"odebrán)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
msgid "manage bars"
msgstr "řídit pole"
@@ -3648,6 +3707,78 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
#, fuzzy
#| msgid "list of bar items"
msgid "manage color themes"
msgstr "seznam položek polí"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid "list of filters"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr "seznam filtrů"
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "names of filters"
msgid "raw[rename]: rename a user theme file"
msgstr "jména filtrů"
#, fuzzy
#| msgid "get/set channel topic"
msgid "raw[del]: delete a user theme file"
msgstr "získat/nastavit téma kanálu"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
msgid "name: name of a theme"
msgstr "zapni podporu myši"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
#, fuzzy
#| msgid "values for a configuration option"
msgid "toggle value of a config option"
@@ -4236,6 +4367,15 @@ msgstr ""
msgid "names of layouts"
msgstr "jména rozvržení"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr "jména chráněných dat (soubor sec.conf, sekce data)"
@@ -5206,6 +5346,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "prefix pro zprávy akcí"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
#, fuzzy
msgid ""
"time format for dates converted to strings and displayed in messages (see "
@@ -6177,6 +6331,111 @@ msgstr "%s: chyba: slovník \"%s\" není ve vašem systému dostupný"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Využití paměti (viz \"man mallinfo\" pro nápovědu):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sKlávesa \"%s\" nenalezena"
#, fuzzy, c-format
#| msgid "%s: script \"%s\" is not installed"
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s: skript \"%s\" není nainstalován"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr "%sUpozornění: %s, řádek %d: neznámý identifikátor sekce (\"%s\")"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr "%sUpozornění: %s, řádek %d: neznámý identifikátor sekce (\"%s\")"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: nemůžu parsovat soubor \"%s\""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr ""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: nemůžu parsovat soubor \"%s\""
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "Volba \"%s%s%s\":"
#, fuzzy, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sChyba: nemohu vytvořit soubor \"%s\""
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme \"%s\" already exists"
msgstr "%s%s: vzorec přesměrování \"%s\" již existuje"
#, fuzzy, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sChyba: nemohu přejmenovat filter \"%s\" na \"%s\""
#, fuzzy, c-format
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "Filtr \"%s\" přejmenován na \"%s\""
#, fuzzy, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sChyba: nemohu vytvořit soubor \"%s\""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: nemůžu parsovat soubor \"%s\""
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "%sChyba aktualizace WeeChat se souborem \"%s\":"
@@ -6340,37 +6599,36 @@ msgstr "Konec příkazu '%s', vypršel časový limit (%.1fs)"
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "1 pokud se WeeChat aktualizuje (příkaz `/upgrade`)"
#, fuzzy
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
"Vítejte v WeeChatu!\n"
"\n"
"Pokud objevujete WeeChat je doporučeno si prečíst alespoň \"quickstart\" "
"průvodce, a pokud máte trochu času tak uživatelskou příručku, oboje vám "
"vyvětlí hlavní koncepty WeeChatu.\n"
"Veškerá dokumentace WeeChatu je dostupná na adrese: https://weechat.org/"
"doc/\n"
"\n"
"Navíc je zde dostupná integrovaná nápověda /help fungující na všech "
"příkazech a nastaveních ( použijte Tab klávesu pro doplňování názvů).\n"
"Příkaz /iset (script iset.pl) může pomoci upravit WeeChat\" /script install "
"iset.pl\n"
"\n"
"Můžete přidat IRC server a připojit se k němu pomocí príkazů /server a /"
"connect ( podívejte se na /help server)."
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
@@ -7885,7 +8143,8 @@ msgstr "Neznámý konfigurační soubor \"%s\""
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -11806,8 +12065,8 @@ msgstr "jméno serveru"
msgid "get nick from IRC host"
msgstr "získat přezdívku od IRC hosta"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "IRC host (jako `:nick!name@server.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "IRC host (jako `:nick!name@server`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -12037,8 +12296,8 @@ msgstr "%s%s: tenhle buffer není kanál!"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -13235,7 +13494,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -15086,11 +15345,11 @@ msgstr ""
#, fuzzy
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"čárkou rozdělený seznam pluginů pro automatické načtení při spuštění \"*\" "
"znamená všechny nalezené pluginy, jméno začínající \"!\" je negativní "
@@ -15098,10 +15357,10 @@ msgstr ""
"pro vybrání několika pluginů (příklady: \"*\" nebo \"*,!lua,!tcl\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -15132,6 +15391,11 @@ msgid ""
"1 are recommended values)"
msgstr ""
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
"insensitive, use \"(?-i)\" at beginning to make it case-sensitive), example: "
@@ -15241,7 +15505,7 @@ msgstr "Klienti pro přenos:"
#, fuzzy
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
"jména stavů (volitelné): connecting, waiting_auth, connected, auth_failed, "
@@ -15380,6 +15644,10 @@ msgstr "%s%s: nemohu se \"navázat\" na port %d (%s): chyba %d %s"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: nemohu se \"navázat\" na port %d (%s): chyba %d %s"
#, fuzzy, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s%s: nemohu \"naslouchat\" na portu %d (%s): chyba %d %s"
#, fuzzy, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: nemohu \"naslouchat\" na portu %d (%s): chyba %d %s"
@@ -15424,8 +15692,8 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: nedostatek paměti pro poslouchání na portu"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgstr "Předání dat WeeChatu do vzdálené aplikace (irc/weechat protokoly)"
msgid "Relay WeeChat data to remote applications"
msgstr "Předání dat WeeChatu do vzdálené aplikace"
msgid "connecting"
msgstr "připojuji"
@@ -15660,11 +15928,16 @@ msgstr "(nic)"
msgid "Alt+key/input: v=back to list d=jump to diff"
msgstr "Alt+klávesa/vstup: v=zpět na seznam d=skoč na rozdíl"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, "
#| "r=remove, l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view "
#| "script | Input: q=close, $=refresh, s:x,y=sort, words=filter, *=reset "
#| "filter | Mouse: left=select, right=install/remove"
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
"%d/%d scripty (filtr: %s) | Seřaď: %s | Alt+klavesa/vstup: i=instalace, "
@@ -16044,6 +16317,10 @@ msgstr "načteny %s skripty:"
msgid "script name with extension"
msgstr "seznam skriptů"
#, fuzzy
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "čárkami oddělený seznam slovníků, které použít pro tento buffer"
#, fuzzy
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr "jméno serveru (zástupný znak \"*\" je povolen) (volitelné)"
@@ -16662,7 +16939,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
@@ -17503,3 +17782,35 @@ msgid ""
msgstr ""
"%s%s: nelze akceptovat obnovení souboru \"%s\" (port: %d, počáteční pozice: "
"%llu): xfer nenalezen nebo není připraven pro přenos"
#, fuzzy
#~ msgid ""
#~ "Welcome to WeeChat!\n"
#~ "\n"
#~ "If you are discovering WeeChat, it is recommended to read at least the "
#~ "quickstart guide, and the user's guide if you have some time; they "
#~ "explain main WeeChat concepts.\n"
#~ "All WeeChat docs are available at: https://weechat.org/doc/\n"
#~ "\n"
#~ "Moreover, there is inline help with /help on all commands and options "
#~ "(use Tab key to complete the name).\n"
#~ "The command /fset can help to customize WeeChat.\n"
#~ "\n"
#~ "You can add and connect to an IRC server with /server and /connect "
#~ "commands (see /help server)."
#~ msgstr ""
#~ "Vítejte v WeeChatu!\n"
#~ "\n"
#~ "Pokud objevujete WeeChat je doporučeno si prečíst alespoň \"quickstart\" "
#~ "průvodce, a pokud máte trochu času tak uživatelskou příručku, oboje vám "
#~ "vyvětlí hlavní koncepty WeeChatu.\n"
#~ "Veškerá dokumentace WeeChatu je dostupná na adrese: https://weechat.org/"
#~ "doc/\n"
#~ "\n"
#~ "Navíc je zde dostupná integrovaná nápověda /help fungující na všech "
#~ "příkazech a nastaveních ( použijte Tab klávesu pro doplňování názvů).\n"
#~ "Příkaz /iset (script iset.pl) může pomoci upravit WeeChat\" /script "
#~ "install iset.pl\n"
#~ "\n"
#~ "Můžete přidat IRC server a připojit se k němu pomocí príkazů /server a /"
#~ "connect ( podívejte se na /help server)."
+434 -103
View File
@@ -1,7 +1,8 @@
#
# SPDX-FileCopyrightText: 2005 Rudolf Polzer <weechat-te@durchnull.de>
# SPDX-FileCopyrightText: 2006-2007 Thomas Schuetz <i18n@internet-villa.de>
# SPDX-FileCopyrightText: 2009-2019, 2023, 2024, 2025 Nils Görs <weechatter@arcor.de>
# SPDX-FileCopyrightText: 2009-2026 Nils Görs <weechatter@arcor.de>
# SPDX-FileCopyrightText: 2018 w8rabbit <w8rabbit@mail.i2p>
# SPDX-FileCopyrightText: 2015 Sven Knurr <zeug@tuxproject.de>
#
# SPDX-License-Identifier: GPL-3.0-or-later
@@ -21,23 +22,20 @@
# You should have received a copy of the GNU General Public License
# along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
#
#
# w8rabbit <w8rabbit@mail.i2p>, 2018.
# Nils Görs <weechatter@arcor.de>, 2022-2023.
msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-21 17:24+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-06-28 08:28+0200\n"
"Last-Translator: Nils Görs <weechatter@arcor.de>\n"
"Language-Team: German <kde-i18n-de@kde.org>\n"
"Language: de_DE\n"
"Language-Team: German <weechatter@arcor.de>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.9\n"
"X-Poedit-Bookmarks: -1,-1,180,-1,-1,-1,-1,-1,-1,-1\n"
"X-Poedit-SourceCharset: utf-8\n"
@@ -181,10 +179,10 @@ msgstr "deaktiviere init/deinit von gcrypt"
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s Copyright %s, kompiliert am %s %s\n"
"Entwickelt von Sébastien Helleu <flashcode@flashtux.org> - %s"
"Entwickelt von %s <%s> - %s"
msgid "Usage:"
msgstr "Aufruf:"
@@ -1005,6 +1003,55 @@ msgstr "Einstellung erstellt: "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%sFunktion \"%s\" ist auf dem Rechner nicht verfügbar"
#, fuzzy
#| msgid "not available"
msgid "No theme available"
msgstr "nicht verfügbar"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sTastenbelegung \"%s\" nicht gefunden"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "Einstellung \"%s%s%s\":"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " Datei: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "Beschreibung"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " Datei: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "WeeChat-Version"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sEinstellung \"%s\" konnte nicht zurück gesetzt werden"
@@ -1170,6 +1217,20 @@ msgstr ""
"Nachricht: Abwesenheitsnachricht (ohne Angabe einer Nachricht wird der "
"Abwesenheitszustand entfernt)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
"Standardmäßig wird der Abwesenheitsstatus durch die IRC-Erweiterung nur "
"lokal angezeigt (siehe /help irc.look.display_away)."
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
"Dieser Befehl kann von anderen Erweiterungen und Skripten abgefangen werden. "
"(siehe \"Anleitung für API Erweiterung\", Funktion \"hook_command_run\")."
msgid "manage bars"
msgstr "Infobars verwalten"
@@ -1275,16 +1336,12 @@ msgstr "Maske: Name, wobei der Platzhalter \"*\" zulässig ist"
msgid "raw[set]: set a value for a bar property"
msgstr "raw[set]: legt einen Wert für eine Bar-Eigenschaft fest"
#, fuzzy
#| msgid ""
#| "option: option to change (for options list, look at /set weechat.bar."
#| "<barname>.*)"
msgid ""
"option: option to change (for options list, look at /set weechat.bar."
"<bar_name>.*)"
msgstr ""
"option: Option die geändert werden soll (eine Liste der möglichen Optionen "
"findet man unter /set weechat.bar.<barname>.*)"
"findet man unter /set weechat.bar.<bar_name>.*)"
msgid "value: new value for option"
msgstr "Wert: neuer Wert für die Option"
@@ -3314,7 +3371,7 @@ msgstr ""
"werden"
msgid "raw[-c]: alias for \"-concat \\x20 -strip \\x20 -skipempty\""
msgstr "raw[-c]: Alias für \"-concat \\x20 -strip \\x20 -skipempty\""
msgstr "raw[-c]: Alias für \"-concat \\x20 -strip \\x20 -skipempty\""
msgid ""
"raw[-nl]: display messages in English during the command execution (do not "
@@ -3629,16 +3686,12 @@ msgstr "raw[del]: entfernt einen oder mehrere Proxy"
msgid "raw[set]: set a value for a proxy property"
msgstr "raw[set]: setzt einen Wert für Proxy-Eigenschaft"
#, fuzzy
#| msgid ""
#| "option: option to change (for options list, look at /set weechat.proxy."
#| "<proxyname>.*)"
msgid ""
"option: option to change (for options list, look at /set weechat.proxy."
"<proxy_name>.*)"
msgstr ""
"Option: Option, die geändert werden soll (für eine Liste der möglichen "
"Optionen, bitte folgenden Befehl nutzen: /set weechat.proxy.<proxyname>.*)"
"Optionen, bitte folgenden Befehl nutzen: /set weechat.proxy.<proxy_name>.*)"
msgid " add a http proxy, running on local host, port 8888:"
msgstr ""
@@ -3932,7 +3985,7 @@ msgid " /secure set oftc my_password"
msgstr " /secure set oftc Mein_Passwort"
msgid " alias to ghost the nick \"andrew\":"
msgstr ""
msgstr " Alias zum ghosten des Nicks \"andrew\":"
msgid ""
" /alias add ghost /eval /msg -server libera nickserv ghost andrew $"
@@ -4046,6 +4099,86 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr "Anzahl: Anzahl der zu bereinigenden Prozesse"
#, fuzzy
#| msgid "manage custom bar items"
msgid "manage color themes"
msgstr "Verwalten von benutzerdefinierten Bar-Items"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid ""
#| "raw[list]: list remote relay servers (without argument, this list is "
#| "displayed)"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr ""
"raw[list]: listet relay-Server auf (ohne Angabe von Argumente wird diese "
"Liste standardmäßig ausgegeben)"
#, fuzzy
#| msgid "raw[tags]: display tags for lines"
msgid "raw[-backups]: display backup theme files"
msgstr ""
"raw[tags]: schaltet für jede Zeile die dazugehörigen Schlagwörter an / aus"
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "raw[rename]: rename a filter"
msgid "raw[rename]: rename a user theme file"
msgstr "raw[rename]: benennt einen Filter um"
#, fuzzy
#| msgid "raw[del]: delete a server"
msgid "raw[del]: delete a user theme file"
msgstr "raw[del]: entfernt einen Server"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
#| msgid "name: name of trigger"
msgid "name: name of a theme"
msgstr "name: Name des Triggers"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
msgid "toggle value of a config option"
msgstr "den Wert einer Konfigurationsoption umschalten"
@@ -4703,6 +4836,15 @@ msgstr ""
msgid "names of layouts"
msgstr "Namen der Layouts"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr "Namen der geschützten Daten (Datei sec.conf, section data)"
@@ -5915,6 +6057,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "Anzahl an Leerzeichen um Tabulatoren in Nachrichten darzustellen"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -7013,6 +7169,122 @@ msgstr "Die Systemfunktion „%s“ ist nicht verfügbar"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Ressourcennutzung (siehe „man getrusage“ für Hilfe):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sTastenbelegung \"%s\" nicht gefunden"
#, fuzzy, c-format
#| msgid "%s: script \"%s\" is not installed"
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s: Skript \"%s\" ist nicht installiert"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: ignoring unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr "%sWarnung: %s, Zeile %d: unbekannte Sektion wird ignoriert (\"%s\")"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
#| msgid ""
#| "%sWarning: %s, line %d: ignoring unknown option for section \"%s\": %s"
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr ""
"%sWarnung: %s, Zeile %d: ignoriert unbekannte Einstellung für Sektion "
"\"%s\": %s"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: Datei \"%s\" Analyse nicht möglich"
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sBuffer name \"%s\" is reserved for WeeChat"
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr "%sDer Buffer-Name \"%s\" ist für WeeChat reserviert"
#, fuzzy, c-format
#| msgid "%sBuffer name \"%s\" is reserved for WeeChat"
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr "%sDer Buffer-Name \"%s\" ist für WeeChat reserviert"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: Datei \"%s\" Analyse nicht möglich"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "Einstellung \"%s%s%s\":"
#, fuzzy, c-format
#| msgid "%sCannot create file \"%s\""
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sDie Datei \"%s\" kann nicht erstellt werden"
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
#| msgid "%sBar \"%s\" already exists"
msgid "%sTheme \"%s\" already exists"
msgstr "%sBar \"%s\" existiert bereits"
#, fuzzy, c-format
#| msgid "%sUnable to rename filter \"%s\" to \"%s\""
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sUmbenennung des Filters von \"%s\" in \"%s\" nicht möglich"
#, fuzzy, c-format
#| msgid "Trigger \"%s\" renamed to \"%s\""
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "Trigger \"%s\" wurde umbenannt. Der neue Name lautet \"%s\""
#, fuzzy, c-format
#| msgid "%sCannot create file \"%s\""
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sDie Datei \"%s\" kann nicht erstellt werden"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: Datei \"%s\" Analyse nicht möglich"
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr ""
@@ -7175,37 +7447,36 @@ msgstr "Ende der URL-Übertragung '%s', Übertragung gestoppt"
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "WeeChat läuft im Hintergrundmodus (ctrl-c zum Beenden)."
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
"Willkommen zu WeeChat!\n"
"\n"
"Wenn Du WeeChat nutzen möchtest dann solltest Du zumindest einen Blick in "
"die Quickstart-Anleitung werfen. Wir empfehlen aber um den vollen "
"Funktionsumfang und das Konzept hinter WeeChat kennen zu lernen, die "
"Benutzeranleitung zu lesen.\n"
"Die vollständige Dokumentation findet man unter: https://weechat.org/doc/\n"
"\n"
"Darüber hinaus ist in WeeChat eine interne Hilfe integriert die man mit /"
"help auf alle Befehle und Optionen anwenden kann (mittels der TAB-Taste kann "
"eine Namensvervollständigung durchgeführt werden).\n"
"Mit dem Befehl /fset kann WeeChat sehr einfach und übersichtlich den eigenen "
"Bedürfnissen angepasst werden.\n"
"\n"
"Um einen IRC Server zu erstellen und sich mit selbigem zu Verbinden müssen "
"die Befehle /server und /connect verwendet werden (siehe /help server)."
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
@@ -9032,9 +9303,14 @@ msgstr "> `xxx`: zeigt nur Optionen mit \"xxx\" im Namen"
msgid "> `f:xxx`: show only configuration file \"xxx\""
msgstr "> `f:xxx`: zeigt nur Konfigurationsdatei \"xxx\" an"
#, fuzzy
#| msgid ""
#| "> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/"
#| "integer/string/color/enum)"
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
"> `t:xxx`: zeigt nur Optionen des entsprechenden Typs, \"xxx\" (bool/int/str/"
"col/enum oder boolean/Ganzzahl/Zeichenkette/Farbe/Aufzählung)"
@@ -11181,9 +11457,7 @@ msgid "[-noswitch] [-server <server>] <nick>[,<nick>...] [<text>]"
msgstr "[-noswitch] [-server <server>] <nick>[,<nick>...] [<text>]"
msgid "quiet nicks or hosts"
msgstr ""
"Nicks oder Hosts das Wort entziehen (User können im Kanal erst schreiben, "
"wenn sie \"+v\" oder höher besitzen)"
msgstr "Nicks oder Hosts das Wort entziehen"
msgid ""
"Without argument, this command displays the quiet list for current channel."
@@ -11688,7 +11962,7 @@ msgid "privates on all IRC servers"
msgstr "Private auf allen IRC Servern"
msgid "default kick message"
msgstr "Standardmitteilung wenn man jemanden aus einem Kanal wirftchannel"
msgstr "Standardmitteilung wenn man jemanden aus einem Kanal wirft"
msgid "default part message for IRC channel"
msgstr "Standardmitteilung beim Verlassen (/part) eines IRC-Kanals"
@@ -13121,8 +13395,8 @@ msgstr "Servername"
msgid "get nick from IRC host"
msgstr "Nicknamen des IRC-Hosts erhalten"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "IRC host (in der Form `:nick!name@server.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "IRC host (in der Form `:nick!name@server`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -13348,11 +13622,12 @@ msgstr "%s%s: Dieser Buffer ist kein Kanal!"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
"%d Kanäle (Total: %d) | Filter: %s | Sortierung: %s | Taste(Eingabe): "
"ctrl+j=Kanal betreten, ($)=Aktualisierung, (q)=Buffer schließen"
"%d Kanäle (Total: %d) | Filter: %s | Sortierung: %s | Tastenbefehl: "
"ctrl+j=Kanal betreten | Eingabezeile: $=Aktualisierung, s:x,y=Sortierung, "
"Text=Filter, *= Filter zurücksetzen, q=Buffer schließen"
msgid "Empty list of channels, try \"$\" to refresh list"
msgstr "Liste der Kanäle leeren, nutze \"$\" um die Liste zu aktualisieren"
@@ -14582,21 +14857,21 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
msgstr ""
"Wenn diese Größe erreicht ist, wird eine Rotation der Protokolldateien "
"durchgeführt: dievorhandene rotierte Protokolldateien werden umbenannt (.1 "
"wird zu .2, .2 wird zu .3 usw.).Die aktuelle Datei erhält wird umbenannt und "
"erhält .1 als Erweiterung; eine ganze Zahl mitSuffix ist erlaubt: b = Bytes "
"(Standard, wenn keine Einheit angegeben ist), k = Kilobytes, m =Megabyte, g "
"= Gigabyte, t = Terabyte; Beispiel: \"2g\" bewirkt eine Rotationsobald die "
"Dateigröße > 2.000.000.000 Byte ist; wenn auf „0“ gesetzt, erfolgt keine "
"durchgeführt: die vorhandenen rotierten Protokolldateien werden umbenannt "
"(.1 wird zu .2, .2 wird zu .3 usw.).Die aktuelle Datei wird umbenannt und "
"erhält .1 als Dateierweiterung; eine ganze Zahl mit Suffix ist erlaubt: b = "
"Bytes (Standard, wenn keine Einheit angegeben ist), k = Kilobytes, m = "
"Megabyte, g = Gigabyte, t = Terabyte; Beispiel: \"2g\" startet eine Rotation "
"sobald die Dateigröße > 2GB ist; wenn auf „0“ gesetzt, erfolgt keine "
"Rotation der Dateien (unbegrenzte Protokollgröße); WARNUNG: Bevor Sie diese "
"Option ändern,sollte sie zuerst den Komprimierungstyp über die Option "
"logger.file festlegen.rotation_compression_type"
"logger.file.rotation_compression_type festlegen"
msgid ""
"timestamp used in log files (see man strftime for date/time specifiers, "
@@ -16446,31 +16721,33 @@ msgstr ""
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"durch Kommata getrennte Liste der Hash-Algorithmen, die für die "
"Kennwortauthentifizierung im Weechat-Protokoll verwendet werden, unter "
"diesen Werten: \"plain\" (Kennwort im Klartext, nicht gehasht), \"sha256\", "
"\"sha512\", \"pbkdf2 + sha256\", \"pbkdf2 + sha512\" ), \"*\" bedeutet alle "
"Algorithmen, ein Name, der mit \"!\" beginnt ist ein negativer Wert, um die "
"Verwendung eines Algorithmus zu vermeiden. Ein Platzhalter \"*\" im Namen "
"ist zulässig (Beispiele: \"*\", \"pbkdf2 *\", \"*,! plain\")"
"Kennwortauthentifizierung für die \"api\" und \"weechat\" Protokolle "
"verwendet werden. Mögliche Werte sind: \"plain\" (Kennwort im Klartext, "
"nicht gehasht), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\" ), \"*\" bedeutet alle Algorithmen, ein Name, der mit \"!"
"\" beginnt ist ein negativer Wert, um die Verwendung eines Algorithmus zu "
"unterbinden. Ein Platzhalter \"*\" im Namen ist zulässig (Beispiele: \"*\", "
"\"pbkdf2 *\", \"*,! plain\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
"Anzahl der Iterationen, die im Weechat-Protokoll an den Client gesendet "
"werden, wenn ein Hash-Passwort mit dem Algorithmus PBKDF2 zur "
"Authentifizierung verwendet wird; Mehr Iterationen sind aus "
"Sicherheitsgründen besser, aber langsamer zu berechnen. Diese Zahl sollte "
"nicht zu hoch sein, wenn Ihre CPU langsam ist"
"Anzahl der Iterationen, die bei den Protokollen \"api\" und \"weechat\" vom "
"Client angefordert wird, wenn zur Authentifizierung ein gehashtes Passwort "
"mit dem Algorithmus PBKDF2 zur Authentifizierung verwendet wird. Eine höhere "
"Anzahl an Iterationen bietet zwar mehr Sicherheit, erfordert jedoch eine "
"verlängerte Rechenzeit; dieser Wert sollte deshalb nicht zu hoch gewählt "
"werden, falls Ihre CPU leistungsschwach ist"
msgid ""
"number of seconds to allow before and after the current time for the hash of "
@@ -16516,6 +16793,13 @@ msgstr ""
"danach, ...; umso höher die genutzte Zahl umso unsicherer das Verfahren (0 "
"oder 1 sind empfohlene Werte)"
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
"Berechtigungen für den Unix-Socket als Oktalwert (siehe man chmod); es muss "
"eine dreistellige Zahl sein, wobei jede Ziffer zwischen 0 und 7 liegen muss"
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
"insensitive, use \"(?-i)\" at beginning to make it case-sensitive), example: "
@@ -16523,7 +16807,7 @@ msgid ""
msgstr ""
"Erweiterter regulärer POSIX Ausdruck für Origins in WebSockets (Groß- und "
"Kleinschreibung wird ignoriert. Um Groß- und Kleinschreibung zu "
"unterscheiden kann \"(?-i)\" vorangestellt werden), Beispiel: ^https?://"
"unterscheiden kann \"(?-i)\" vorangestellt werden), Beispiel: \"^https?://"
"(www\\.)?example\\.(com|org)\""
msgid ""
@@ -16649,12 +16933,12 @@ msgstr "Anzahl an Clients für Relay"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
"Protokoll,Status (beide sind Optional, bei beiden Argumenten bedeutet \"*\", "
"alle; Protokolle: irc, weechat; Status: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
"alle; Protokolle: api, irc, weechat; Status: connecting, waiting_auth, "
"connected, auth_failed, disconnected)"
msgid "list of relay clients"
msgstr "Liste der Relay-Clients"
@@ -16783,6 +17067,12 @@ msgstr "%s%s: \"bind\" an Pfad %s (%s) nicht möglich: Fehler %d %s"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: \"bind\" an Port %d (%s) nicht möglich: Fehler %d %s"
#, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr ""
"%s%s: Warnung: Fehler beim Setzen der Berechtigungen für den Pfad %s (%s): "
"Fehler %d %s"
#, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: kann nicht an Pfad %s (%s) lauschen: Fehler %d %s"
@@ -16821,9 +17111,8 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: Nicht genug Speicher um an einem neuen Port zu lauschen"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgstr ""
"Übertragung von WeeChat Daten an andere Anwendungen (irc/weechat Protokoll)"
msgid "Relay WeeChat data to remote applications"
msgstr "Übertragung von WeeChat Daten an andere Anwendungen"
msgid "connecting"
msgstr "verbinden"
@@ -17062,16 +17351,17 @@ msgstr "Alt+Taste/Eingabezeile: v=zurück zur Auswahl d=zeigt Unterschiede an"
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
"%d/%d Skripten (Filter: %s) | Sortierung: %s | Alt+Taste/Eingabe: "
"%d/%d Skripts | Filter: %s) | Sortierung: %s | Alt+Taste/Eingabe: "
"i=installieren, r=entfernen, l=starten, L=erneut starten, u=beenden, "
"A=autoload, h=halten/freigeben, v=Skript anzeigen | Eingabe: q=beenden, "
"A=Autoload, h=halten/freigeben, v=Skript anzeigen | Eingabe: "
"$=aktualisieren, s:x,y=Art der Sortierung, Text=Filterung, *=Filter "
"zurücksetzen | Maus: links=Skript anwählen, rechts=installieren/entfernen"
"zurücksetzen, q=Buffer schließen | Maus: links=Skript anwählen, "
"rechts=installieren/entfernen"
msgid "Scripts"
msgstr "Skripten"
@@ -17330,7 +17620,7 @@ msgstr ""
"Um Tastenkurzbefehle im Skript-Buffer direkt nutzen zu können (zum Beispiel: "
"alt+i = installieren, alt+r = entfernen, ...), muss diese Einstellung "
"aktiviert werden. Andernfalls können Aktionen nur über die Eingabezeile "
"durchgeführt werden: i,r..."
"durchgeführt werden: i, r, ..."
msgid "color for status \"autoloaded\" (\"a\")"
msgstr "Farbe in der der Status \"autoloaded\" (\"a\") dargestellt werden soll"
@@ -17361,7 +17651,7 @@ msgid "background color in script buffer"
msgstr "Hintergrundfarbe im Skript-Buffer"
msgid "background color for selected line in script buffer"
msgstr "Hintergrundfarbe"
msgstr "Hintergrundfarbe für die ausgewählte Zeile im Skriptbuffer"
msgid "text color of dates in script buffer"
msgstr "Textfarbe für das Datum im Skript-Buffer"
@@ -17489,6 +17779,11 @@ msgstr "1 falls Skript geladen wurde"
msgid "script name with extension"
msgstr "Skriptname mit Erweiterung"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr ""
"durch Kommata getrennte Liste von Erweiterungen: Endung mit unterstützen "
"Sprachen"
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
"Name des Skriptes, mit Dateierweiterung (Platzhalter \"*\" kann verwendet "
@@ -18155,10 +18450,12 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr "> type `command_run`: Befehl(e) (erforderlich)"
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
"> type `timer`: Intervall (erforderlich), an Sekunden anpassen, maximale "
"Anzahl an Aufrufen"
"> type `timer`: Intervall (erforderlich, in Millisekunden), an Sekunde "
"anpassen, maximale Anzahl an Aufrufen"
msgid "> type `config`: name(s) of option (required)"
msgstr "> type `config`: Name der Einstellung (erforderlich)"
@@ -19079,3 +19376,37 @@ msgstr ""
"%s%s Datei \"%s\" zum Fortsetzen der Übertragung wird nicht akzeptiert "
"(Port: %d, Startposition: %llu): xfer nicht gefunden oder nicht bereit für "
"Transfer"
#~ msgid ""
#~ "Welcome to WeeChat!\n"
#~ "\n"
#~ "If you are discovering WeeChat, it is recommended to read at least the "
#~ "quickstart guide, and the user's guide if you have some time; they "
#~ "explain main WeeChat concepts.\n"
#~ "All WeeChat docs are available at: https://weechat.org/doc/\n"
#~ "\n"
#~ "Moreover, there is inline help with /help on all commands and options "
#~ "(use Tab key to complete the name).\n"
#~ "The command /fset can help to customize WeeChat.\n"
#~ "\n"
#~ "You can add and connect to an IRC server with /server and /connect "
#~ "commands (see /help server)."
#~ msgstr ""
#~ "Willkommen zu WeeChat!\n"
#~ "\n"
#~ "Wenn Du WeeChat nutzen möchtest dann solltest Du zumindest einen Blick in "
#~ "die Quickstart-Anleitung werfen. Wir empfehlen aber um den vollen "
#~ "Funktionsumfang und das Konzept hinter WeeChat kennen zu lernen, die "
#~ "Benutzeranleitung zu lesen.\n"
#~ "Die vollständige Dokumentation findet man unter: https://weechat.org/"
#~ "doc/\n"
#~ "\n"
#~ "Darüber hinaus ist in WeeChat eine interne Hilfe integriert die man mit /"
#~ "help auf alle Befehle und Optionen anwenden kann (mittels der TAB-Taste "
#~ "kann eine Namensvervollständigung durchgeführt werden).\n"
#~ "Mit dem Befehl /fset kann WeeChat sehr einfach und übersichtlich den "
#~ "eigenen Bedürfnissen angepasst werden.\n"
#~ "\n"
#~ "Um einen IRC Server zu erstellen und sich mit selbigem zu Verbinden "
#~ "müssen die Befehle /server und /connect verwendet werden (siehe /help "
#~ "server)."
+359 -47
View File
@@ -24,10 +24,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-12 20:24+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-06-28 08:46+0200\n"
"Last-Translator: Santiago Forero <santiago@forero.xyz>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: Spanish <weechat-dev@nongnu.org>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -184,10 +184,10 @@ msgstr ""
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s Copyright %s, compilado en %s %s\n"
"Desarrollado por Sébastien Helleu <flashcode@flashtux.org> - %s"
"Desarrollado por %s <%s> - %s"
msgid "Usage:"
msgstr ""
@@ -1034,6 +1034,54 @@ msgstr "Opción creada: "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%s: atención: diccionario \"%s\" no está disponible en su sistema"
#, fuzzy
msgid "No theme available"
msgstr "Variables"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sTecla \"%s\" no encontrada"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "Opción \"%s%s%s\":"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " archivo: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "descripción"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " archivo: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "versión de WeeChat"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sNo se pudo deshacer la opción \"%s\""
@@ -1222,6 +1270,16 @@ msgstr ""
"mensaje: mensaje de ausencia (si no se especifica ningún mensaje, se remueve "
"el estado ausente)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
msgid "manage bars"
msgstr "gestionar las barras"
@@ -3741,6 +3799,78 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
#, fuzzy
#| msgid "list of bar items"
msgid "manage color themes"
msgstr "lista de elementos de barra"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid "list of filters"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr "lista de filtros"
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "names of filters"
msgid "raw[rename]: rename a user theme file"
msgstr "nombre de los filtros"
#, fuzzy
#| msgid "get/set channel topic"
msgid "raw[del]: delete a user theme file"
msgstr "ver/establecer el tema del canal"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
msgid "name: name of a theme"
msgstr "habilitar soporte para ratón"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
#, fuzzy
#| msgid "values for a configuration option"
msgid "toggle value of a config option"
@@ -4327,6 +4457,15 @@ msgstr "áreas (\"chat\" o nombre de barra) para movimiento libre del cursor"
msgid "names of layouts"
msgstr "nombres de temas"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr ""
@@ -5352,6 +5491,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "localización para traducción de mensajes"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
#, fuzzy
msgid ""
"time format for dates converted to strings and displayed in messages (see "
@@ -6333,6 +6486,117 @@ msgstr "%s: error: diccionario \"%s\" no está disponible en tu sistema"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Uso de memoria (ver en \"man mallinfo\" por ayuda):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sTecla \"%s\" no encontrada"
#, fuzzy, c-format
#| msgid "%s: script \"%s\" is not installed"
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s: el script \"%s\" no esta instalado"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr ""
"%sAtención: %s, línea %d: identificador de sección desconocido (\"%s\")"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown option for section \"%s\": %s"
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr ""
"%sAtención: %s, línea %d: opción desconocida para la sección \"%s\": %s"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: no es posible analizar el archivo \"%s\""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sBuffer name \"%s\" is reserved for WeeChat"
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr "%sEl nombre del buffer \"%s\" está reservado por WeeChat"
#, fuzzy, c-format
#| msgid "%sBuffer name \"%s\" is reserved for WeeChat"
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr "%sEl nombre del buffer \"%s\" está reservado por WeeChat"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: no es posible analizar el archivo \"%s\""
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "Opción \"%s%s%s\":"
#, fuzzy, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sError: no es posible crear el archivo \"%s\""
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme \"%s\" already exists"
msgstr "%sError: el filtro \"%s\" ya existe"
#, fuzzy, c-format
#| msgid "%sUnable to rename filter \"%s\" to \"%s\""
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sError: no se pudo renombrar el filtro \"%s\" a \"%s\""
#, fuzzy, c-format
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "Filtro \"%s\" renombrado a \"%s\""
#, fuzzy, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sError: no es posible crear el archivo \"%s\""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: no es posible analizar el archivo \"%s\""
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "%sError al actualizar WeeChat con el archivo \"%s\":"
@@ -6500,35 +6764,36 @@ msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr ""
"WeeChat se está ejecutando en modo de segundo plano (Ctrl-C para salir)."
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
"¡Bienvenido a WeeChat!\n"
"\n"
"Si estás conociendo WeeChat, es recomendable que leas la guia de inicio, y "
"la guia de usuario si tienes tiempo; en ellas se explicanlo conceptos "
"principales de WeeChat.\n"
"Toda la documentación de WeeChat se encuentra disponible en: https://"
"weechat.org/doc/\n"
"\n"
"Adicionalmente, hay un menú de ayuda con el comando /help con todos los "
"comandos y opciones (usa el tabulador (Tab) para completar el nombre).\n"
"El comando /fset puede ayudar a customizar WeeChat.\n"
"\n"
"Puedes agregar y conectarte a un servidor IRC con los comandos /server y /"
"connect (más información en /help server)."
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
@@ -8044,7 +8309,8 @@ msgstr "Archivo de configuración \"%s\" desconocido"
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -12081,8 +12347,8 @@ msgstr "nombre del servidor"
msgid "get nick from IRC host"
msgstr "devuelve apodo de un host IRC"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "IRC host (como `:apodo!nombre@servidor.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "IRC host (como `:apodo!nombre@servidor`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -12324,8 +12590,8 @@ msgstr "%s%s: ¡este buffer no es un canal!"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -13526,7 +13792,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -15390,11 +15656,11 @@ msgstr ""
#, fuzzy
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"lista de plugins separados por comas para cargar automáticamente al iniciar, "
"\"*\" significa todos los plugins encontrados, un nombre empezando con \"!\" "
@@ -15402,10 +15668,10 @@ msgstr ""
"\"*\" para indicar varios plugins (ejemplo: \"*\" o \"*,!lua,!tcl\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -15438,6 +15704,11 @@ msgid ""
"1 are recommended values)"
msgstr ""
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
# why is case insensitive important? ips use numbers and urls are case insensible.
#, fuzzy
msgid ""
@@ -15552,7 +15823,7 @@ msgstr "Lista de clientes a retransmitir"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
@@ -15675,6 +15946,10 @@ msgstr "%s%s: error con \"bind\" en el puerto %d (%s)"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: error con \"bind\" en el puerto %d (%s)"
#, fuzzy, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s%s: no se puede aceptar el cliente en el puerto %d (%s)"
#, fuzzy, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: no se puede aceptar el cliente en el puerto %d (%s)"
@@ -15711,7 +15986,7 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: no hay memoria suficiente para escuchar en un nuevo puerto"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgid "Relay WeeChat data to remote applications"
msgstr ""
msgid "connecting"
@@ -15960,9 +16235,9 @@ msgstr ""
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
@@ -16327,6 +16602,11 @@ msgstr "scripts en %s cargados:"
msgid "script name with extension"
msgstr "lista de scripts"
#, fuzzy
#| msgid "comma separated list of file name extensions for plugins"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "lista separada por comas de extensiones de archivo para plugins"
#, fuzzy
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
@@ -16956,7 +17236,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
@@ -17805,3 +18087,33 @@ msgid ""
msgstr ""
"%s%s: no es posible aceptar la continuación del archivo \"%s\" (puerto: %d, "
"posición inicial: %llu): xfer encontrado o no está listo para transferir"
#~ msgid ""
#~ "Welcome to WeeChat!\n"
#~ "\n"
#~ "If you are discovering WeeChat, it is recommended to read at least the "
#~ "quickstart guide, and the user's guide if you have some time; they "
#~ "explain main WeeChat concepts.\n"
#~ "All WeeChat docs are available at: https://weechat.org/doc/\n"
#~ "\n"
#~ "Moreover, there is inline help with /help on all commands and options "
#~ "(use Tab key to complete the name).\n"
#~ "The command /fset can help to customize WeeChat.\n"
#~ "\n"
#~ "You can add and connect to an IRC server with /server and /connect "
#~ "commands (see /help server)."
#~ msgstr ""
#~ "¡Bienvenido a WeeChat!\n"
#~ "\n"
#~ "Si estás conociendo WeeChat, es recomendable que leas la guia de inicio, "
#~ "y la guia de usuario si tienes tiempo; en ellas se explicanlo conceptos "
#~ "principales de WeeChat.\n"
#~ "Toda la documentación de WeeChat se encuentra disponible en: https://"
#~ "weechat.org/doc/\n"
#~ "\n"
#~ "Adicionalmente, hay un menú de ayuda con el comando /help con todos los "
#~ "comandos y opciones (usa el tabulador (Tab) para completar el nombre).\n"
#~ "El comando /fset puede ayudar a customizar WeeChat.\n"
#~ "\n"
#~ "Puedes agregar y conectarte a un servidor IRC con los comandos /server y /"
#~ "connect (más información en /help server)."
+443 -82
View File
@@ -23,10 +23,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-21 17:29+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-07-04 22:02+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: French <flashcode@flashtux.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -139,7 +139,7 @@ msgid ""
"by default in headless mode WeeChat is blocking and does not run in "
"background"
msgstr ""
"lancer WeeChat comme un « daemon » (fork, nouveau groupe pour le processus, "
"lancer WeeChat comme un « daemon » (fork, nouveau groupe pour le processus, "
"fermeture des descripteurs de fichiers); par défaut en mode sans interface "
"WeeChat est bloquant et ne tourne pas en tâche de fond"
@@ -168,10 +168,10 @@ msgstr "désactiver init/deinit de gcrypt"
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s Copyright %s, compilé le %s %s\n"
"Développé par Sébastien Helleu <flashcode@flashtux.org> - %s"
"Développé par %s <%s> - %s"
msgid "Usage:"
msgstr "Utilisation:"
@@ -180,11 +180,11 @@ msgid "[option...] [plugin:option...]"
msgstr "[option...] [extension:option...]"
msgid "Extra options in headless mode:"
msgstr "Options supplémentaires en mode sans interface (« headless »):"
msgstr "Options supplémentaires en mode sans interface (« headless »):"
msgid "Debug options (for tools like valgrind, DO NOT USE IN PRODUCTION):"
msgstr ""
"Options de debug (pour des outils comme Valgrind, NE PAS UTILISER EN "
"Options de debug (pour des outils comme valgrind, NE PAS UTILISER EN "
"PRODUCTION) :"
#, c-format
@@ -989,6 +989,47 @@ msgstr "Option créée : "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%sLa fonction \"%s\" n'est pas disponible sur ce système"
msgid "No theme available"
msgstr "Aucun thème disponible"
msgid "Themes:"
msgstr "Thèmes:"
#, c-format
msgid " %s %s%s%s (file)"
msgstr " %s %s%s%s (fichier)"
#, c-format
msgid "%sTheme \"%s\" not found"
msgstr "%sThème \"%s\" non trouvé"
#, c-format
msgid "Theme \"%s%s%s\":"
msgstr "Thème \"%s%s%s\" :"
#, c-format
msgid " source: %s"
msgstr " source: %s"
msgid " source: built-in (in-memory)"
msgstr " source: intégré (en mémoire)"
#, c-format
msgid " description: %s"
msgstr " description: %s"
#, c-format
msgid " date: %s"
msgstr " date: %s"
#, c-format
msgid " WeeChat version: %s"
msgstr " version de WeeChat: %s"
#, c-format
msgid " overrides: %d"
msgstr " remplace: %d"
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sImpossible de supprimer/réinitialiser l'option \"%s\""
@@ -1155,6 +1196,20 @@ msgstr ""
"message : message pour l'absence (si pas de message donné, le statut "
"d'absence est supprimé)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
"Par défaut le statut d'absence est affiché en local seulement par "
"l'extension irc (voir /help irc.look.display_away)."
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
"Cette commande peut être attrapée par d'autres extensions ou scripts (voir "
"la \"Référence API extension\", fonction \"hook_command_run\")."
msgid "manage bars"
msgstr "gestion des barres"
@@ -1499,7 +1554,7 @@ msgid ""
"\"weechat.look.jump_current_to_previous_buffer\""
msgstr ""
"> \"*\" : saut au numéro en utilisant l'option "
"\"jump_current_to_previous_buffer\""
"\"weechat.look.jump_current_to_previous_buffer\""
msgid "raw[-]: jump to first buffer number"
msgstr "raw[-] : sauter au premier numéro de tampon"
@@ -1766,7 +1821,7 @@ msgid ""
"raw[key]: enable keyboard and mouse debug: display raw codes, expanded key "
"name and associated command (\"q\" to quit this mode)"
msgstr ""
"raw[key] : activer le debug pour le clavier et la souris : afficher les "
"raw[key] : activer le debug pour le clavier et la souris : afficher les "
"codes bruts, le nom étendu et la commande associée (\"q\" pour quitter ce "
"mode)"
@@ -3003,7 +3058,7 @@ msgid ""
"Key names allowed: f0 to f20, home, insert, delete, end, backspace, pgup, "
"pgdn, up, down, right, left, tab, return, comma, space."
msgstr ""
"Noms de touches autorisés : f0 à f20, home, insert, delete, end, backspace, "
"Noms de touches autorisés: f0 à f20, home, insert, delete, end, backspace, "
"pgup, pgdn, up, down, right, left, tab, return, comma, space."
msgid "Combo of keys must be separated by a comma."
@@ -3052,7 +3107,7 @@ msgid ""
"as argument."
msgstr ""
"Une valeur spéciale pour la commande avec le format \"hsignal:nom\" peut "
"être utilisée dans le contexte \"mouse\", cela enverra le signal \"nom\" "
"être utilisée dans le contexte \"mouse\", cela enverra le hsignal \"nom\" "
"avec la table de hachage du focus comme paramètre."
msgid ""
@@ -3501,7 +3556,7 @@ msgid " display a reminder on core buffer with a highlight:"
msgstr " afficher un pense-bête sur le tampon core avec un highlight :"
msgid " /print -core -tags notify_highlight Reminder: buy milk"
msgstr " /print -core -tags notify_highlight Pense-bête : acheter du lait"
msgstr " /print -core -tags notify_highlight Pense-bête: acheter du lait"
msgid " display an error on core buffer:"
msgstr " afficher une erreur sur le tampon core :"
@@ -3971,6 +4026,94 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr "nombre : nombre de processus à nettoyer"
msgid "manage color themes"
msgstr "gestion des thèmes de couleurs"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
"[list [-backups]] || apply <nom> || reset || save <nom> || rename <ancien> "
"<nouveau> || del <nom> || info <nom>"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr ""
"raw[list]: afficher les thèmes enregistrés et tous les fichiers *.theme "
"dans le répertoire de configuration de WeeChat; le thème actif "
"(correspondant à weechat.look.theme) est marqué avec \"->\""
msgid "raw[-backups]: display backup theme files"
msgstr "raw[-backups] : afficher les fichier de sauvegarde de thèmes"
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
"raw[apply]: appliquer un thème (définir chaque option personnalisable par "
"thème à la valeur du thème); si un fichier nommé <nom>.theme existe dans le "
"répertoire \"themes\", il masque tout thème intégré du même nom"
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
"raw[reset]: réinitialiser toutes les options de thème à leurs valeurs par "
"défaut (rétablit l'apparence d'origine de WeeChat)"
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
"raw[save]: sauvegarder les options de thème dans un fichier <nom>.theme "
"dans le répertoire \"themes\"; toutes les options de thème sont écrites, le "
"fichier est donc autonome; le nom ne doit pas correspondre à un thème "
"intégré ou démarrer par \"backup-\""
msgid "raw[rename]: rename a user theme file"
msgstr "raw[rename] : renommer un fichier de thème utilisateur"
msgid "raw[del]: delete a user theme file"
msgstr "raw[del] : supprimer un fichier de thème utilisateur"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
"raw[info]: afficher les détails sur un thème (nom, description, date de "
"création, version de WeeChat, nombre d'options remplacées)"
msgid "name: name of a theme"
msgstr "nom : nom du thème"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
"Les thèmes sont des ensembles nommés de redéfinitions d'options. Les thèmes "
"intégrés sont enregistrés en mémoire par le cœur, les plugins ou les "
"scripts; les thèmes utilisateur sont lus à partir de fichiers situés dans "
"le répertoire \"themes\" du répertoire de configuration de WeeChat."
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
"Par défaut, la commande `/theme apply` crée une sauvegarde des valeurs du "
"thème actuel dans le répertoire \"themes\" avant de les appliquer (nom de "
"fichier: \"backup-<horodatage>.theme\"); l'état précédent peut être "
"restauré à l'aide de la commande `/theme apply backup-<horodatage>`. Ce "
"comportement est régi par l'option weechat.look.theme_backup."
msgid "toggle value of a config option"
msgstr "basculer la valeur d'une option de configuration"
@@ -4100,7 +4243,8 @@ msgid ""
"makes possible a delayed restoration (see below)"
msgstr ""
"raw[-quit] : fermer *TOUTES* les connexions, sauvegarder la session et "
"quitter, ce qui rend possible une restauration différée (voir ci-dessous)"
"quitter WeeChat, ce qui rend possible une restauration différée (voir ci-"
"dessous)"
msgid ""
"raw[-o]: send number of upgrades and date of first/last start to current "
@@ -4612,6 +4756,17 @@ msgstr "zones (\"chat\" ou un nom de barre) pour le mouvement libre du curseur"
msgid "names of layouts"
msgstr "noms des dispositions"
msgid "names of themes (built-ins + user files + backups)"
msgstr "noms des thèmes (intégrés + fichiers utilisateur + sauvegardes)"
msgid "names of user theme files (without built-ins and backups)"
msgstr "noms des thèmes utilisateur (sans les intégrés et sauvegardes)"
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
"noms des fichiers de thèmes sur le disque (fichiers utilisateur + "
"sauvegardes, pas les intégrés)"
msgid "names of secured data (file sec.conf, section data)"
msgstr "noms de données sécurisées (fichier sec.conf, section data)"
@@ -5785,6 +5940,29 @@ msgid "number of spaces used to display tabs in messages"
msgstr ""
"nombre d'espaces utilisés pour afficher les tabulations dans les messages"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
"nom du dernier thème appliqué avec la commande /theme (défini "
"automatiquement, ne pas changer manuellement); à titre d'information "
"seulement, le thème n'est pas réappliqué au démarrage"
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
"créer un fichier de sauvegarde des options de thème actuelles avant "
"d'appliquer un thème avec la commande `/theme` ; si le fichier de sauvegarde "
"ne peut pas être écrit, l'application est annulée (aucune option n'est "
"modifiée); le fichier de sauvegarde est enregistré dans le répertoire "
"\"themes\" situé dans le répertoire de configuration de WeeChat et peut être "
"restauré à l'aide de la commande: `/theme apply backup-<horodatage>`"
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -6879,6 +7057,109 @@ msgstr "La fonction système \"%s\" n'est pas disponible"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Utilisation des ressources (voir \"man getrusage\" pour de l'aide) :"
msgid "WeeChat default theme for light-background terminals"
msgstr "Thème par défaut de WeeChat par défaut pour les terminaux à fond clair"
msgid "Automatic backup"
msgstr "Sauvegarde automatique"
#, c-format
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sThème: option \"%s\" non trouvée, ignorée"
#, c-format
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%sThème: l'option \"%s\" n'est pas personnalisable par thème, ignorée"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr "%s%s: ligne %d: en-tête de section mal formé"
#, c-format
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr "%s%s: ligne %d: section \"%s\" inconnue, ignorée"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr "%s%s: ligne %d: séparateur '=' manquant"
#, c-format
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr "%s%s: ligne %d: clé [info] \"%s\" inconnue, ignorée"
#, c-format
msgid "%sFailed to parse theme file \"%s\""
msgstr "%sÉchec de l'analyse du fichier de thème \"%s\""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
"%sImpossible de créer une sauvegarde du thème; abandon de l'application "
"(désactivez l'option weechat.look.theme_backup pour forcer)"
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
"État précédent sauvé sous le thème \"%s\"; pour restaurer: /theme apply %s"
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
"%sImpossible de créer une sauvegarde du thème; abandon de la "
"réinitialisation (désactivez l'option weechat.look.theme_backup pour forcer)"
#, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr "%sLe nom \"%s\" est réservé pour les sauvegardes automatiques"
#, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr "%sLe nom \"%s\" est réservé pour un thème intégré"
#, c-format
msgid "%sFailed to save theme \"%s\""
msgstr "%sÉchec de sauvegarde du thème \"%s\""
#, c-format
msgid "Theme saved to: %s"
msgstr "Thème sauvegardé vers: %s"
#, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sImpossible de renommer le thème intégré \"%s\""
#, c-format
msgid "%sNew name is the same as old name"
msgstr "%sLe nouveau nom est le même que l'ancien"
#, c-format
msgid "%sTheme \"%s\" already exists"
msgstr "%sLe thème \"%s\" existe déjà"
#, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sImpossible de renommer le thème \"%s\" en \"%s\""
#, c-format
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "Thème \"%s\" renommé en \"%s\""
#, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sImpossible de supprimer le thème intégré \"%s\""
#, c-format
msgid "%sFailed to delete theme \"%s\""
msgstr "%sImpossible de supprimer le thème \"%s\""
#, c-format
msgid "Theme deleted: %s"
msgstr "Thème supprimé : %s"
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "%sErreur de mise à jour de WeeChat avec le fichier \"%s\" :"
@@ -7039,35 +7320,46 @@ msgstr "Fin du transfert d'URL '%s', transfert arrêté"
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "WeeChat tourne sans interface (ctrl-c pour quitter)."
msgid "Welcome to WeeChat!"
msgstr "Bienvenue dans WeeChat !"
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
"Si vous découvrez WeeChat, il est recommandé de lire au moins le guide de "
"démarrage rapide, et le guide utilisateur si vous avez le temps ; ils "
"expliquent les concepts principaux de WeeChat."
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr "Toutes les documentations WeeChat sont disponibles ici : %s"
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
"De plus, il y a de l'aide en ligne avec /help sur toutes les commandes et "
"options (utilisez la touche Tab pour compléter le nom)."
msgid "The command /fset can help to customize WeeChat."
msgstr "La commande /fset peut aider à paramétrer WeeChat."
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
"Bienvenue dans WeeChat !\n"
"\n"
"Si vous découvrez WeeChat, il est recommandé de lire au moins le guide de "
"démarrage rapide, et le guide utilisateur si vous avez le temps ; ils "
"expliquent les concepts principaux de WeeChat.\n"
"Toutes les documentations sont disponibles ici : https://weechat.org/doc/\n"
"\n"
"De plus, il y a de l'aide en ligne avec /help sur toutes les commandes et "
"options (utilisez la touche Tab pour compléter le nom).\n"
"La commande /fset peut aider à paramétrer WeeChat.\n"
"\n"
"Vous pouvez ajouter et vous connecter à un serveur IRC avec les commandes /"
"server et /connect (voir /help server)."
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
"Le thème \"light\" sera automatiquement appliqué. Utilisez /theme reset pour "
"revenir au thème sombre par défaut."
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
msgid ""
@@ -8007,7 +8299,7 @@ msgid ""
"careful, using more than one bar item slows down the display of buffers list"
msgstr ""
"nombre d'objets de barre buflist qui peuvent être utilisés ; les objets de "
"barre sont : \"buflist\", \"buflist2\", \"buflist3\", \"buflist4\" et "
"barre sont : \"buflist\", \"buflist2\", \"buflist3\", \"buflist4\" et "
"\"buflist5\" ; attention, utiliser plus d'un objet de barre ralentit "
"l'affichage de la liste des tampons"
@@ -8871,10 +9163,13 @@ msgstr "> `f:xxx` : afficher seulement le fichier de configuration \"xxx\""
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
"> `t:xxx` : afficher seulement le type \"xxx\" (bool/int/str/col/enum ou "
"boolean/integer/string/color/enum)"
"boolean/integer/string/color/enum); la valeur spéciale \"themable\" peut "
"être utilisée pour afficher toutes les options qui peuvent être utilisées "
"dans des thèmes, peu importe le type"
msgid "> `d`: show only changed options"
msgstr "> `d` : afficher seulement les options changées"
@@ -11184,7 +11479,7 @@ msgid ""
msgstr ""
"filtre : définir un nouveau filtre pour voir seulement les messages "
"correspondants (ce filtre peut aussi être utilisé en entrée du tampon des "
"données brutes) ; les formats autorisés sont :"
"données brutes IRC) ; les formats autorisés sont :"
msgid "> `*`: show all messages (no filter)"
msgstr "> `*` : afficher tous les messages (pas de filtre)"
@@ -12857,8 +13152,8 @@ msgstr "nom de serveur"
msgid "get nick from IRC host"
msgstr "retourne le pseudo à partir d'un host IRC"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "host IRC (comme `:pseudo!nom@serveur.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "host IRC (comme `:pseudo!nom@serveur`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -13082,11 +13377,12 @@ msgstr "%s%s : ce tampon n'est pas un canal !"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
"%d canaux (total : %d) | Filtre : %s | Tri : %s | Touche(entrée) : "
"ctrl+j=rejoindre canal, ($)=rafraîchir, (q)=fermer le tampon"
"%d canaux (total : %d) | Filtre : %s | Tri : %s | Touches : ctrl+j=rejoindre "
"canal | Entrée: $=rafraîchir, s:x,y=trier, mots=filtrer, *=réinit filtre, "
"q=fermer le tampon"
msgid "Empty list of channels, try \"$\" to refresh list"
msgstr "La liste de canaux est vide, essayez \"$\" pour rafraîchir la liste"
@@ -14294,7 +14590,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -14305,7 +14601,7 @@ msgstr ""
"entier avec un suffixe est accepté : b = octets (par défaut si pas d'unité "
"spécifiée), k = kilo-octets, m = méga-octets, g = giga-octets, t = téra-"
"octets ; exemple : \"2g\" provoque une rotation si la taille du fichier est "
"> 2 000 000 000 octets ; si défini à \"0\", aucune rotation n'est effectuée "
"supérieure à 2 Go ; si défini à \"0\", aucune rotation n'est effectuée "
"(taille de log illimitée) ; ATTENTION : avant de changer cette option, vous "
"devriez d'abord définir le type de compression via l'option "
"logger.file.rotation_compression_type"
@@ -15330,7 +15626,8 @@ msgstr "%sremote[%s] : impossible de créer le socket"
#, c-format
msgid "%sremote[%s]: gnutls: failed to initialize certificate structure"
msgstr "%sremote[%s] : échec d'initialisation de la structure du certificat"
msgstr ""
"%sremote[%s] : gnutls: échec d'initialisation de la structure du certificat"
#, c-format
msgid "remote[%s]: gnutls: receiving %d certificate"
@@ -16133,31 +16430,31 @@ msgstr ""
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"liste des algorithmes de hachage pour l'authentification par mot de passe "
"dans le protocole relay, parmi ces valeurs : \"plain\" (mot de passe en "
"clair, non haché), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\" ; \"*\" signifie tous les algorithmes, un nom commençant "
"par \"!\" est une valeur négative pour empêcher un algorithme d'être "
"utilisé, le caractère joker \"*\" est autorisé dans les noms (exemples : "
"\"*\", \"pbkdf2*\", \"*,!plain\")"
"dans les protocoles \"api\" et \"weechat\", parmi ces valeurs : \"plain\" "
"(mot de passe en clair, non haché), \"sha256\", \"sha512\", "
"\"pbkdf2+sha256\", \"pbkdf2+sha512\" ; \"*\" signifie tous les algorithmes, "
"un nom commençant par \"!\" est une valeur négative pour empêcher un "
"algorithme d'être utilisé, le caractère joker \"*\" est autorisé dans les "
"noms (exemples : \"*\", \"pbkdf2*\", \"*,!plain\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
"nombre d'itérations demandées au client dans le protocole weechat lorsqu'un "
"mot de passe haché avec l'algorithme PBKDF2 est utilisé pour "
"l'authentification ; plus d'itérations est mieux en terme de sécurité mais "
"est plus lent à calculer ; ce nombre ne doit pas être trop élevé si votre "
"micro-processeur est lent"
"nombre d'itérations demandées au client dans les protocoles \"api\" et "
"\"weechat\" lorsqu'un mot de passe haché avec l'algorithme PBKDF2 est "
"utilisé pour l'authentification ; plus d'itérations est mieux en terme de "
"sécurité mais est plus lent à calculer ; ce nombre ne doit pas être trop "
"élevé si votre micro-processeur est lent"
msgid ""
"number of seconds to allow before and after the current time for the hash of "
@@ -16202,6 +16499,13 @@ msgstr ""
"accepter deux mots de passe avant, le courant et deux après, ... ; un nombre "
"élevé réduit le niveau de sécurité (0 ou 1 sont les valeurs recommandées)"
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
"permissions pour le socket Unix, sous forme de valeur octale (voir man "
"chmod); doit être un nombre avec 3 chiffres, chacun compris entre 0 et 7"
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
"insensitive, use \"(?-i)\" at beginning to make it case-sensitive), example: "
@@ -16332,11 +16636,11 @@ msgstr "nombre de clients pour le relai"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
"protocole,statut (les deux sont optionnels, pour chaque paramètre \"*\" "
"signifie tous ; protocoles : irc, weechat ; statuts : connecting, "
"signifie tous ; protocoles : api, irc, weechat ; statuts : connecting, "
"waiting_auth, connected, auth_failed, disconnected)"
msgid "list of relay clients"
@@ -16466,6 +16770,12 @@ msgstr "%s%s : \"bind\" impossible sur le chemin %s (%s) : erreur %d %s"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s : \"bind\" impossible sur le port %d (%s) : erreur %d %s"
#, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr ""
"%s%s : attention: échec de changement des permissions sur le chemin %s "
"(%s) : erreur %d %s"
#, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s : \"listen\" impossible sur le chemin %s (%s) : erreur %d %s"
@@ -16504,10 +16814,8 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s : pas assez de mémoire pour écouter sur le nouveau port"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgstr ""
"Relai des données WeeChat à des applications distantes (protocoles irc/"
"weechat)"
msgid "Relay WeeChat data to remote applications"
msgstr "Relai des données WeeChat à des applications distantes"
msgid "connecting"
msgstr "connexion"
@@ -16743,16 +17051,16 @@ msgstr "Alt+touche/entrée : v=retour à la liste d=sauter au diff"
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
"%d/%d scripts (filtre : %s) | Tri : %s | Alt+touche/entrée : i=installer, "
"%d/%d scripts | Filtre: %s | Tri : %s | Alt+touche/entrée : i=installer, "
"r=supprimer, l=charger, L=recharger, u=décharger, A=chargement auto, "
"h=(dé)figer, v=voir script | Entrée : q=fermer, $=rafraîchir, s:x,y=trier, "
"mots=filtrer, *=réinit filtre | Souris : gauche=sélectionner, "
"droit=installer/supprimer"
"h=(dé)figer, v=voir script | Entrée : $=rafraîchir, s:x,y=trier, "
"mots=filtrer, *=réinit filtre, q=fermer le tampon | Souris : "
"gauche=sélectionner, droit=installer/supprimer"
msgid "Scripts"
msgstr "Scripts"
@@ -17153,6 +17461,9 @@ msgstr "1 si le script est chargé"
msgid "script name with extension"
msgstr "nom du script avec l'extension"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "liste de extension:extension_fichier avec les langages supportés"
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
"nom du script avec extension (le caractère joker \"*\" est autorisé) "
@@ -17776,7 +18087,7 @@ msgid "> type `signal`: name(s) of signal (required)"
msgstr "> type `signal` : nom(s) de signal (obligatoire)"
msgid "> type `hsignal`: name(s) of hsignal (required)"
msgstr "> type `hsignal` : nom(s) de signal (obligatoire)"
msgstr "> type `hsignal` : nom(s) de hsignal (obligatoire)"
msgid "> type `modifier`: name(s) of modifier (required)"
msgstr "> type `modifier` : nom(s) de modificateur (obligatoire)"
@@ -17805,10 +18116,12 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr "> type `command_run` : commande(s) (obligatoire)"
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
"> type `timer` : intervalle (obligatoire), alignement sur la seconde, nombre "
"max d'appels"
"> type `timer` : intervalle (obligatoire, en millisecondes), alignement sur "
"la seconde, nombre max d'appels"
msgid "> type `config`: name(s) of option (required)"
msgstr "> type `config` : nom(s) de l'option (obligatoire)"
@@ -18730,3 +19043,51 @@ msgid ""
msgstr ""
"%s%s : impossible d'accepter de continuer le fichier \"%s\" (port : %d, "
"position de départ : %llu) : xfer non trouvé ou non prêt pour le transfert"
#~ msgid "Automatic backup written before /theme apply"
#~ msgstr "Sauvegarde automatique écrite avant /theme apply"
#~ msgid ""
#~ "Welcome to WeeChat!\n"
#~ "\n"
#~ "If you are discovering WeeChat, it is recommended to read at least the "
#~ "quickstart guide, and the user's guide if you have some time; they "
#~ "explain main WeeChat concepts.\n"
#~ "All WeeChat docs are available at: https://weechat.org/doc/\n"
#~ "\n"
#~ "Moreover, there is inline help with /help on all commands and options "
#~ "(use Tab key to complete the name).\n"
#~ "The command /fset can help to customize WeeChat.\n"
#~ "\n"
#~ "You can add and connect to an IRC server with /server and /connect "
#~ "commands (see /help server)."
#~ msgstr ""
#~ "Bienvenue dans WeeChat !\n"
#~ "\n"
#~ "Si vous découvrez WeeChat, il est recommandé de lire au moins le guide de "
#~ "démarrage rapide, et le guide utilisateur si vous avez le temps ; ils "
#~ "expliquent les concepts principaux de WeeChat.\n"
#~ "Toutes les documentations WeeChat sont disponibles ici : https://"
#~ "weechat.org/doc/\n"
#~ "\n"
#~ "De plus, il y a de l'aide en ligne avec /help sur toutes les commandes et "
#~ "options (utilisez la touche Tab pour compléter le nom).\n"
#~ "La commande /fset peut aider à paramétrer WeeChat.\n"
#~ "\n"
#~ "Vous pouvez ajouter et vous connecter à un serveur IRC avec les "
#~ "commandes /server et /connect (voir /help server)."
#~ msgid ""
#~ "raw[delete]: delete a user theme file (refuses to delete built-in themes, "
#~ "which have no file)"
#~ msgstr "raw[delete] : supprimer un fichier thème de l'utilisateur"
#~ msgid "No theme registered"
#~ msgstr "Aucun thème enregistré"
#~ msgid ""
#~ "raw[list]: list registered themes (default action with no argument); "
#~ "active theme is marked with \"->\""
#~ msgstr ""
#~ "raw[list] : afficher les thèmes enregistrés (sans paramètre, cette liste "
#~ "est affichée), le thème actif est marqué avec \"->\""
+302 -30
View File
@@ -22,10 +22,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-03-08 08:59+0100\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: Hungarian <weechat-dev@nongnu.org>\n"
"Language: hu\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -159,7 +159,7 @@ msgstr ""
#, fuzzy, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"%s Copyright (C) 2003-2010, fordítva: %s %s\n"
"Fejlesztő: Sébastien Helleu <flashcode@flashtux.org> - %s"
@@ -991,6 +991,48 @@ msgstr "nincs a szobában"
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%s a \"%s\" modul nem található\n"
#, fuzzy
msgid "No theme available"
msgstr " . típus: szám\n"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme \"%s\" not found"
msgstr "%s a \"%s\" szerver nem található\n"
#, fuzzy, c-format
msgid "Theme \"%s%s%s\":"
msgstr "Felhasználók a %s%s%s szobában: %s["
#, fuzzy, c-format
msgid " source: %s"
msgstr " IRC(%s)\n"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
msgid " description: %s"
msgstr " . leírás : %s\n"
#, fuzzy, c-format
msgid " date: %s"
msgstr " IRC(%s)\n"
#, fuzzy, c-format
msgid " WeeChat version: %s"
msgstr "WeeChat szlogen"
#, c-format
msgid " overrides: %d"
msgstr ""
#, fuzzy, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%s nem sikerült a modul opciókat elmenteni\n"
@@ -1158,6 +1200,16 @@ msgstr ""
" üzenet: távolléti üzenet (ha nincs üzenet megadva, a távolléti státusz "
"eltávolítása)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
#, fuzzy
msgid "manage bars"
msgstr "pufferek kezelése"
@@ -3501,6 +3553,75 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
#, fuzzy
msgid "manage color themes"
msgstr "Aliaszok listája:\n"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr "Aliaszok listája:\n"
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
msgid "raw[rename]: rename a user theme file"
msgstr "Aliaszok listája:\n"
#, fuzzy
#| msgid "get/set channel topic"
msgid "raw[del]: delete a user theme file"
msgstr "szoba témájának olvasása/módosítása"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
msgid "name: name of a theme"
msgstr "Aliaszok listája:\n"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
#, fuzzy
msgid "toggle value of a config option"
msgstr "Nem található az opció\n"
@@ -4057,6 +4178,15 @@ msgstr ""
msgid "names of layouts"
msgstr "Aliaszok listája:\n"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr ""
@@ -4896,6 +5026,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "válasz ping üzenetre"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
#, fuzzy
msgid ""
"time format for dates converted to strings and displayed in messages (see "
@@ -5856,6 +6000,104 @@ msgstr "%s a \"%s\" modul nem található\n"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr ""
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%s a \"%s\" szerver nem található\n"
#, fuzzy, c-format
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s a \"%s\" szerver nem található\n"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr "%s %s, %d. sor: ismeretlen csoportazonosító (\"%s\")\n"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr "%s %s, %d. sor: ismeretlen csoportazonosító (\"%s\")\n"
#, fuzzy, c-format
msgid "%sFailed to parse theme file \"%s\""
msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n"
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr ""
#, fuzzy, c-format
msgid "%sFailed to save theme \"%s\""
msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n"
#, fuzzy, c-format
msgid "Theme saved to: %s"
msgstr "Felhasználók a %s%s%s szobában: %s["
#, fuzzy, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%s nem sikerült a \"%s\" fájlt létrehozni\n"
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme \"%s\" already exists"
msgstr "%s az ignore már létezik\n"
#, fuzzy, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%s ismeretlen opció a \"%s\" parancsnak\n"
#, fuzzy, c-format
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "a felhasználók le lettek tiltva"
#, fuzzy, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%s nem sikerült a \"%s\" fájlt létrehozni\n"
#, fuzzy, c-format
msgid "%sFailed to delete theme \"%s\""
msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n"
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, fuzzy, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "WeeChat frissítése...\n"
@@ -6015,22 +6257,37 @@ msgstr ""
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr ""
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
msgid ""
@@ -7516,7 +7773,8 @@ msgstr "szerver konfigurációs fájljának újraolvastatása"
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -11281,7 +11539,7 @@ msgstr "cél: szerver neve"
msgid "get nick from IRC host"
msgstr "név vagy gép letiltása"
msgid "IRC host (like `:nick!name@server.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr ""
msgid ""
@@ -11515,8 +11773,8 @@ msgstr "Ez az ablak nem egy szoba!\n"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -12634,7 +12892,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -14391,21 +14649,21 @@ msgstr ""
#, fuzzy
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"automatikusan betöltendő modulok vesszővel elválasztott listája, \"*\" "
"esetén az összes fellelt modul (az elnevezés lehet részleges, például a "
"\"perl\" elegendő \"libperl.so\" helyett)"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -14438,6 +14696,11 @@ msgid ""
"1 are recommended values)"
msgstr ""
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
"insensitive, use \"(?-i)\" at beginning to make it case-sensitive), example: "
@@ -14539,7 +14802,7 @@ msgstr "Nincs szerver.\n"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
@@ -14660,6 +14923,10 @@ msgstr "%s nem sikerült a csatornát létrehozni\n"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s nem sikerült a csatornát létrehozni\n"
#, fuzzy, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s nem sikerült a csatornát létrehozni\n"
#, fuzzy, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s nem sikerült a csatornát létrehozni\n"
@@ -14696,7 +14963,7 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s nincs elegendő memória új DCC számára\n"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgid "Relay WeeChat data to remote applications"
msgstr ""
#, fuzzy
@@ -14939,9 +15206,9 @@ msgstr ""
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
@@ -15295,6 +15562,9 @@ msgstr "FIFO cső bezárva\n"
msgid "script name with extension"
msgstr "Aliaszok listája:\n"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr ""
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
@@ -15888,7 +16158,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
+327 -36
View File
@@ -22,10 +22,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-12 20:24+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-05-30 14:02+0200\n"
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: Italian <weechat-dev@nongnu.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -164,10 +164,10 @@ msgstr ""
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s Copyright %s, compilato il %s %s\n"
"Sviluppato da Sébastien Helleu <flashcode@flashtux.org> - %s"
"Sviluppato da %s <%s> - %s"
msgid "Usage:"
msgstr ""
@@ -999,6 +999,54 @@ msgid "%sFunction \"%s\" is not available on this system"
msgstr ""
"%s: attenzione: il dizionario \"%s\" non è disponibile su questo sistema"
#, fuzzy
msgid "No theme available"
msgstr "Variabili"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sTasto \"%s\" non trovato"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "Opzione \"%s%s%s\":"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " file: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "descrizione"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " file: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "versione di WeeChat"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sImpossibile disabilitare l'opzione \"%s\""
@@ -1174,6 +1222,16 @@ msgstr ""
"messaggio: messaggio di assenza (se non specificato, lo stato di assenza "
"viene rimosso)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
msgid "manage bars"
msgstr "gestione delle barre"
@@ -3672,6 +3730,78 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
#, fuzzy
#| msgid "list of bar items"
msgid "manage color themes"
msgstr "elenco degli elementi barra"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid "list of filters"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr "elenco dei filtri"
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "names of filters"
msgid "raw[rename]: rename a user theme file"
msgstr "nomi dei filtri"
#, fuzzy
#| msgid "get/set channel topic"
msgid "raw[del]: delete a user theme file"
msgstr "legge/modifica argomento del canale"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
msgid "name: name of a theme"
msgstr "abilita il supporto del mouse"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
#, fuzzy
#| msgid "values for a configuration option"
msgid "toggle value of a config option"
@@ -4262,6 +4392,15 @@ msgstr "aree (\"chat\" o nome barra) per il movimento libero del cursore"
msgid "names of layouts"
msgstr "nomi dei layout"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
#, fuzzy
msgid "names of secured data (file sec.conf, section data)"
msgstr "nome dei dati sensibili (file sec.conf, sezione data)"
@@ -5309,6 +5448,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "locale usato per la traduzione dei messaggi"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -6321,6 +6474,114 @@ msgstr "%s: errore: il dizionario \"%s\" non è disponibile su questo sistema"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Uso della memoria (consultare \"man mallinfo\" per aiuto):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sTasto \"%s\" non trovato"
#, fuzzy, c-format
#| msgid "%s: script \"%s\" is not installed"
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s: script \"%s\" non installato"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr ""
"%sAttenzione: %s, riga %d: identificatore di sezione sconosciuto (\"%s\")"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown option for section \"%s\": %s"
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr ""
"%sAttenzione: %s, riga %d: opzione sconosciuta per la sezione \"%s\": %s"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: impossibile analizzare il file \"%s\""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr ""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: impossibile analizzare il file \"%s\""
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "Opzione \"%s%s%s\":"
#, fuzzy, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sErrore: impossibile creare il file \"%s\""
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme \"%s\" already exists"
msgstr "%sErrore: il filtro \"%s\" esiste già"
#, fuzzy, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sErrore: impossibile rinominare il filtro da \"%s\" a \"%s\""
#, fuzzy, c-format
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "Filtro \"%s\" rinominato in \"%s\""
#, fuzzy, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sErrore: impossibile creare il file \"%s\""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: impossibile analizzare il file \"%s\""
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "%sErrore durante l'aggiornamento di WeeChat con il file \"%s\":"
@@ -6485,22 +6746,37 @@ msgstr "Fine comando '%s', timeout raggiunto (%.1fs)"
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "1 se si sta aggiornando WeeChat (comando `/upgrade`)"
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
msgid ""
@@ -8050,7 +8326,8 @@ msgstr "File di configurazione \"%s\" sconosciuto"
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -12120,8 +12397,8 @@ msgstr "nome server"
msgid "get nick from IRC host"
msgstr "ottiene nick dall'host IRC"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "host IRC (come `:nick!nome@server.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "host IRC (come `:nick!nome@server`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -12361,8 +12638,8 @@ msgstr "%s%s: questo buffer non è un canale!"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -13552,7 +13829,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -15443,11 +15720,11 @@ msgstr ""
#, fuzzy
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"elenco separato da virgole di plugin da caricare automaticamente all'avvio, "
"\"*\" equivale a tutti i plugin trovati. un nome che comincia con \"!\" è un "
@@ -15456,10 +15733,10 @@ msgstr ""
"oppure \"*,!lua,!tcl\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -15492,6 +15769,11 @@ msgid ""
"1 are recommended values)"
msgstr ""
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
#, fuzzy
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
@@ -15614,7 +15896,7 @@ msgstr "Elenco dei client per il relay"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
@@ -15755,6 +16037,10 @@ msgstr "%s%s: \"bind\" impossibile sulla porta %d (%s): errore %d %s"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: \"bind\" impossibile sulla porta %d (%s): errore %d %s"
#, fuzzy, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s%s: \"listen\" impossibile sulla porta %d (%s): errore %d %s"
#, fuzzy, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: \"listen\" impossibile sulla porta %d (%s): errore %d %s"
@@ -15791,10 +16077,8 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: memoria non sufficiente per l'ascolto su una nuova porta"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgstr ""
"Esegui il relay dei dati di WeeChat ad un'applicazione remota (protocolli "
"irc/weechat)"
msgid "Relay WeeChat data to remote applications"
msgstr "Esegui il relay dei dati di WeeChat ad un'applicazione remota"
msgid "connecting"
msgstr "connessione"
@@ -16043,9 +16327,9 @@ msgstr ""
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
@@ -16415,6 +16699,11 @@ msgstr "script %s caricati:"
msgid "script name with extension"
msgstr "elenco degli script"
#, fuzzy
#| msgid "comma separated list of file name extensions for plugins"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "elenco separato da virgole di estensioni dei nomi file per i plugin"
#, fuzzy
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
@@ -17048,7 +17337,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
+367 -52
View File
@@ -22,11 +22,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-16 13:22+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-05-30 14:02+0200\n"
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
"Language-Team: Japanese <https://github.com/l/weechat/tree/master/"
"translation/ja_JP>\n"
"Language-Team: Japanese <weechat-dev@nongnu.org>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -168,10 +167,10 @@ msgstr "gcrypt の init/deinit を無効化"
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s 著作権 %s、%s %s にコンパイル\n"
"開発者 Sébastien Helleu <flashcode@flashtux.org> - %s"
"開発者 %s <%s> - %s"
msgid "Usage:"
msgstr "使い方:"
@@ -1005,6 +1004,55 @@ msgstr "作成されたオプション: "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%s: 警告: 辞書 \"%s\" がこのシステム上では利用できません"
#, fuzzy
#| msgid "no variable"
msgid "No theme available"
msgstr "変数がありません"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sキー \"%s\" が見つかりません"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "オプション \"%s%s%s\":"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " ファイル: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "説明"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " ファイル: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "WeeChat のバージョン"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sオプション \"%s\" の無効化に失敗しました"
@@ -1184,6 +1232,16 @@ msgstr ""
" -all: 全ての接続済みサーバに対して離席状態を切り替え\n"
"message: 離席メッセージ (メッセージが無い場合は、離席状態を解除)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
msgid "manage bars"
msgstr "バーの管理"
@@ -3757,6 +3815,79 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
#, fuzzy
#| msgid "list of bar items"
msgid "manage color themes"
msgstr "バー要素のリスト"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid "list of filters"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr "フィルタのリスト"
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "names of filters"
msgid "raw[rename]: rename a user theme file"
msgstr "フィルタ名"
#, fuzzy
#| msgid "get/set channel topic"
msgid "raw[del]: delete a user theme file"
msgstr "チャンネルトピックの取得/設定"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
#| msgid "enable trigger support"
msgid "name: name of a theme"
msgstr "トリガサポートの有効化"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
#, fuzzy
#| msgid "values for a configuration option"
msgid "toggle value of a config option"
@@ -4363,6 +4494,15 @@ msgstr "カーソルを自由に動かせるエリア (\"chat\" またはバー
msgid "names of layouts"
msgstr "レイアウトの名前"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr "保護データの名前 (sec.conf ファイル、セクションデータ)"
@@ -5470,6 +5610,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "メッセージに含まれるタブ文字を表示する際に使う空白文字の数"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -6498,6 +6652,114 @@ msgstr "%s: エラー: 辞書 \"%s\" がシステム上に見つかりません"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "メモリ使用量 (ヘルプを見るには \"man mallinfo\" を参照してください):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sキー \"%s\" が見つかりません"
#, fuzzy, c-format
#| msgid "%s: script \"%s\" is not installed"
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s: スクリプト \"%s\" はインストールされていません"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr "%s警告: %s、行 %d: セクションインジケータ (\"%s\") は未定義"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown option for section \"%s\": %s"
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr "%s警告: %s、行 %d: セクション \"%s\" の無効なオプション: %s"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: ファイル \"%s\" を解析できません"
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, fuzzy, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr "%sエラー: \"%s\" は WeeChat の予約名です"
#, fuzzy, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr "%sエラー: \"%s\" は WeeChat の予約名です"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: ファイル \"%s\" を解析できません"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "オプション \"%s%s%s\":"
#, fuzzy, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sエラー: ファイル \"%s\" の作成に失敗"
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
#| msgid "%s%s: trigger \"%s\" already exists"
msgid "%sTheme \"%s\" already exists"
msgstr "%s%s: トリガ \"%s\" は既に存在します"
#, fuzzy, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sエラー: フィルタ \"%s\" の名前を \"%s\" に変更できません"
#, fuzzy, c-format
#| msgid "Trigger \"%s\" renamed to \"%s\""
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "トリガ \"%s\" の名前を \"%s\" に変更しました"
#, fuzzy, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sエラー: ファイル \"%s\" の作成に失敗"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: ファイル \"%s\" を解析できません"
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "%sファイル \"%s\" で WeeChat のアップグレード中にエラー:"
@@ -6666,34 +6928,36 @@ msgstr "コマンド '%s' の終了、タイムアウトになりました (%.1f
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "WeeChat をヘッドレスモードで実行中 (Ctrl-C で終了します)。"
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
"WeeChat にようこそ!\n"
"\n"
"WeeChat を初めて使うのなら、少なくともクイックスタートガイドを、時間があるな"
"らユーザーズガイドを読むことをお勧めします。これらは WeeChat の主な構想を説明"
"しています。\n"
"WeeChat の文書は全てこのサイトから利用可能です: https://weechat.org/doc/\n"
"\n"
"さらに、すべてのコマンドとオプションには /help から見れるインラインヘルプが用"
"意されています (Tab キーで名前補完できます)。\n"
"WeeChat をカスタマイズするには /fset を使うと便利です。\n"
"\n"
"IRC サーバの設定を追加してサーバに接続するには /server と /connect コマンドを"
"使ってください (/help server 参照)。"
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
@@ -8352,7 +8616,8 @@ msgstr "設定ファイル \"%s\" が見つかりません"
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -12575,8 +12840,8 @@ msgstr "サーバ名"
msgid "get nick from IRC host"
msgstr "IRC ホストからニックネームを取得"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "IRC ホスト (例: `:nick!name@server.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "IRC ホスト (例: `:nick!name@server`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -12811,8 +13076,8 @@ msgstr "%s%s: このバッファはチャンネルではありません!"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -14028,7 +14293,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -15951,21 +16216,21 @@ msgstr ""
#, fuzzy
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"スタートアップ時にロードするプラグインのコンマ区切りリスト、\"*\" は見つかっ"
"た全てのプラグイン、\"!\" から始まる名前はロードしないプラグイン、名前にワイ"
"ルドカード \"*\" を使うことができます (例: \"*\" または \"*,!lua,!tcl\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -16013,6 +16278,11 @@ msgstr ""
"のパスワードを考慮、...; この値を大きくするとセキュリティレベルが低下します "
"(0 または 1 を推奨します)"
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
#, fuzzy
#| msgid ""
#| "POSIX extended regular expression with origins allowed in websockets "
@@ -16149,12 +16419,12 @@ msgstr "中継するクライアントのリスト"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
"protocol,status (どちらも任意、引数の \"*\" はすべてを意味します; プロトコ"
"ル: irc、weechat。状態: connecting、waiting_auth、connected、auth_failed、"
"disconnected)"
"ル: api、irc、weechat。状態: connecting、waiting_auth、connected、"
"auth_failed、disconnected)"
msgid "list of relay clients"
msgstr "リレークライアントのリスト"
@@ -16296,6 +16566,11 @@ msgstr "%s%s: パス %s (%s) に \"bind\" できません: エラー %d %s"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: ポート %d (%s) に \"bind\" できません: エラー %d %s"
#, fuzzy, c-format
#| msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s%s: パス %s (%s) ではリッスンできません: エラー %d %s"
#, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: パス %s (%s) ではリッスンできません: エラー %d %s"
@@ -16332,9 +16607,8 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: 新しいポートをリッスンするためのメモリ不足"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgstr ""
"WeeChat データをリモートアプリケーションにリレー (irc/weechat プロトコル)"
msgid "Relay WeeChat data to remote applications"
msgstr "WeeChat データをリモートアプリケーションにリレー"
msgid "connecting"
msgstr "接続中"
@@ -16578,11 +16852,16 @@ msgstr "(なし)"
msgid "Alt+key/input: v=back to list d=jump to diff"
msgstr "Alt+key/input: v=リストに戻る d=比較する"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, "
#| "r=remove, l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view "
#| "script | Input: q=close, $=refresh, s:x,y=sort, words=filter, *=reset "
#| "filter | Mouse: left=select, right=install/remove"
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
"%d/%d 個のスクリプト (フィルタ: %s) | ソート: %s | Alt+key/input: i=インス"
@@ -16973,6 +17252,11 @@ msgstr "ロードされた %s スクリプト:"
msgid "script name with extension"
msgstr "スクリプトの拡張子のリスト"
#, fuzzy
#| msgid "comma separated list of file name extensions for plugins"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "プラグインのファイル拡張子のコンマ区切りリスト"
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
"拡張子を含めたスクリプト名 (ワイルドカード \"*\" を使うことができます) (任意)"
@@ -17617,7 +17901,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
@@ -18476,3 +18762,32 @@ msgid ""
msgstr ""
"%s%s: ファイル \"%s\" のリジュームが承認されませんでした (ポート: %d、開始位"
"置: %llu): xfer が見つからないか、転送準備が整っていません"
#~ msgid ""
#~ "Welcome to WeeChat!\n"
#~ "\n"
#~ "If you are discovering WeeChat, it is recommended to read at least the "
#~ "quickstart guide, and the user's guide if you have some time; they "
#~ "explain main WeeChat concepts.\n"
#~ "All WeeChat docs are available at: https://weechat.org/doc/\n"
#~ "\n"
#~ "Moreover, there is inline help with /help on all commands and options "
#~ "(use Tab key to complete the name).\n"
#~ "The command /fset can help to customize WeeChat.\n"
#~ "\n"
#~ "You can add and connect to an IRC server with /server and /connect "
#~ "commands (see /help server)."
#~ msgstr ""
#~ "WeeChat にようこそ!\n"
#~ "\n"
#~ "WeeChat を初めて使うのなら、少なくともクイックスタートガイドを、時間がある"
#~ "ならユーザーズガイドを読むことをお勧めします。これらは WeeChat の主な構想"
#~ "を説明しています。\n"
#~ "WeeChat の文書は全てこのサイトから利用可能です: https://weechat.org/doc/\n"
#~ "\n"
#~ "さらに、すべてのコマンドとオプションには /help から見れるインラインヘルプ"
#~ "が用意されています (Tab キーで名前補完できます)。\n"
#~ "WeeChat をカスタマイズするには /fset を使うと便利です。\n"
#~ "\n"
#~ "IRC サーバの設定を追加してサーバに接続するには /server と /connect コマン"
#~ "ドを使ってください (/help server 参照)。"
+423 -55
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2009-2016 Krzysztof Koroscik <soltys1@gmail.com>
# SPDX-FileCopyrightText: 2009-2026 Krzysztof Koroscik <soltys@soltys.info>
# SPDX-FileCopyrightText: 2010 B.J. Stobiecki <bartek@stobiecki.eu>
#
# SPDX-License-Identifier: GPL-3.0-or-later
@@ -19,15 +19,14 @@
# You should have received a copy of the GNU General Public License
# along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
#
# Krzysztof Korościk <soltys@soltys.info>, 2018, 2019, 2020.
msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-21 17:26+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-06-28 08:55+0200\n"
"Last-Translator: Krzysztof Korościk <soltys@soltys.info>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: Polish <soltys@soltys.info>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -166,10 +165,10 @@ msgstr "wyłącza funkcje init/deinit z gcrypt"
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s Copyright %s, skompilowano na %s %s\n"
"Rozwijane przez Sébastien Helleu <flashcode@flashtux.org> - %s"
"Rozwijane przez %s <%s> - %s"
msgid "Usage:"
msgstr "Użycie:"
@@ -981,6 +980,55 @@ msgstr "Opcja utworzona: "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%sFunkcja „%s” nie jest dostępna w tym systemie"
#, fuzzy
#| msgid "not available"
msgid "No theme available"
msgstr "niedostępne"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sKlawisz \"%s\" nie znaleziony"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "Opcja \"%s%s%s\":"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " plik: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "opis"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " plik: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "Wersja WeeChat"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sNie powiodło się wyzerowanie opcji \"%s\""
@@ -1148,6 +1196,21 @@ msgstr ""
"wiadomość: powód nieobecności (jeśli nie podano wiadomości status "
"nieobecności zostaje usunięty)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
#, fuzzy
#| msgid ""
#| " - ${color:name}: the color (see \"Plugin API reference\", function "
#| "\"color\")"
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
" - ${color:nazwa}: kolor (zobacz „Opis API wtyczek”, funkcja \"color\")"
msgid "manage bars"
msgstr "zarządzaj paskami"
@@ -3862,6 +3925,85 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr "numer: ilość procesów do wyczyszczenia"
#, fuzzy
#| msgid "manage custom bar items"
msgid "manage color themes"
msgstr "zarządza niestandardowymi elementami pasków"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid ""
#| "raw[list]: list remote relay servers (without argument, this list is "
#| "displayed)"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr ""
"raw[list]: wyświetl pośredników (bez podania argumentu wyświetlana jest ta "
"lista)"
#, fuzzy
#| msgid "raw[tags]: display tags for lines"
msgid "raw[-backups]: display backup theme files"
msgstr "raw[tags]: wyświetl tagi dla linii"
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "raw[rename]: rename a filter"
msgid "raw[rename]: rename a user theme file"
msgstr "raw[rename]: zmień nazwę filtra"
#, fuzzy
#| msgid "raw[del]: delete a server"
msgid "raw[del]: delete a user theme file"
msgstr "raw[del]: usuń serwer"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
#| msgid "name: name of trigger"
msgid "name: name of a theme"
msgstr "nazwa: nazwa triggera"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
msgid "toggle value of a config option"
msgstr "przełącza wartość opcji konfiguracyjnej"
@@ -4485,6 +4627,15 @@ msgstr ""
msgid "names of layouts"
msgstr "nazwy układów"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr "nazwy zabezpieczonych danych (plik sec.conf, sekcja data)"
@@ -5617,6 +5768,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "liczba spacji używana do wyświetlania tabulacji w wiadomościach"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -6665,6 +6830,122 @@ msgstr "Funkcja systemowa \"%s\" nie jest dostępna"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Zużycie zasobów (zobacz \"man getrusage\"):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sKlawisz \"%s\" nie znaleziony"
#, fuzzy, c-format
#| msgid "%s: script \"%s\" is not installed"
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s: skrypt \"%s\" nie zainstalowany"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: ignoring unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr ""
"%sOstrzeżenie: %s, linia %d: ignoruje nieznany identyfikator sekcji (\"%s\")"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
#| msgid ""
#| "%sWarning: %s, line %d: ignoring unknown option for section \"%s\": %s"
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr ""
"%sOstrzeżenie: %s, linia %d: ignoruje nieznaną opcję dla sekcji \"%s\": %s"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: nie można przetworzyć pliku \"%s\""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sBuffer name \"%s\" is reserved for WeeChat"
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr "%sNazwa bufora \"%s\" jest zarezerwowana dla WeeChat"
#, fuzzy, c-format
#| msgid "%sBuffer name \"%s\" is reserved for WeeChat"
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr "%sNazwa bufora \"%s\" jest zarezerwowana dla WeeChat"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: nie można przetworzyć pliku \"%s\""
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "Opcja \"%s%s%s\":"
#, fuzzy, c-format
#| msgid "%sCannot create file \"%s\""
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sNie można utworzyć pliku \"%s\""
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
#| msgid "%sBar \"%s\" already exists"
msgid "%sTheme \"%s\" already exists"
msgstr "%sPasek \"%s\" już istnieje"
#, fuzzy, c-format
#| msgid "%sUnable to rename filter \"%s\" to \"%s\""
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sNie można zmienić nazwy filtru z \"%s\" na \"%s\""
#, fuzzy, c-format
#| msgid "Trigger \"%s\" renamed to \"%s\""
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "Zmieniono nazwę triggera z \"%s\" na \"%s\""
#, fuzzy, c-format
#| msgid "%sCannot create file \"%s\""
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sNie można utworzyć pliku \"%s\""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: nie można przetworzyć pliku \"%s\""
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "%sBłąd przy uaktualnianiu WeeChat z użyciem pliku \"%s\":"
@@ -6824,35 +7105,36 @@ msgstr "Zakończono transfer URL '%s', transfer zatrzymany"
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "WeeChat działa w trybie bez interfejsu (naciśnij ctrl-c żeby wyjść)."
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
"Witaj w WeeChat!\n"
"\n"
"Jeśli dopiero poznajesz WeeChat, zaleca się abyś przeczytał przynajmniej "
"szybki start i poradnik użytkownika jeśli znajdziesz na to chwilę; wyjaśnią "
"one główne założenia WeeChat.\n"
"Wszystkie dokumenty dotyczące WeeChat dostępne są pod adresem: https://"
"weechat.org/doc/\n"
"\n"
"Ponadto, dostępna jest wbudowana pomoc /help dla wszystkich komend i opcji "
"(klawisz Tab dopełnia nazwy).\n"
"Komenda /fset pomaga w dostosowaniu WeeChat do swoich preferencji.\n"
"\n"
"Możesz dodać i połączyć się z serwerem IRC za pomocą komend /server i /"
"connect (zobacz /help server)."
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
@@ -8591,9 +8873,14 @@ msgstr "> `xxx`: pokaż tylko opcje z „xxx” w nazwie"
msgid "> `f:xxx`: show only configuration file \"xxx\""
msgstr "> `f:xxx`: pokaż tylko plik konfiguracyjny „xxx”"
#, fuzzy
#| msgid ""
#| "> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/"
#| "integer/string/color/enum)"
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
"> `t:xxx`: pokaż tylko opcje typu „xxx” (bool/int/str/col/enum or boolean/"
"integer/string/color/enum)"
@@ -12466,8 +12753,8 @@ msgstr "nazwa serwera"
msgid "get nick from IRC host"
msgstr "pobiera nick z hosta IRC"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "Host IRC (jak `:nick!nazwa@serwer.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "Host IRC (jak `:nick!nazwa@serwer`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -12686,10 +12973,13 @@ msgstr "%s%s: nie jesteś połączony z serwerem"
msgid "%s%s: this buffer is not a channel!"
msgstr "%s%s: to nie jest bufor kanału!"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
#| "channel, ($)=refresh, (q)=close buffer"
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
"%d kanałów (łącznie: %d) | Filtr: %s | Sortowanie: %s | Key(input): "
"ctrl+j=wejdź na kanał, ($)=odśwież, (q)=zamknij bufor"
@@ -13879,13 +14169,24 @@ msgstr ""
"wtyczkę logger, skompresować pliki na nowo (lub rozpakować), następnie "
"zmienić opcję w pliku logger.conf, następnie załadować wtyczkę logger"
#, fuzzy
#| msgid ""
#| "when this size is reached, a rotation of log files is performed: the "
#| "existing rotated log files are renamed (.1 becomes .2, .2 becomes .3, "
#| "etc.) and the current file is renamed with extension .1; an integer "
#| "number with a suffix is allowed: b = bytes (default if no unit given), k "
#| "= kilobytes, m = megabytes, g = gigabytes, t = terabytes; example: \"2g\" "
#| "causes a rotation if the file size is > 2,000,000,000 bytes; if set to "
#| "\"0\", no rotation is performed (unlimited log size); WARNING: before "
#| "changing this option, you should first set the compression type via "
#| "option logger.file.rotation_compression_type"
msgid ""
"when this size is reached, a rotation of log files is performed: the "
"existing rotated log files are renamed (.1 becomes .2, .2 becomes .3, etc.) "
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -15688,13 +15989,21 @@ msgstr ""
"oznacza brak hasła, zobacz opcję relay.network.allow_empty_password) (uwaga: "
"zawartość jest przetwarzana, zobacz /help eval)"
#, fuzzy
#| msgid ""
#| "comma separated list of hash algorithms used for password authentication "
#| "in weechat protocol, among these values: \"plain\" (password in plain "
#| "text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
#| "\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!"
#| "\" is a negative value to prevent an algorithm from being used, wildcard "
#| "\"*\" is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"oddzielona przecinkami lista algorytmów hashujących używanych dla "
"uwierzytelnienia hasłem w protokole weechat, dostępne wartości: \"plain\" "
@@ -15704,11 +16013,17 @@ msgstr ""
"użycia algorytmu, znak \"*\" może zostać użyty w nazwie (przykłady: \"*\", "
"\"pbkdf2*\", \"*,!plain\")"
#, fuzzy
#| msgid ""
#| "number of iterations asked to the client in weechat protocol when a "
#| "hashed password with algorithm PBKDF2 is used for authentication; more "
#| "iterations is better in term of security but is slower to compute; this "
#| "number should not be too high if your CPU is slow"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
"ilość iteracji zapytań klienta protokołu weechat w przypadku hashowania "
"haseł algorytmem PBKDF2 podczas uwierzytelnienia; im więcej iteracji tym "
@@ -15757,6 +16072,11 @@ msgstr ""
"hasła, ...; wysoka liczba obniża poziom bezpieczeństwa (0 lub 1 to zalecane "
"wartości)"
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
"insensitive, use \"(?-i)\" at beginning to make it case-sensitive), example: "
@@ -15765,7 +16085,7 @@ msgstr ""
"Rozszerzone wyrażenia regularne POSIX ze źródłami dozwolonymi dla gniazd "
"webowych (nie wrażliwe na wielkość znaków, umieszczenie \"(?-i)\" na "
"początku sprawi, że wielość znaków będzie miała znaczenie), przykład: "
"\"^http://(www\\.)?przykład\\.(com|org)\""
"\"^https?://(www\\.)?example\\.(com|org)\""
msgid ""
"enable websocket extension \"permessage-deflate\" to compress websocket "
@@ -15885,11 +16205,11 @@ msgstr "liczba podłączonych klientów"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
"protokół, status (oba są opcjonalne, dla każdego argumentu „*” oznacza "
"wszystko; protokoły: irc, weechat; statusy: connecting, waiting_auth, "
"wszystko; protokoły: api, irc, weechat; statusy: connecting, waiting_auth, "
"connected, auth_failed, disconnected)"
msgid "list of relay clients"
@@ -16024,6 +16344,11 @@ msgstr "%s%s: nie można wykonać \"bind\" na ścieżce %s (%s): błąd %d %s"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: nie można wykonać \"bind\" na porcie %d (%s): błąd %d %s"
#, fuzzy, c-format
#| msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s%s: nie można wykonać \"listen\" na ścieżce %s (%s): błąd %d %s"
#, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: nie można wykonać \"listen\" na ścieżce %s (%s): błąd %d %s"
@@ -16064,9 +16389,8 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: za mało pamięci do nasłuchu na nowym porcie"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgstr ""
"Przekazywanie danych WeeChat do zdalnych aplikacji (protokoły irc i weechat)"
msgid "Relay WeeChat data to remote applications"
msgstr "Przekazywanie danych WeeChat do zdalnych aplikacji"
msgid "connecting"
msgstr "łączę"
@@ -16298,11 +16622,16 @@ msgstr "(brak)"
msgid "Alt+key/input: v=back to list d=jump to diff"
msgstr "Alt+klawisz/wejście: v=wróć do listy d=skocz do diff"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, "
#| "r=remove, l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view "
#| "script | Input: q=close, $=refresh, s:x,y=sort, words=filter, *=reset "
#| "filter | Mouse: left=select, right=install/remove"
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
"%d/%d skrypty (filtr: %s) | Sort: %s | Alt+klawisz/wejście: i=instaluj "
@@ -16690,6 +17019,11 @@ msgstr "1 jeśli skrypt jest załadowany"
msgid "script name with extension"
msgstr "nazwa skryptu z rozszerzeniem"
#, fuzzy
#| msgid "comma separated list of file name extensions for plugins"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "oddzielona przecinkami lista rozszerzeń nazw plików dla wtyczek"
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
"nazwa skryptu z rozszerzeniem (wildcard \"*\" jest dozwolony) (opcjonalne)\""
@@ -17326,7 +17660,11 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr "> typ `command_run`: komenda(-y) (wymagane)"
msgid "> type `timer`: interval (required), align on second, max calls"
#, fuzzy
#| msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
"> typ `timer`: interwał (wymagany), wyrównane do sekund, maksymalne wywołania"
@@ -18206,3 +18544,33 @@ msgid ""
msgstr ""
"%s%s: nie można zaakceptować wznowienia pliku \"%s\" (port: %d, pozycja "
"startowa: %llu): xfer nie znaleziony lub nie gotowy do transferu"
#~ msgid ""
#~ "Welcome to WeeChat!\n"
#~ "\n"
#~ "If you are discovering WeeChat, it is recommended to read at least the "
#~ "quickstart guide, and the user's guide if you have some time; they "
#~ "explain main WeeChat concepts.\n"
#~ "All WeeChat docs are available at: https://weechat.org/doc/\n"
#~ "\n"
#~ "Moreover, there is inline help with /help on all commands and options "
#~ "(use Tab key to complete the name).\n"
#~ "The command /fset can help to customize WeeChat.\n"
#~ "\n"
#~ "You can add and connect to an IRC server with /server and /connect "
#~ "commands (see /help server)."
#~ msgstr ""
#~ "Witaj w WeeChat!\n"
#~ "\n"
#~ "Jeśli dopiero poznajesz WeeChat, zaleca się abyś przeczytał przynajmniej "
#~ "szybki start i poradnik użytkownika jeśli znajdziesz na to chwilę; "
#~ "wyjaśnią one główne założenia WeeChat.\n"
#~ "Wszystkie dokumenty dotyczące WeeChat dostępne są pod adresem: https://"
#~ "weechat.org/doc/\n"
#~ "\n"
#~ "Ponadto, dostępna jest wbudowana pomoc /help dla wszystkich komend i "
#~ "opcji (klawisz Tab dopełnia nazwy).\n"
#~ "Komenda /fset pomaga w dostosowaniu WeeChat do swoich preferencji.\n"
#~ "\n"
#~ "Możesz dodać i połączyć się z serwerem IRC za pomocą komend /server i /"
#~ "connect (zobacz /help server)."
+366 -52
View File
@@ -22,10 +22,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-12 20:24+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-06-28 08:48+0200\n"
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
"Language-Team: Portuguese <>\n"
"Language-Team: Portuguese <weechat-dev@nongnu.org>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -165,10 +165,10 @@ msgstr ""
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s Copyright %s, compilado a %s %s\n"
"Desenvolvido por Sébastien Helleu <flashcode@flashtux.org> - %s"
"Desenvolvido por %s <%s> - %s"
msgid "Usage:"
msgstr "Utilização:"
@@ -1006,6 +1006,55 @@ msgstr "Opção criada: "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%s: aviso: o dicionário \"%s\" não está disponível no sistema"
#, fuzzy
#| msgid "no variable"
msgid "No theme available"
msgstr "nenhum variável"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sTecla \"%s\" não encontrada"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "Opção \"%s%s%s\":"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " ficheiro: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "descrição"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " ficheiro: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "versão do WeeChat"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sFalha ao reinicializar a opção \"%s\""
@@ -1190,6 +1239,16 @@ msgstr ""
"mensagem: mensagem de ausência (se não for indicada uma mensagem, o estado "
"ausente é removido)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
msgid "manage bars"
msgstr "gerir barras"
@@ -3765,6 +3824,79 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
#, fuzzy
#| msgid "list of bar items"
msgid "manage color themes"
msgstr "lista de itens da barra"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid "list of filters"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr "lista de filtros"
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "names of filters"
msgid "raw[rename]: rename a user theme file"
msgstr "nomes dos filtros"
#, fuzzy
#| msgid "get/set channel topic"
msgid "raw[del]: delete a user theme file"
msgstr "obter/definir o tópico do canal"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
#| msgid "enable trigger support"
msgid "name: name of a theme"
msgstr "ativar suporte de acionadores"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
#, fuzzy
#| msgid "values for a configuration option"
msgid "toggle value of a config option"
@@ -4381,6 +4513,15 @@ msgstr "áreas (\"chat\" ou nome da barra) onde mover o cursor livremente"
msgid "names of layouts"
msgstr "nomes das disposições"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr "nomes dos ficheiros protegidos (ficheiro sec.conf, secção de dados)"
@@ -5498,6 +5639,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "número de espaços usados para apresentar tabulações nas mensagens"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -6553,6 +6708,114 @@ msgstr "%s: erro: o dicionário \"%s\" não está disponível no sistema"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Utilização de memória (ver \"man mallingo\" para obter ajuda):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sTecla \"%s\" não encontrada"
#, fuzzy, c-format
#| msgid "%s: script \"%s\" is not installed"
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s: o script \"%s\" não está instalado"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr "%sAviso: %s, linha %d: identificador de secção desconhecido (\"%s\")"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown option for section \"%s\": %s"
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr "%sAviso: %s, linha %d: opção desconhecida na secção \"%s\": %s"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: não foi possível analisar o ficheiro \"%s\""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr ""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: não foi possível analisar o ficheiro \"%s\""
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "Opção \"%s%s%s\":"
#, fuzzy, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sErro: não é possível criar o ficheiro \"%s\""
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
#| msgid "%s%s: trigger \"%s\" already exists"
msgid "%sTheme \"%s\" already exists"
msgstr "%s%s: o acionador \"%s\" já existe"
#, fuzzy, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sErro: não foi possível mudar o nome do filtro \"%s\" para \"%s\""
#, fuzzy, c-format
#| msgid "Trigger \"%s\" renamed to \"%s\""
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "O nome do acionador \"%s\" mudou para \"%s\""
#, fuzzy, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sErro: não é possível criar o ficheiro \"%s\""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: não foi possível analisar o ficheiro \"%s\""
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "%sErro ao atualizar o WeeChat com o ficheiro \"%s\":"
@@ -6717,36 +6980,36 @@ msgstr "Fim do comando '%s', tempo limite atingido (%.1fs)"
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "1 se o WeeChat está a atualizar (comando `/upgrade`)"
#, fuzzy
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
"Bem-vindo ao WeeChat!\n"
"\n"
"Se é a primeira vez que usa o WeeChat, recomenda-se que leia pelo menos o "
"guia de introdução, e o manual do utilizador se dispõe de algum tempo; estes "
"explicam os principais conceitos do WeeChat.\n"
"A documentação do WeeChat está disponível em: https://weechat.org/doc/\n"
"\n"
"Além disso, pode consultar a ajuda incorporada com /help sobre todos os "
"comandos e opções (use a tecla Tab para completar o nome).\n"
"O comando /iset (script iset.pl) pode ajudá-lo a personalizar o WeeChat: /"
"script install iset.pl\n"
"\n"
"Pode adicionar e conectar-se a um ser servidor de IRC pelos comandos /server "
"e /connect (ver /help server)."
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
@@ -8318,7 +8581,8 @@ msgstr "Ficheiro de configuração desconhecido \"%s\""
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -12495,8 +12759,8 @@ msgstr "nome do servidor"
msgid "get nick from IRC host"
msgstr "obter nick do host de IRC"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "host de IRC (tal como `:nick!nome@servidor.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "host de IRC (tal como `:nick!nome@servidor`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -12739,8 +13003,8 @@ msgstr "%s%s: este buffer não é um canal!"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -13944,7 +14208,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -15834,11 +16098,11 @@ msgstr ""
#, fuzzy
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"lista de plugins separados por vírgula para carregar automaticamente ao "
"iniciar, \"*\" significa todos os plugins encontrados, um nome começado com "
@@ -15847,10 +16111,10 @@ msgstr ""
"tcl\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -15883,6 +16147,11 @@ msgid ""
"1 are recommended values)"
msgstr ""
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
#, fuzzy
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
@@ -16006,7 +16275,7 @@ msgstr "número de cliente para reencaminhar"
#, fuzzy
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
"nome de estado (opcional): connecting, waiting_auth, connected, auth_failed, "
@@ -16155,6 +16424,10 @@ msgstr "%s%s: não é possível efetuar \"bind\" da porta %d (%s): erro %d %s"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: não é possível efetuar \"bind\" da porta %d (%s): erro %d %s"
#, fuzzy, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s%s: não foi possível efetuar \"listen\" da porta %d (%s): erro %d %s"
#, fuzzy, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: não foi possível efetuar \"listen\" da porta %d (%s): erro %d %s"
@@ -16195,10 +16468,8 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: memória insuficiente para escutar nova porta"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgstr ""
"Reencaminhar dados do WeeChat para aplicações remotas (protocolos irc/"
"weechat)"
msgid "Relay WeeChat data to remote applications"
msgstr "Reencaminhar dados do WeeChat para aplicações remotas"
msgid "connecting"
msgstr "a conectar"
@@ -16442,11 +16713,16 @@ msgstr "(nada)"
msgid "Alt+key/input: v=back to list d=jump to diff"
msgstr "Alt+tecla/entrada: v=voltar à lista d=saltar para o diff"
#, c-format
#, fuzzy, c-format
#| msgid ""
#| "%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, "
#| "r=remove, l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view "
#| "script | Input: q=close, $=refresh, s:x,y=sort, words=filter, *=reset "
#| "filter | Mouse: left=select, right=install/remove"
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
"%d/%d scripts (filtro: %s) | Ordenar: %s | Alt+tecla/entrada: i=instalar, "
@@ -16847,6 +17123,11 @@ msgstr "scripts %s carregados:"
msgid "script name with extension"
msgstr "lista de extensões de script"
#, fuzzy
#| msgid "comma separated list of file name extensions for plugins"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "lista de extensões de ficheiros separadas por vírgula para os plugins"
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
"nome do script com extensão (o caráter universal \"*\" é permitido) "
@@ -17508,7 +17789,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
@@ -18382,3 +18665,34 @@ msgstr ""
"%s%s: não foi possível aceitar o ficheiro a retomar \"%s\" (porto: %d, "
"posição inicial: %llu): xfer não foi encontrado ou não está pronto para ser "
"transferido"
#, fuzzy
#~ msgid ""
#~ "Welcome to WeeChat!\n"
#~ "\n"
#~ "If you are discovering WeeChat, it is recommended to read at least the "
#~ "quickstart guide, and the user's guide if you have some time; they "
#~ "explain main WeeChat concepts.\n"
#~ "All WeeChat docs are available at: https://weechat.org/doc/\n"
#~ "\n"
#~ "Moreover, there is inline help with /help on all commands and options "
#~ "(use Tab key to complete the name).\n"
#~ "The command /fset can help to customize WeeChat.\n"
#~ "\n"
#~ "You can add and connect to an IRC server with /server and /connect "
#~ "commands (see /help server)."
#~ msgstr ""
#~ "Bem-vindo ao WeeChat!\n"
#~ "\n"
#~ "Se é a primeira vez que usa o WeeChat, recomenda-se que leia pelo menos o "
#~ "guia de introdução, e o manual do utilizador se dispõe de algum tempo; "
#~ "estes explicam os principais conceitos do WeeChat.\n"
#~ "A documentação do WeeChat está disponível em: https://weechat.org/doc/\n"
#~ "\n"
#~ "Além disso, pode consultar a ajuda incorporada com /help sobre todos os "
#~ "comandos e opções (use a tecla Tab para completar o nome).\n"
#~ "O comando /iset (script iset.pl) pode ajudá-lo a personalizar o WeeChat: /"
#~ "script install iset.pl\n"
#~ "\n"
#~ "Pode adicionar e conectar-se a um ser servidor de IRC pelos comandos /"
#~ "server e /connect (ver /help server)."
+321 -33
View File
@@ -46,10 +46,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-12 20:19+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-06-28 08:49+0200\n"
"Last-Translator: Érico Nogueira <ericonr@disroot.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: Portuguese (Brazil) <weechat-dev@nongnu.org>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -189,10 +189,10 @@ msgstr ""
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s Copyright %s, compilado em %s %s\n"
"Desenvolvido por Sébastien Helleu <flashcode@flashtux.org> - %s"
"Desenvolvido por %s <%s> - %s"
msgid "Usage:"
msgstr "Uso:"
@@ -1025,6 +1025,54 @@ msgstr "Opção criada: "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%s: aviso: dicionário \"%s\" não está disponível em seu sistema"
#, fuzzy
msgid "No theme available"
msgstr "Variáveis"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sTecla \"%s\" não encontrada"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "Opção \"%s%s%s\":"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " arquivo: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "descrição"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " arquivo: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "versão do WeeChat"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sFalhou ao desabilitar a opção \"%s\""
@@ -1201,6 +1249,16 @@ msgstr ""
"message: mensagem para ausência (se nenhuma mensagem for fornecida, o status "
"de ausência é removido)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
msgid "manage bars"
msgstr "gerenciar barras"
@@ -3686,6 +3744,77 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
#, fuzzy
#| msgid "list of bar items"
msgid "manage color themes"
msgstr "lista de itens da barra"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid "list of filters"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr "lista de filtros"
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "names of filters"
msgid "raw[rename]: rename a user theme file"
msgstr "nomes dos filtros"
#, fuzzy
msgid "raw[del]: delete a user theme file"
msgstr "lista de atalhos"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
msgid "name: name of a theme"
msgstr "habilita suporte à mouse"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
#, fuzzy
#| msgid "values for a configuration option"
msgid "toggle value of a config option"
@@ -4288,6 +4417,15 @@ msgstr ""
msgid "names of layouts"
msgstr "nomes das disposições"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr ""
@@ -5257,6 +5395,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "prefixo para mensagens de ação"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -6223,6 +6375,111 @@ msgstr "%s: erro: dicionário \"%s\" não está disponível em seu sistema"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Uso de memória (veja \"man mallinfo\" para ajuda):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sTecla \"%s\" não encontrada"
#, fuzzy, c-format
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s%s: script \"%s\" não carregado"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr "%sAviso: %s, linha %d: identificador de seção desconhecido (\"%s\")"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: unknown option for section \"%s\": %s"
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr "%sAviso: %s, linha %d: opção \"%s\" desconhecido para seção \"%s\""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: não foi possível interpretar arquivo \"%s\""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr ""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: não foi possível interpretar arquivo \"%s\""
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "Opção \"%s%s%s\":"
#, fuzzy, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sErro: não foi possível criar arquivo \"%s\""
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme \"%s\" already exists"
msgstr "%sErro: filtro \"%s\" já existe"
#, fuzzy, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sErro: não foi possível renomear filtro \"%s\" para \"%s\""
#, fuzzy, c-format
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "Filtro \"%s\" renomeado para \"%s\""
#, fuzzy, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sErro: não foi possível criar arquivo \"%s\""
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: não foi possível interpretar arquivo \"%s\""
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr ""
@@ -6380,22 +6637,37 @@ msgstr ""
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "1 se o WeeChat está sendo atualizado (comando `/upgrade`)"
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
msgid ""
@@ -7928,7 +8200,8 @@ msgstr "Arquivo de configuração desconhecido \"%s\""
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -11644,8 +11917,8 @@ msgstr "nome do servidor"
msgid "get nick from IRC host"
msgstr "obter apelido de host IRC"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "host IRC (exemplo: `:apelido!nome@servidor.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "host IRC (exemplo: `:apelido!nome@servidor`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -11881,8 +12154,8 @@ msgstr "%s%s: este buffer não é um canal!"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -13046,7 +13319,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -14878,11 +15151,11 @@ msgstr ""
#, fuzzy
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"lista separada por vírgulas dos plugins para carregar automaticamente "
"nainicialização, \"*\" significa todos os plugins encontrados, um nome "
@@ -14891,10 +15164,10 @@ msgstr ""
"plugins (exemplos: \"*\" ou \"*,!lua,!tcl\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -14927,6 +15200,11 @@ msgid ""
"1 are recommended values)"
msgstr ""
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
#, fuzzy
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
@@ -15045,7 +15323,7 @@ msgstr "numero de clientes para o relay"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
@@ -15165,6 +15443,10 @@ msgstr "%s%s: erro ao associar (\"bind\") na porta %d (%s.%s)"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: erro ao associar (\"bind\") na porta %d (%s.%s)"
#, fuzzy, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s%s: não foi possível aceitar o cliente na porta %d (%s.%s)"
#, fuzzy, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: não foi possível aceitar o cliente na porta %d (%s.%s)"
@@ -15201,7 +15483,7 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: memória insuficiente para escutar na nova porta"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgid "Relay WeeChat data to remote applications"
msgstr ""
msgid "connecting"
@@ -15445,9 +15727,9 @@ msgstr "Alt+key/input: v=volta para lista d=pular para o diff"
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
@@ -15819,6 +16101,10 @@ msgstr "scripts %s carregados:"
msgid "script name with extension"
msgstr "list de scripts"
#, fuzzy
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "lista de dicionários (separados por vírgula) para uso neste buffer"
#, fuzzy
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
@@ -16443,7 +16729,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
+302 -30
View File
@@ -23,10 +23,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-03-08 08:59+0100\n"
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: Russian <weechat-dev@nongnu.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -162,7 +162,7 @@ msgstr ""
#, fuzzy, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"%s Copyright (C) 2003-2010, собран %s %s\n"
"Разработчик - Sébastien Helleu <flashcode@flashtux.org> - %s"
@@ -1012,6 +1012,48 @@ msgstr "не на канале"
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%s plugin \"%s\" не найден\n"
#, fuzzy
msgid "No theme available"
msgstr " . тип: целочисленный\n"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme \"%s\" not found"
msgstr "%s сервер \"%s\" не найден\n"
#, fuzzy, c-format
msgid "Theme \"%s%s%s\":"
msgstr "Ники %s%s%s: %s["
#, fuzzy, c-format
msgid " source: %s"
msgstr " IRC(%s)\n"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
msgid " description: %s"
msgstr " . описание: %s\n"
#, fuzzy, c-format
msgid " date: %s"
msgstr " IRC(%s)\n"
#, fuzzy, c-format
msgid " WeeChat version: %s"
msgstr "слоган WeeChat"
#, c-format
msgid " overrides: %d"
msgstr ""
#, fuzzy, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%s не могу сохранить конфигурационный файл pluginов\n"
@@ -1179,6 +1221,16 @@ msgstr ""
" -all: включить режим \"отсутствую\" на всех подключенных серверах\n"
"сообщение: причина отсутствия (если сообщения нет - статус снимается)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
#, fuzzy
msgid "manage bars"
msgstr "управление буферами"
@@ -3525,6 +3577,75 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
#, fuzzy
msgid "manage color themes"
msgstr "Список сокращений:\n"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr "Список сокращений:\n"
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
msgid "raw[rename]: rename a user theme file"
msgstr "Список сокращений:\n"
#, fuzzy
#| msgid "get/set channel topic"
msgid "raw[del]: delete a user theme file"
msgstr "получить/установить тему канала"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
msgid "name: name of a theme"
msgstr "Список сокращений:\n"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
#, fuzzy
msgid "toggle value of a config option"
msgstr "Не найден параметр\n"
@@ -4081,6 +4202,15 @@ msgstr ""
msgid "names of layouts"
msgstr "Список сокращений:\n"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr ""
@@ -4930,6 +5060,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "ответить на ping"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
#, fuzzy
msgid ""
"time format for dates converted to strings and displayed in messages (see "
@@ -5893,6 +6037,104 @@ msgstr "%s plugin \"%s\" не найден\n"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr ""
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%s сервер \"%s\" не найден\n"
#, fuzzy, c-format
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s сервер \"%s\" не найден\n"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr "%s %s, строка %d: неизвестный идентификатор секции (\"%s\")\n"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr "%s %s, строка %d: неизвестный идентификатор секции (\"%s\")\n"
#, fuzzy, c-format
msgid "%sFailed to parse theme file \"%s\""
msgstr "Не могу записать лог-файл \"%s\"\n"
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr ""
#, fuzzy, c-format
msgid "%sFailed to save theme \"%s\""
msgstr "Не могу записать лог-файл \"%s\"\n"
#, fuzzy, c-format
msgid "Theme saved to: %s"
msgstr "Ники %s%s%s: %s["
#, fuzzy, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%s не могу создать файл \"%s\"\n"
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
msgid "%sTheme \"%s\" already exists"
msgstr "%s игнорирование уже существует\n"
#, fuzzy, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%s неизвестный параметр для команды \"%s\"\n"
#, fuzzy, c-format
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "команда users отключена"
#, fuzzy, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%s не могу создать файл \"%s\"\n"
#, fuzzy, c-format
msgid "%sFailed to delete theme \"%s\""
msgstr "Не могу записать лог-файл \"%s\"\n"
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, fuzzy, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "Обновляю WeeChat...\n"
@@ -6052,22 +6294,37 @@ msgstr ""
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr ""
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
msgid ""
@@ -7557,7 +7814,8 @@ msgstr "перезагрузить конфигурационный файл с
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -11327,7 +11585,7 @@ msgstr "цель: название сервера"
msgid "get nick from IRC host"
msgstr "банит ник или хост"
msgid "IRC host (like `:nick!name@server.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr ""
msgid ""
@@ -11561,8 +11819,8 @@ msgstr "Это окно не является каналом!\n"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -12686,7 +12944,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -14442,21 +14700,21 @@ msgstr ""
#, fuzzy
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"разделённый запятыми список автоматически загружаемых при запуске plug-"
"in'ов , \"*\" означает все найденные plug-in'ы (имена могут быть не полными, "
"например \"perl\" успешно загрузит \"libperl.so\")"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -14489,6 +14747,11 @@ msgid ""
"1 are recommended values)"
msgstr ""
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
"insensitive, use \"(?-i)\" at beginning to make it case-sensitive), example: "
@@ -14588,7 +14851,7 @@ msgstr "Нет сервера.\n"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
@@ -14710,6 +14973,10 @@ msgstr "%s невозможно создать сокет\n"
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s невозможно создать сокет\n"
#, fuzzy, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr "%s невозможно создать сокет\n"
#, fuzzy, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s невозможно создать сокет\n"
@@ -14748,7 +15015,7 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s недостаточно памяти для нового DCC\n"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgid "Relay WeeChat data to remote applications"
msgstr ""
#, fuzzy
@@ -14992,9 +15259,9 @@ msgstr ""
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
@@ -15348,6 +15615,9 @@ msgstr "FIFO pipe закрыт\n"
msgid "script name with extension"
msgstr "Список сокращений:\n"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr ""
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
@@ -15940,7 +16210,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
+416 -93
View File
@@ -22,10 +22,10 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"PO-Revision-Date: 2026-03-21 17:26+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2026-06-28 08:52+0200\n"
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language-Team: Serbian <ivan.pesic@gmail.com>\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -166,10 +166,10 @@ msgstr "искључује иниц/деиниц gcrypt"
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
"WeeChat %s ауторска права %s, компајлиран %s %s\n"
"Написао Себастијен Елеу <flashcode@flashtux.org> - %s"
"Написао %s <%s> - %s"
msgid "Usage:"
msgstr "Употреба:"
@@ -976,6 +976,55 @@ msgstr "Креирана опција: "
msgid "%sFunction \"%s\" is not available on this system"
msgstr "%sФункција „%s” није доступна на овом систему"
#, fuzzy
#| msgid "not available"
msgid "No theme available"
msgstr "није доступно"
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme \"%s\" not found"
msgstr "%sНије пронађен тастер „%s”"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme \"%s%s%s\":"
msgstr "Опција „%s%s%s”:"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " source: %s"
msgstr " фајл: %s"
msgid " source: built-in (in-memory)"
msgstr ""
#, fuzzy, c-format
#| msgid "description"
msgid " description: %s"
msgstr "опис"
#, fuzzy, c-format
#| msgid " file: %s"
msgid " date: %s"
msgstr " фајл: %s"
#, fuzzy, c-format
#| msgid "WeeChat version"
msgid " WeeChat version: %s"
msgstr "верзија програма WeeChat"
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr "%sНије успело уклањање опције „%s”"
@@ -1138,6 +1187,20 @@ msgid ""
msgstr ""
"порука: порука одсутности (ако се не наведе, статус одсутности се уклања)"
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
"irc додатак подразумевао приказује статус одсутности се само локално "
"(погледајте /help irc.look.display_away)."
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
"Ову команду могу да ухвате остали додаци и скрипте (погледајте "
"„Референтноупутство за API додатака”, функцију „hook_command_run”)."
msgid "manage bars"
msgstr "управљање тракама"
@@ -1240,16 +1303,12 @@ msgstr "маска: име у којем је дозвољен џокер „*
msgid "raw[set]: set a value for a bar property"
msgstr "raw[set]: поставља вредност особине траке"
#, fuzzy
#| msgid ""
#| "option: option to change (for options list, look at /set weechat.bar."
#| "<barname>.*)"
msgid ""
"option: option to change (for options list, look at /set weechat.bar."
"<bar_name>.*)"
msgstr ""
"опција: опција која се мења (за листу опција, погледајте /set weechat.bar."
"<иметраке>.*)"
"<име_траке>.*)"
msgid "value: new value for option"
msgstr "вредност: нова вредност опције"
@@ -1779,14 +1838,11 @@ msgid "evaluate expression"
msgstr "израчунавање израза"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
#, fuzzy
#| msgid ""
#| "[-n|-s] [-d] <expression> || [-n] [-d [-d]] -c <expression1> <operator> "
#| "<expression2>"
msgid ""
"[-n|-s] [-e] [-d] <expression> || [-n] [-d [-d]] -c <expression1> <operator> "
"<expression2>"
msgstr "[-n|-s] [-d] <израз> || [-n] [-d [-d]] -c <израз1> <оператор> <израз2>"
msgstr ""
"[-n|-s] [-e] [-d] <израз> || [-n] [-d [-d]] -c <израз1> <оператор> <израз2>"
msgid "raw[-n]: display result without sending it to buffer (debug mode)"
msgstr "raw[-n]: приказује резултат и не шаље га у бафер (дибаг режим)"
@@ -1799,7 +1855,7 @@ msgstr ""
"тачка запетама)"
msgid "raw[-e]: evaluate all commands before executing them"
msgstr ""
msgstr "raw[-e]: израчунај све команде пре него што се изврше"
msgid ""
"raw[-d]: display debug output after evaluation (with two -d: more verbose "
@@ -3457,16 +3513,12 @@ msgstr "raw[del]: брише проксије"
msgid "raw[set]: set a value for a proxy property"
msgstr "raw[set]: поставља вредност особине проксија"
#, fuzzy
#| msgid ""
#| "option: option to change (for options list, look at /set weechat.proxy."
#| "<proxyname>.*)"
msgid ""
"option: option to change (for options list, look at /set weechat.proxy."
"<proxy_name>.*)"
msgstr ""
"опција: опција која треба да се промени (за листу опција, погледајте /set "
"weechat.proxy.<имепроксија>.*)"
"weechat.proxy.<име_проксија>.*)"
msgid " add a http proxy, running on local host, port 8888:"
msgstr " додаје http прокси који се извршава на локалном хосту, порт 8888:"
@@ -3850,6 +3902,85 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr "број: број процеса који треба да се очисти"
#, fuzzy
#| msgid "manage custom bar items"
msgid "manage color themes"
msgstr "управљање прилагођеним ставкама траке"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
#, fuzzy
#| msgid ""
#| "raw[list]: list remote relay servers (without argument, this list is "
#| "displayed)"
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr ""
"raw[list]: листа сервера релеја удаљених (без аргумента се приказује ова "
"листа)"
#, fuzzy
#| msgid "raw[tags]: display tags for lines"
msgid "raw[-backups]: display backup theme files"
msgstr "raw[tags]: исписује ознаке за линије"
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
#, fuzzy
#| msgid "raw[rename]: rename a filter"
msgid "raw[rename]: rename a user theme file"
msgstr "raw[rename]: мења име филтеру"
#, fuzzy
#| msgid "raw[del]: delete a server"
msgid "raw[del]: delete a user theme file"
msgstr "raw[del]: брисање сервера"
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
#, fuzzy
#| msgid "name: name of trigger"
msgid "name: name of a theme"
msgstr "име: име окидача"
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
msgid "toggle value of a config option"
msgstr "пребацује вредност опције конфигурације"
@@ -4048,10 +4179,8 @@ msgstr ""
msgid "With option \"-quit\", the process is:"
msgstr "Процес са опцијом „-quit” је следећи:"
#, fuzzy
#| msgid " 1. close *ALL* connections (irc, xfer, relay, ...)"
msgid " 1. close *ALL* connections (irc, xfer, relay, etc.)"
msgstr " 1. затварање *СВИХ* конекција (irc, xfer, relay, ...)"
msgstr " 1. затварање *СВИХ* конекција (irc, xfer, relay, итд.)"
msgid " 2. save session into files (*.upgrade)"
msgstr " 2. чување сесије у фајлове (*.upgrade)"
@@ -4473,6 +4602,15 @@ msgstr "површине („chat” или име траке) за слобод
msgid "names of layouts"
msgstr "имена распореда"
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr "имена обезбеђених података (фајл sec.conf, одељак data)"
@@ -5606,6 +5744,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr "број размака који се користи за приказ табулатора у порукама"
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -6660,6 +6812,122 @@ msgstr "Системска функција „%s” није доступна"
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr "Употреба ресурса (за помоћ погледајте „man getrusage”):"
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, fuzzy, c-format
#| msgid "%sKey \"%s\" not found"
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr "%sНије пронађен тастер „%s”"
#, fuzzy, c-format
#| msgid "%s: script \"%s\" is not installed"
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr "%s: скрипта „%s” није инсталирана"
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, fuzzy, c-format
#| msgid "%sWarning: %s, line %d: ignoring unknown section identifier (\"%s\")"
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr ""
"%sУпозорење: %s, линија %d: игнорише се непознати идентификатор одељка („%s”)"
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, fuzzy, c-format
#| msgid ""
#| "%sWarning: %s, line %d: ignoring unknown option for section \"%s\": %s"
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr ""
"%sУпозорење: %s, линија %d: игнорише се непозната опција за одељак „%s”: %s"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to parse theme file \"%s\""
msgstr "%s%s: није успело парсирање фајла „%s”"
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, fuzzy, c-format
#| msgid "%sBuffer name \"%s\" is reserved for WeeChat"
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr "%sИме бафера „%s” је резервисано за програм WeeChat"
#, fuzzy, c-format
#| msgid "%sBuffer name \"%s\" is reserved for WeeChat"
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr "%sИме бафера „%s” је резервисано за програм WeeChat"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to save theme \"%s\""
msgstr "%s%s: није успело парсирање фајла „%s”"
#, fuzzy, c-format
#| msgid "Option \"%s%s%s\":"
msgid "Theme saved to: %s"
msgstr "Опција „%s%s%s”:"
#, fuzzy, c-format
#| msgid "%sCannot create file \"%s\""
msgid "%sCannot rename built-in theme \"%s\""
msgstr "%sНе може да се креира фајл „%s”"
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, fuzzy, c-format
#| msgid "%sBar \"%s\" already exists"
msgid "%sTheme \"%s\" already exists"
msgstr "%sТрака „%s” већ постоји"
#, fuzzy, c-format
#| msgid "%sUnable to rename filter \"%s\" to \"%s\""
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr "%sНије успела промена име филтера „%s” на „%s”"
#, fuzzy, c-format
#| msgid "Trigger \"%s\" renamed to \"%s\""
msgid "Theme \"%s\" renamed to \"%s\""
msgstr "Окидачу „%s” је промењено име у „%s”"
#, fuzzy, c-format
#| msgid "%sCannot create file \"%s\""
msgid "%sCannot delete built-in theme \"%s\""
msgstr "%sНе може да се креира фајл „%s”"
#, fuzzy, c-format
#| msgid "%s%s: unable to parse file \"%s\""
msgid "%sFailed to delete theme \"%s\""
msgstr "%s%s: није успело парсирање фајла „%s”"
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr "%sГрешка приликом ажурирања програма WeeChat фајлом „%s”:"
@@ -6819,35 +7087,36 @@ msgstr "Крај URL трансфера ’%s’, трансфер је заус
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr "WeeChat се извршава у режиму без интерфејса (ctrl-c за излаз)."
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
"Добродошли у WeeChat!\n"
"\n"
"Ако се тек упознајете са програмом WeeChat, препоручује се да прочитате "
"барем водич за брзи почетак, и корисничко упутство ако имате више времена; "
"они објашњавају основне концепте програма WeeChat.\n"
"Комплетна WeeChat документација је доступна на адреси: https://weechat.org/"
"doc/\n"
"\n"
"Такође је доступна и активна помоћ са /help за све команде и опције "
"(користите тастер Tab да довршите име).\n"
"Команда /fset може да вам помогне за прилагођавање програма WeeChat.\n"
"\n"
"Командама /server и /connect додајете и повезујете се на IRC сервер "
"(погледајте /help server)."
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
@@ -8596,9 +8865,14 @@ msgstr "> `xxx`: приказивање само опција са „xxx” у
msgid "> `f:xxx`: show only configuration file \"xxx\""
msgstr "> `f:xxx`: приказивање само конфигурационог фајла „xxx”"
#, fuzzy
#| msgid ""
#| "> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/"
#| "integer/string/color/enum)"
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
"> `t:xxx`: приказивање само типа „xxx” (bool/int/str/col/enum или boolean/"
"integer/string/color/enum)"
@@ -11906,7 +12180,6 @@ msgstr ""
msgid "left/right scroll in /list buffer (percent of width)"
msgstr "скроловање у лево/десно у /list баферу (проценат ширине)"
#, fuzzy
msgid ""
"comma-separated list of fields to sort channels (see /help list for a list "
"of fields); char \"-\" can be used before field to reverse order, char \"~\" "
@@ -11917,8 +12190,8 @@ msgstr ""
"листа поља за сортирање канала раздвојених запетама (погледајте /help list "
"за листу поља); карактер „-” може да се користи испред поља чиме се обрће "
"редослед, карактер „~” може да се употреби за поређење које не прави разлику "
"у величини слова; пример: „-users,~name2” за поређење које не прави разлику "
"у величини слова и обрнуто сортирање по имену опције"
"у величини слова; пример: „-users,~name2” најпре за највеће канале, па онда "
"сортирање које не прави разлику у величини слова по имену канала без префикса"
msgid "strip channel topic colors in /list buffer"
msgstr "уклањање боја теме канала у /list баферу"
@@ -12446,8 +12719,8 @@ msgstr "име сервера"
msgid "get nick from IRC host"
msgstr "враћа надимак из IRC хоста"
msgid "IRC host (like `:nick!name@server.com`)"
msgstr "IRC хост (као `:надимак!име@сервер.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr "IRC хост (као `:надимак!име@сервер`)"
msgid ""
"get nick color code (*deprecated* since version 1.5, replaced by "
@@ -12666,11 +12939,12 @@ msgstr "%s%s: овај бафер није канал!"
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
"%d канала (укупно: %d) | Филтер: %s | Сортирање: %s | Тастер(унос): ctrl+j= "
"приступ каналу, ($)=освежавање, (q)=затварање бафера"
"%d канала (укупно: %d) | Филтер: %s | Сортирање: %s | Тастери: "
"ctrl+j=приступ каналу | Унос: $=освежавање, s:x,y=сортирање, *=ресет "
"филтера, q=затварање бафера"
msgid "Empty list of channels, try \"$\" to refresh list"
msgstr "Празна листа канала, покушајте „$” да освежите листу"
@@ -13867,7 +14141,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -13877,9 +14151,9 @@ msgstr ""
"текућем фајлу се поставља екстензија .1; дозвољава се цели број са суфиксом: "
"b = бајтова (подразумевано ако се не наведе јединица), k = килобајта, m = "
"мегабајта, g = гигабајта, t = терабајта; пример: „2g” значи да се ротација "
"врши ако је величина фајла > 2,000,000,000 бајтова; ако се постави на „0”, "
"ротација се не врши (нема ограничења лог фајла); УПОЗОРЕЊЕ: пре него што "
"промените ову опцију, требало би најпре да поставите тип компресије опцијом "
"врши ако је величина фајла > 2 GB; ако се постави на „0”, ротација се не "
"врши (нема ограничења лог фајла); УПОЗОРЕЊЕ: пре него што промените ову "
"опцију, требало би најпре да поставите тип компресије опцијом "
"logger.file.rotation_compression_type"
msgid ""
@@ -15678,29 +15952,29 @@ msgstr ""
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
"листа хеш алгоритама раздвојених запетама који се користе за аутентификацију "
"лозинке у weechat протоколу, могу бити: „plain” (лозинка је чисти текст, не "
"хешира се), „sha256”, „sha512”, „pbkdf2+sha256”, „pbkdf2+sha512”), „*” значи "
"сви алгоритми, име које почиње са „!” је негативна вредност којим се "
"спречава употреба тог алгоритма, у именима је дозвољена употреба џокера „*” "
"(примери: „*”, „pbkdf2*”, „*,!plain”)"
"лозинке у „api” и „weechat протоколима, који могу бити: „plain” (лозинка је "
"чисти текст, не хешира се), „sha256”, „sha512”, „pbkdf2+sha256”, "
"„pbkdf2+sha512”), „*” значи сви алгоритми, име које почиње са „!” је "
"негативна вредност којим се спречава употреба тог алгоритма, у именима је "
"дозвољена употреба џокера „*” (примери: „*”, „pbkdf2*”, „*,!plain”)"
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
"број итерација који се захтева од клијента у weechat протоколу када се за "
"аутентификацију користи лозинка хеширана PBKDF2 алгоритмом ; више итерација "
"је боље у смислу безбедности, али је спорије за израчунавање; ако је ваш CPU "
"спор, овај број не би требало да буде сувише велики"
"број итерација који се захтева од клијента у „api” и „weechat протоколима "
"када се за аутентификацију користи лозинка хеширана PBKDF2 алгоритмом; више "
"итерација је боље у смислу безбедности, али је спорије за израчунавање; ако "
"је ваш CPU спор, овај број не би требало да буде сувише велики"
msgid ""
"number of seconds to allow before and after the current time for the hash of "
@@ -15744,6 +16018,13 @@ msgstr ""
"након, ...; велики број умањује ниво безбедности (препоручене вредности су 0 "
"или 1)"
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
"дозволе за Unix сокет, као октална вредност (погледајте man chmod); мора да "
"буде број од 3 цифре, свака између 0 и 7"
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
"insensitive, use \"(?-i)\" at beginning to make it case-sensitive), example: "
@@ -15869,11 +16150,11 @@ msgstr "број клијената за релеј"
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
"протокол,статус (оба нису обавезна, за сваки аргумент „*” значи све; "
"протоколи: irc, weechat; статуси: connecting, waiting_auth, connected, "
"протоколи: api, irc, weechat; статуси: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgid "list of relay clients"
@@ -16006,6 +16287,11 @@ msgstr "%s%s: „bind” не може да се изврши на путању
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr "%s%s: „bind” не може да се изврши на порт %d (%s): грешка %d %s"
#, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr ""
"%s%s: упозорење: не могу да се поставе дозволе на путањи %s (%s): грешка%d %s"
#, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr "%s%s: „listen” не може да се покрене на путањи %s (%s): грешка%d %s"
@@ -16045,8 +16331,8 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr "%s%s: нема довољно слободне меморије за слушање на новом порту"
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgstr "Релеј WeeChat података удаљеној апликацији (irc/weechat протоколи)"
msgid "Relay WeeChat data to remote applications"
msgstr "Релеј WeeChat података удаљеној апликацији"
msgid "connecting"
msgstr "повезивање"
@@ -16276,15 +16562,15 @@ msgstr "Alt+тастер/унос: v=назад на листу d=скок на
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
"%d/%d скрипти илтер: %s) | Сортирање: %s | Alt+тастер/унос: i=инсталација, "
"%d/%d скрипти | Филтер: %s | Сортирање: %s | Alt+тастер/унос: i=инсталација, "
"r=уклањање, l=учитавање, L=поновно учитавање, u=уклањање из меморије, "
"A=аутоучитавање, h=задржавање, v=преглед скрипте | Унос: q=затварање, "
"$=освежавање, s:x,y=сортирање, речи=филтер, *=ресет филтера | Миш: "
"$=освежавање, s:x,y=сортирање, words=филтер, *=ресет филтера | Миш: "
"леви=избор, десни=инсталација/уклањање"
msgid "Scripts"
@@ -16661,6 +16947,9 @@ msgstr "1 ако је скрипта учитана"
msgid "script name with extension"
msgstr "име скрипте са екстензијом"
msgid "comma-separated list of plugin:extension with supported languages"
msgstr "листа додатак:екстензија са подржаним језицима раздвојених запетама"
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr "име скрипте са екстензијом (дозвољен је џокер „*”) (није обавезно)"
@@ -17294,8 +17583,12 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr "> тип `command_run`: команд(а/е) (обавезно)"
msgid "> type `timer`: interval (required), align on second, max calls"
msgstr "> тип `timer`: интервал (обавезан), поравнање на секунди, макс позива"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
"> тип `timer`: интервал (обавезан, у милисекундама), поравнање на секунди, "
"макс позива"
msgid "> type `config`: name(s) of option (required)"
msgstr "> тип `config`: име(на) опције (обавезно)"
@@ -17701,6 +17994,9 @@ msgid ""
"text to display before the nicks in the bar item \"typing\"; if set, it is "
"used instead of the translated string \"Typing: \" which is used by default"
msgstr ""
"текст који се приказује испред надимака у ставци траке „typing”; ако је "
"постављен, употребиће се уместо преведеног стринга „Typing: ”, који се "
"подразумевано користи"
msgid "Typing status of users"
msgstr "Статус куцања корисника"
@@ -17834,17 +18130,14 @@ msgstr "величина блока за слање пакета, у бајто
msgid "does not wait for ACK when sending file"
msgstr "не чека се на ACK када се шаље фајл"
#, fuzzy
#| msgid ""
#| "IP or DNS address used for sending and passively receiving files/chats "
#| "(if empty, local interface IP is used)"
msgid ""
"IP or DNS address used for sending and passively receiving files/chats; if "
"empty, local interface IP is used (note: content is evaluated, see /help "
"eval)"
msgstr ""
"IP или DNS адреса која се користи за слање и пасивно примање фајлова/"
"разговора (ако је празно, користи се IP локалног интерфејса)"
"разговора; ако је празно, користи се IP локалног интерфејса (напомена: "
"садржај сер израчунава, погледајте /help eval)"
msgid ""
"restricts outgoing files/chats and incoming/passive files to use only ports "
@@ -18174,3 +18467,33 @@ msgid ""
msgstr ""
"%s%s: не може да се прихвати настављање фајла „%s” (порт: %d, почетна "
"позиција: %llu): xfer није пронађен или није спреман за трансфер"
#~ msgid ""
#~ "Welcome to WeeChat!\n"
#~ "\n"
#~ "If you are discovering WeeChat, it is recommended to read at least the "
#~ "quickstart guide, and the user's guide if you have some time; they "
#~ "explain main WeeChat concepts.\n"
#~ "All WeeChat docs are available at: https://weechat.org/doc/\n"
#~ "\n"
#~ "Moreover, there is inline help with /help on all commands and options "
#~ "(use Tab key to complete the name).\n"
#~ "The command /fset can help to customize WeeChat.\n"
#~ "\n"
#~ "You can add and connect to an IRC server with /server and /connect "
#~ "commands (see /help server)."
#~ msgstr ""
#~ "Добродошли у WeeChat!\n"
#~ "\n"
#~ "Ако се тек упознајете са програмом WeeChat, препоручује се да прочитате "
#~ "барем водич за брзи почетак, и корисничко упутство ако имате више "
#~ "времена; они објашњавају основне концепте програма WeeChat.\n"
#~ "Комплетна WeeChat документација је доступна на адреси: https://"
#~ "weechat.org/doc/\n"
#~ "\n"
#~ "Такође је доступна и активна помоћ са /help за све команде и опције "
#~ "(користите тастер Tab да довршите име).\n"
#~ "Команда /fset може да вам помогне за прилагођавање програма WeeChat.\n"
#~ "\n"
#~ "Командама /server и /connect додајете и повезујете се на IRC сервер "
#~ "(погледајте /help server)."
+491 -192
View File
File diff suppressed because it is too large Load Diff
+294 -29
View File
@@ -23,7 +23,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2026-03-21 17:24+0100\n"
"POT-Creation-Date: 2026-07-04 22:01+0200\n"
"PO-Revision-Date: 2014-08-16 10:27+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -148,7 +148,7 @@ msgstr ""
#, c-format
msgid ""
"WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> - %s"
"Developed by %s <%s> - %s"
msgstr ""
msgid "Usage:"
@@ -926,6 +926,47 @@ msgstr ""
msgid "%sFunction \"%s\" is not available on this system"
msgstr ""
msgid "No theme available"
msgstr ""
msgid "Themes:"
msgstr ""
#, c-format
msgid " %s %s%s%s (file)"
msgstr ""
#, c-format
msgid "%sTheme \"%s\" not found"
msgstr ""
#, c-format
msgid "Theme \"%s%s%s\":"
msgstr ""
#, c-format
msgid " source: %s"
msgstr ""
msgid " source: built-in (in-memory)"
msgstr ""
#, c-format
msgid " description: %s"
msgstr ""
#, c-format
msgid " date: %s"
msgstr ""
#, c-format
msgid " WeeChat version: %s"
msgstr ""
#, c-format
msgid " overrides: %d"
msgstr ""
#, c-format
msgid "%sFailed to unset option \"%s\""
msgstr ""
@@ -1072,6 +1113,16 @@ msgid ""
"message: message for away (if no message is given, away status is removed)"
msgstr ""
msgid ""
"By default the away status is displayed only locally by the irc plugin (see /"
"help irc.look.display_away)."
msgstr ""
msgid ""
"This command can be caught by other plugins and scripts (see \"Plugin API "
"reference\", function \"hook_command_run\")."
msgstr ""
msgid "manage bars"
msgstr ""
@@ -3295,6 +3346,69 @@ msgstr ""
msgid "number: number of processes to clean"
msgstr ""
msgid "manage color themes"
msgstr ""
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
msgid ""
"[list [-backups]] || apply <name> || reset || save <name> || rename <old> "
"<new> || del <name> || info <name>"
msgstr ""
msgid ""
"raw[list]: list registered themes and any *.theme files in the WeeChat "
"configuration directory; the active theme (matching weechat.look.theme) is "
"marked with \"->\""
msgstr ""
msgid "raw[-backups]: display backup theme files"
msgstr ""
msgid ""
"raw[apply]: apply a theme (set every themable option to the value from the "
"theme); if a file named <name>.theme exists in directory \"themes\" it "
"shadows any built-in theme of the same name"
msgstr ""
msgid ""
"raw[reset]: reset every themable option to its default value (restores the "
"original look shipped with WeeChat)"
msgstr ""
msgid ""
"raw[save]: save current themable options to a file <name>.theme in directory "
"\"themes\"; every themable option is written, so the file is self-contained; "
"the name must not match a built-in theme or start with \"backup-\""
msgstr ""
msgid "raw[rename]: rename a user theme file"
msgstr ""
msgid "raw[del]: delete a user theme file"
msgstr ""
msgid ""
"raw[info]: display details on a theme (name, description, creation date, "
"WeeChat version, number of option overrides)"
msgstr ""
msgid "name: name of a theme"
msgstr ""
msgid ""
"Themes are named bundles of option overrides. Built-in themes are registered "
"in memory by core/plugins/scripts; user themes are read from files in "
"directory \"themes\" inside the WeeChat configuration directory."
msgstr ""
msgid ""
"By default, `/theme apply` command creates a backup of current themable "
"values in directory \"themes\" before applying (file name: \"backup-"
"<timestamp>.theme\"); the previous state can be restored with: `/theme apply "
"backup-<timestamp>`. This is controlled by the option "
"weechat.look.theme_backup."
msgstr ""
msgid "toggle value of a config option"
msgstr ""
@@ -3807,6 +3921,15 @@ msgstr ""
msgid "names of layouts"
msgstr ""
msgid "names of themes (built-ins + user files + backups)"
msgstr ""
msgid "names of user theme files (without built-ins and backups)"
msgstr ""
msgid "names of theme files on disk (user files + backups, no built-ins)"
msgstr ""
msgid "names of secured data (file sec.conf, section data)"
msgstr ""
@@ -4606,6 +4729,20 @@ msgstr ""
msgid "number of spaces used to display tabs in messages"
msgstr ""
msgid ""
"name of the last theme applied with command /theme (set automatically, do "
"not change manually); informational only, the theme is not re-applied at "
"startup"
msgstr ""
msgid ""
"create a backup theme file with the current themable options before applying "
"a theme with command /theme; if the backup file cannot be written, the apply "
"is aborted (no option is changed); the backup file is written to directory "
"\"themes\" inside the WeeChat configuration directory and can be restored "
"with the command: `/theme apply backup-<timestamp>`"
msgstr ""
msgid ""
"time format for dates converted to strings and displayed in messages (see "
"man strftime for date/time specifiers)"
@@ -5457,6 +5594,104 @@ msgstr ""
msgid "Resource usage (see \"man getrusage\" for help):"
msgstr ""
msgid "WeeChat default theme for light-background terminals"
msgstr ""
msgid "Automatic backup"
msgstr ""
#, c-format
msgid "%sTheme: option \"%s\" not found, skipped"
msgstr ""
#, c-format
msgid "%sTheme: option \"%s\" is not themable, skipped"
msgstr ""
#, c-format
msgid "%s%s: line %d: malformed section header"
msgstr ""
#, c-format
msgid "%s%s: line %d: ignoring unknown section \"%s\""
msgstr ""
#, c-format
msgid "%s%s: line %d: missing '=' separator"
msgstr ""
#, c-format
msgid "%s%s: line %d: ignoring unknown [info] key \"%s\""
msgstr ""
#, c-format
msgid "%sFailed to parse theme file \"%s\""
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting apply (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "Previous state saved as theme \"%s\"; to restore: /theme apply %s"
msgstr ""
#, c-format
msgid ""
"%sUnable to create theme backup; aborting reset (disable option "
"weechat.look.theme_backup to force)"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for automatic backups"
msgstr ""
#, c-format
msgid "%sName \"%s\" is reserved for a built-in theme"
msgstr ""
#, c-format
msgid "%sFailed to save theme \"%s\""
msgstr ""
#, c-format
msgid "Theme saved to: %s"
msgstr ""
#, c-format
msgid "%sCannot rename built-in theme \"%s\""
msgstr ""
#, c-format
msgid "%sNew name is the same as old name"
msgstr ""
#, c-format
msgid "%sTheme \"%s\" already exists"
msgstr ""
#, c-format
msgid "%sFailed to rename theme \"%s\" to \"%s\""
msgstr ""
#, c-format
msgid "Theme \"%s\" renamed to \"%s\""
msgstr ""
#, c-format
msgid "%sCannot delete built-in theme \"%s\""
msgstr ""
#, c-format
msgid "%sFailed to delete theme \"%s\""
msgstr ""
#, c-format
msgid "Theme deleted: %s"
msgstr ""
#, c-format
msgid "%sError upgrading WeeChat with file \"%s\":"
msgstr ""
@@ -5609,22 +5844,37 @@ msgstr ""
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
msgstr ""
msgid "Welcome to WeeChat!"
msgstr ""
msgid ""
"Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at least the "
"quickstart guide, and the user's guide if you have some time; they explain "
"main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"main WeeChat concepts."
msgstr ""
#, c-format
msgid "All WeeChat docs are available at: %s"
msgstr ""
msgid ""
"Moreover, there is inline help with /help on all commands and options (use "
"Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"Tab key to complete the name)."
msgstr ""
msgid "The command /fset can help to customize WeeChat."
msgstr ""
msgid ""
"You can add and connect to an IRC server with /server and /connect commands "
"(see /help server)."
msgstr ""
msgid ""
"The \"light\" theme will be automatically applied. Use /theme reset to "
"switch back to the default dark theme."
msgstr ""
#. TRANSLATORS: the "under %s" can be "under screen" or "under tmux"
#, c-format
msgid ""
@@ -7042,7 +7292,8 @@ msgstr ""
msgid ""
"> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum or boolean/integer/"
"string/color/enum)"
"string/color/enum); the special value \"themable\" can be used to show all "
"options that can be used in themes, regardless of type"
msgstr ""
msgid "> `d`: show only changed options"
@@ -10267,7 +10518,7 @@ msgstr ""
msgid "get nick from IRC host"
msgstr ""
msgid "IRC host (like `:nick!name@server.com`)"
msgid "IRC host (like `:nick!name@server`)"
msgstr ""
msgid ""
@@ -10471,8 +10722,8 @@ msgstr ""
#, c-format
msgid ""
"%d channels (total: %d) | Filter: %s | Sort: %s | Key(input): ctrl+j=join "
"channel, ($)=refresh, (q)=close buffer"
"%d channels (total: %d) | Filter: %s | Sort: %s | Keys: ctrl+j=join channel "
"| Input: $=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer"
msgstr ""
msgid "Empty list of channels, try \"$\" to refresh list"
@@ -11562,7 +11813,7 @@ msgid ""
"and the current file is renamed with extension .1; an integer number with a "
"suffix is allowed: b = bytes (default if no unit given), k = kilobytes, m = "
"megabytes, g = gigabytes, t = terabytes; example: \"2g\" causes a rotation "
"if the file size is > 2,000,000,000 bytes; if set to \"0\", no rotation is "
"if the file size is greater than 2 GB; if set to \"0\", no rotation is "
"performed (unlimited log size); WARNING: before changing this option, you "
"should first set the compression type via option "
"logger.file.rotation_compression_type"
@@ -13167,18 +13418,18 @@ msgstr ""
msgid ""
"comma separated list of hash algorithms used for password authentication in "
"weechat protocol, among these values: \"plain\" (password in plain text, not "
"hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", \"pbkdf2+sha512\"), "
"\"*\" means all algorithms, a name beginning with \"!\" is a negative value "
"to prevent an algorithm from being used, wildcard \"*\" is allowed in names "
"(examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
"\"api\" and \"weechat\" protocols, among these values: \"plain\" (password "
"in plain text, not hashed), \"sha256\", \"sha512\", \"pbkdf2+sha256\", "
"\"pbkdf2+sha512\"), \"*\" means all algorithms, a name beginning with \"!\" "
"is a negative value to prevent an algorithm from being used, wildcard \"*\" "
"is allowed in names (examples: \"*\", \"pbkdf2*\", \"*,!plain\")"
msgstr ""
msgid ""
"number of iterations asked to the client in weechat protocol when a hashed "
"password with algorithm PBKDF2 is used for authentication; more iterations "
"is better in term of security but is slower to compute; this number should "
"not be too high if your CPU is slow"
"number of iterations asked to the client in \"api\" and \"weechat\" "
"protocols when a hashed password with algorithm PBKDF2 is used for "
"authentication; more iterations is better in term of security but is slower "
"to compute; this number should not be too high if your CPU is slow"
msgstr ""
msgid ""
@@ -13208,6 +13459,11 @@ msgid ""
"1 are recommended values)"
msgstr ""
msgid ""
"permissions for the Unix socket, as octal value (see man chmod); it must be "
"a number with 3 digits, each between 0 and 7"
msgstr ""
msgid ""
"POSIX extended regular expression with origins allowed in websockets (case-"
"insensitive, use \"(?-i)\" at beginning to make it case-sensitive), example: "
@@ -13299,7 +13555,7 @@ msgstr ""
#. TRANSLATORS: please do not translate the status names, they must be used in English
msgid ""
"protocol,status (both are optional, for each argument \"*\" means all; "
"protocols: irc, weechat; statuses: connecting, waiting_auth, connected, "
"protocols: api, irc, weechat; statuses: connecting, waiting_auth, connected, "
"auth_failed, disconnected)"
msgstr ""
@@ -13418,6 +13674,10 @@ msgstr ""
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
msgstr ""
#, c-format
msgid "%s%s: warning: failed to set permissions on path %s (%s): error %d %s"
msgstr ""
#, c-format
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
msgstr ""
@@ -13454,7 +13714,7 @@ msgstr ""
msgid "%s%s: not enough memory for listening on new port"
msgstr ""
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
msgid "Relay WeeChat data to remote applications"
msgstr ""
msgid "connecting"
@@ -13679,9 +13939,9 @@ msgstr ""
#, c-format
msgid ""
"%d/%d scripts (filter: %s) | Sort: %s | Alt+key/input: i=install, r=remove, "
"%d/%d scripts | Filter: %s | Sort: %s | Alt+key/input: i=install, r=remove, "
"l=load, L=reload, u=unload, A=autoload, h=(un)hold, v=view script | Input: "
"q=close, $=refresh, s:x,y=sort, words=filter, *=reset filter | Mouse: "
"$=refresh, s:x,y=sort, words=filter, *=reset filter, q=close buffer | Mouse: "
"left=select, right=install/remove"
msgstr ""
@@ -13999,6 +14259,9 @@ msgstr ""
msgid "script name with extension"
msgstr ""
msgid "comma-separated list of plugin:extension with supported languages"
msgstr ""
msgid "script name with extension (wildcard \"*\" is allowed) (optional)"
msgstr ""
@@ -14557,7 +14820,9 @@ msgstr ""
msgid "> type `command_run`: command(s) (required)"
msgstr ""
msgid "> type `timer`: interval (required), align on second, max calls"
msgid ""
"> type `timer`: interval (required, in milliseconds), align on second, max "
"calls"
msgstr ""
msgid "> type `config`: name(s) of option (required)"
+2
View File
@@ -51,6 +51,8 @@ set(LIB_CORE_SRC
core-signal.c core-signal.h
core-string.c core-string.h
core-sys.c core-sys.h
core-theme.c core-theme.h
core-theme-builtin.c
core-upgrade.c core-upgrade.h
core-upgrade-file.c core-upgrade-file.h
core-url.c core-url.h
+3 -1
View File
@@ -178,12 +178,14 @@ args_display_copyright (void)
stdout,
/* TRANSLATORS: "%s %s" after "compiled on" is date and time */
_("WeeChat %s Copyright %s, compiled on %s %s\n"
"Developed by Sébastien Helleu <flashcode@flashtux.org> "
"Developed by %s <%s> "
"- %s"),
version_get_version_with_git (),
WEECHAT_COPYRIGHT_DATE,
version_get_compilation_date (),
version_get_compilation_time (),
WEECHAT_AUTHOR_NAME,
WEECHAT_AUTHOR_EMAIL,
WEECHAT_WEBSITE);
string_fprintf (stdout, "\n");
}
+424 -181
View File
File diff suppressed because it is too large Load Diff
+156
View File
@@ -46,6 +46,7 @@
#include "core-proxy.h"
#include "core-secure.h"
#include "core-string.h"
#include "core-theme.h"
#include "../gui/gui-completion.h"
#include "../gui/gui-bar.h"
#include "../gui/gui-bar-item.h"
@@ -63,6 +64,12 @@
extern char **environ;
struct t_completion_theme_dir
{
struct t_gui_completion *completion;
int show_backups;
};
/*
* Add a word with quotes around to completion list.
@@ -1974,6 +1981,145 @@ completion_list_add_layouts_names_cb (const void *pointer, void *data,
return WEECHAT_RC_OK;
}
/*
* Add filename (without ".theme" suffix) to completion list if it ends
* with ".theme"; skips "backup-*.theme" entries unless data is non-NULL.
*
* Callback for dir_exec_on_files; "data" carries a pair of pointers:
* data[0] = struct t_gui_completion *completion (target)
* data[1] = int *show_backups
*/
void
completion_theme_add_file_cb (void *data, const char *filename)
{
struct t_completion_theme_dir *ctx;
const char *base;
char *name;
size_t len;
ctx = (struct t_completion_theme_dir *)data;
base = strrchr (filename, '/');
base = (base) ? base + 1 : filename;
len = strlen (base);
if ((len < 7) || (strcmp (base + len - 6, ".theme") != 0))
return;
if (!ctx->show_backups && (strncmp (base, "backup-", 7) == 0))
return;
name = string_strndup (base, len - 6);
if (!name)
return;
gui_completion_list_add (ctx->completion, name, 0, WEECHAT_LIST_POS_SORT);
free (name);
}
/*
* Add theme names to completion list: in-memory built-ins plus any
* "*.theme" files in <weechat_config_dir>/themes/ (including backups).
*/
int
completion_list_add_theme_themes_all_cb (const void *pointer, void *data,
const char *completion_item,
struct t_gui_buffer *buffer,
struct t_gui_completion *completion)
{
struct t_theme *ptr_theme;
struct t_completion_theme_dir ctx;
char *dir;
/* make C compiler happy */
(void) pointer;
(void) data;
(void) completion_item;
(void) buffer;
for (ptr_theme = themes; ptr_theme; ptr_theme = ptr_theme->next_theme)
{
gui_completion_list_add (completion, ptr_theme->name,
0, WEECHAT_LIST_POS_SORT);
}
dir = NULL;
string_asprintf (&dir, "%s/themes", weechat_config_dir);
if (dir)
{
ctx.completion = completion;
ctx.show_backups = 1;
dir_exec_on_files (dir, 0, 0, &completion_theme_add_file_cb, &ctx);
free (dir);
}
return WEECHAT_RC_OK;
}
/*
* Add user theme file names (excluding built-ins and backups) to the
* completion list; suitable for /theme save and /theme del.
*/
int
completion_list_add_theme_themes_user_cb (const void *pointer, void *data,
const char *completion_item,
struct t_gui_buffer *buffer,
struct t_gui_completion *completion)
{
struct t_completion_theme_dir ctx;
char *dir;
/* make C compiler happy */
(void) pointer;
(void) data;
(void) completion_item;
(void) buffer;
dir = NULL;
string_asprintf (&dir, "%s/themes", weechat_config_dir);
if (dir)
{
ctx.completion = completion;
ctx.show_backups = 0;
dir_exec_on_files (dir, 0, 0, &completion_theme_add_file_cb, &ctx);
free (dir);
}
return WEECHAT_RC_OK;
}
/*
* Add every on-disk theme file (user files + backups, no built-ins)
* to the completion list; suitable for /theme rename which can take a
* backup as its source.
*/
int
completion_list_add_theme_themes_files_cb (const void *pointer, void *data,
const char *completion_item,
struct t_gui_buffer *buffer,
struct t_gui_completion *completion)
{
struct t_completion_theme_dir ctx;
char *dir;
/* make C compiler happy */
(void) pointer;
(void) data;
(void) completion_item;
(void) buffer;
dir = NULL;
string_asprintf (&dir, "%s/themes", weechat_config_dir);
if (dir)
{
ctx.completion = completion;
ctx.show_backups = 1;
dir_exec_on_files (dir, 0, 0, &completion_theme_add_file_cb, &ctx);
free (dir);
}
return WEECHAT_RC_OK;
}
/*
* Add a secured data to completion list.
*/
@@ -2365,6 +2511,16 @@ completion_init (void)
hook_completion (NULL, "layouts_names",
N_("names of layouts"),
&completion_list_add_layouts_names_cb, NULL, NULL);
hook_completion (NULL, "theme_themes_all",
N_("names of themes (built-ins + user files + backups)"),
&completion_list_add_theme_themes_all_cb, NULL, NULL);
hook_completion (NULL, "theme_themes_user",
N_("names of user theme files (without built-ins and backups)"),
&completion_list_add_theme_themes_user_cb, NULL, NULL);
hook_completion (NULL, "theme_themes_files",
N_("names of theme files on disk (user files + backups, "
"no built-ins)"),
&completion_list_add_theme_themes_files_cb, NULL, NULL);
hook_completion (NULL, "secured_data",
N_("names of secured data (file sec.conf, section data)"),
&completion_list_add_secured_data_cb, NULL, NULL);
+80 -94
View File
@@ -46,6 +46,7 @@
#include "core-infolist.h"
#include "core-log.h"
#include "core-string.h"
#include "core-util.h"
#include "core-version.h"
#include "../gui/gui-color.h"
#include "../gui/gui-chat.h"
@@ -647,6 +648,7 @@ config_file_option_malloc (void)
new_option->name = NULL;
new_option->parent_name = NULL;
new_option->type = 0;
new_option->themable = 0;
new_option->description = NULL;
new_option->string_values = NULL;
new_option->min = 0;
@@ -703,17 +705,37 @@ config_file_new_option (struct t_config_file *config_file,
void *callback_delete_data)
{
struct t_config_option *new_option;
int var_type, int_value, argc, i, index_value;
long number;
char *error, *pos, *option_name, *parent_name;
int var_type, int_value, argc, i, index_value, number, themable;
const char *pos, *ptr_type;
char *option_name, *parent_name, *type_name;
new_option = NULL;
option_name = NULL;
parent_name = NULL;
type_name = NULL;
themable = 0;
if (!name || !type)
goto error;
/*
* extract optional "|themable" suffix from type
* (e.g.: "string|themable" for a string option that contains color names)
*/
pos = strchr (type, '|');
if (pos && (strcmp (pos, "|themable") == 0))
{
type_name = string_strndup (type, pos - type);
if (!type_name)
goto error;
ptr_type = type_name;
themable = 1;
}
else
{
ptr_type = type;
}
pos = strstr (name, " << ");
if (pos)
{
@@ -734,7 +756,7 @@ config_file_new_option (struct t_config_file *config_file,
var_type = -1;
for (i = 0; i < CONFIG_NUM_OPTION_TYPES; i++)
{
if (strcmp (type, config_option_type_string[i]) == 0)
if (strcmp (ptr_type, config_option_type_string[i]) == 0)
{
var_type = i;
break;
@@ -744,10 +766,14 @@ config_file_new_option (struct t_config_file *config_file,
{
gui_chat_printf (NULL, "%sUnknown option type \"%s\"",
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
type);
ptr_type);
goto error;
}
/* color options are always themable */
if (var_type == CONFIG_OPTION_TYPE_COLOR)
themable = 1;
/*
* compatibility with versions < 4.1.0: force enum type for an integer
* with string values
@@ -784,6 +810,7 @@ config_file_new_option (struct t_config_file *config_file,
goto error;
new_option->parent_name = (parent_name) ? strdup (parent_name) : NULL;
new_option->type = var_type;
new_option->themable = themable;
if (description)
{
new_option->description = strdup (description);
@@ -818,9 +845,7 @@ config_file_new_option (struct t_config_file *config_file,
new_option->max = max;
if (default_value)
{
error = NULL;
number = strtol (default_value, &error, 10);
if (!error || error[0])
if (!util_parse_int (default_value, 10, &number))
number = 0;
if (number < min)
number = min;
@@ -833,9 +858,7 @@ config_file_new_option (struct t_config_file *config_file,
}
if (value)
{
error = NULL;
number = strtol (value, &error, 10);
if (!error || error[0])
if (!util_parse_int (value, 10, &number))
number = 0;
if (number < min)
number = min;
@@ -973,6 +996,7 @@ error:
end:
free (option_name);
free (parent_name);
free (type_name);
return new_option;
}
@@ -1099,12 +1123,13 @@ config_file_search_with_string (const char *option_name,
struct t_config_file **config_file,
struct t_config_section **section,
struct t_config_option **option,
char **pos_option_name)
const char **pos_option_name)
{
struct t_config_file *ptr_config;
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
char *file_name, *pos_section, *section_name, *pos_option;
const char *pos_section, *pos_option;
char *file_name, *section_name;
if (config_file)
*config_file = NULL;
@@ -1404,9 +1429,7 @@ int
config_file_option_set (struct t_config_option *option, const char *value,
int run_callback)
{
int value_int, i, rc, new_value_ok, old_value_was_null, old_value;
long number;
char *error;
int value_int, i, rc, new_value_ok, old_value_was_null, old_value, number;
if (!option)
return WEECHAT_CONFIG_OPTION_SET_ERROR;
@@ -1493,10 +1516,8 @@ config_file_option_set (struct t_config_option *option, const char *value,
new_value_ok = 0;
if (strncmp (value, "++", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0]
&& (long)old_value + number <= (long)(option->max))
if (util_parse_int (value + 2, 10, &number)
&& ((long)old_value + (long)number <= (long)(option->max)))
{
value_int = old_value + number;
new_value_ok = 1;
@@ -1504,10 +1525,8 @@ config_file_option_set (struct t_config_option *option, const char *value,
}
else if (strncmp (value, "--", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0]
&& (long)old_value - number >= (long)(option->min))
if (util_parse_int (value + 2, 10, &number)
&& ((long)old_value - (long)number >= (long)(option->min)))
{
value_int = old_value - number;
new_value_ok = 1;
@@ -1515,20 +1534,16 @@ config_file_option_set (struct t_config_option *option, const char *value,
}
else
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
{
value_int = number;
if ((value_int >= option->min)
&& (value_int <= option->max))
if ((value_int >= option->min) && (value_int <= option->max))
new_value_ok = 1;
}
}
if (new_value_ok)
{
if (old_value_was_null
|| (value_int != old_value))
if (old_value_was_null || (value_int != old_value))
{
CONFIG_INTEGER(option) = value_int;
rc = WEECHAT_CONFIG_OPTION_SET_OK_CHANGED;
@@ -1572,9 +1587,7 @@ config_file_option_set (struct t_config_option *option, const char *value,
new_value_ok = 0;
if (strncmp (value, "++", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
if (gui_color_assign_by_diff (&value_int,
gui_color_get_name (old_value),
@@ -1584,9 +1597,7 @@ config_file_option_set (struct t_config_option *option, const char *value,
}
else if (strncmp (value, "--", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
if (gui_color_assign_by_diff (&value_int,
gui_color_get_name (old_value),
@@ -1601,8 +1612,7 @@ config_file_option_set (struct t_config_option *option, const char *value,
}
if (new_value_ok)
{
if (old_value_was_null
|| (value_int != old_value))
if (old_value_was_null || (value_int != old_value))
{
CONFIG_COLOR(option) = value_int;
rc = WEECHAT_CONFIG_OPTION_SET_OK_CHANGED;
@@ -1631,9 +1641,7 @@ config_file_option_set (struct t_config_option *option, const char *value,
value_int = -1;
if (strncmp (value, "++", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
number = number % (option->max + 1);
value_int = (old_value + number) %
@@ -1642,9 +1650,7 @@ config_file_option_set (struct t_config_option *option, const char *value,
}
else if (strncmp (value, "--", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
number = number % (option->max + 1);
value_int = (old_value + (option->max + 1) - number) %
@@ -1664,8 +1670,7 @@ config_file_option_set (struct t_config_option *option, const char *value,
}
if (value_int >= 0)
{
if (old_value_was_null
|| (value_int != old_value))
if (old_value_was_null || (value_int != old_value))
{
CONFIG_ENUM(option) = value_int;
rc = WEECHAT_CONFIG_OPTION_SET_OK_CHANGED;
@@ -1888,9 +1893,7 @@ config_file_option_set_default (struct t_config_option *option,
const char *value,
int run_callback)
{
int value_int, i, rc, new_value_ok, old_value_was_null, old_value;
long number;
char *error;
int value_int, i, rc, new_value_ok, old_value_was_null, old_value, number;
if (!option)
return WEECHAT_CONFIG_OPTION_SET_ERROR;
@@ -1965,42 +1968,34 @@ config_file_option_set_default (struct t_config_option *option,
new_value_ok = 0;
if (strncmp (value, "++", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number)
&& ((long)old_value + (long)number <= (long)(option->max)))
{
value_int = old_value + number;
if (value_int <= option->max)
new_value_ok = 1;
new_value_ok = 1;
}
}
else if (strncmp (value, "--", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number)
&& ((long)old_value - (long)number >= (long)(option->min)))
{
value_int = old_value - number;
if (value_int >= option->min)
new_value_ok = 1;
new_value_ok = 1;
}
}
else
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
{
value_int = number;
if ((value_int >= option->min)
&& (value_int <= option->max))
if ((value_int >= option->min) && (value_int <= option->max))
new_value_ok = 1;
}
}
if (new_value_ok)
{
if (old_value_was_null
|| (value_int != old_value))
if (old_value_was_null || (value_int != old_value))
{
CONFIG_INTEGER_DEFAULT(option) = value_int;
rc = WEECHAT_CONFIG_OPTION_SET_OK_CHANGED;
@@ -2044,9 +2039,7 @@ config_file_option_set_default (struct t_config_option *option,
new_value_ok = 0;
if (strncmp (value, "++", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
if (gui_color_assign_by_diff (&value_int,
gui_color_get_name (old_value),
@@ -2056,9 +2049,7 @@ config_file_option_set_default (struct t_config_option *option,
}
else if (strncmp (value, "--", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
if (gui_color_assign_by_diff (&value_int,
gui_color_get_name (old_value),
@@ -2073,8 +2064,7 @@ config_file_option_set_default (struct t_config_option *option,
}
if (new_value_ok)
{
if (old_value_was_null
|| (value_int != old_value))
if (old_value_was_null || (value_int != old_value))
{
CONFIG_COLOR_DEFAULT(option) = value_int;
rc = WEECHAT_CONFIG_OPTION_SET_OK_CHANGED;
@@ -2103,9 +2093,7 @@ config_file_option_set_default (struct t_config_option *option,
value_int = -1;
if (strncmp (value, "++", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
number = number % (option->max + 1);
value_int = (old_value + number) %
@@ -2114,9 +2102,7 @@ config_file_option_set_default (struct t_config_option *option,
}
else if (strncmp (value, "--", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
number = number % (option->max + 1);
value_int = (old_value + (option->max + 1) - number) %
@@ -2136,8 +2122,7 @@ config_file_option_set_default (struct t_config_option *option,
}
if (value_int >= 0)
{
if (old_value_was_null
|| (value_int != old_value))
if (old_value_was_null || (value_int != old_value))
{
CONFIG_ENUM_DEFAULT(option) = value_int;
rc = WEECHAT_CONFIG_OPTION_SET_OK_CHANGED;
@@ -2482,6 +2467,8 @@ config_file_option_get_pointer (struct t_config_option *option,
return option->parent_name;
else if (strcmp (property, "type") == 0)
return &option->type;
else if (strcmp (property, "themable") == 0)
return &option->themable;
else if (strcmp (property, "description") == 0)
return option->description;
else if (strcmp (property, "string_values") == 0)
@@ -2597,7 +2584,7 @@ config_file_option_set_with_string (const char *option_name, const char *value)
struct t_config_file *ptr_config;
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
char *pos_option;
const char *pos_option;
rc = WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND;
@@ -3156,7 +3143,7 @@ config_file_write_internal (struct t_config_file *config_file,
{
int rc;
long file_perms;
char *filename, *filename2, resolved_path[PATH_MAX], *error;
char *filename, *filename2, resolved_path[PATH_MAX];
struct t_config_section *ptr_section;
struct t_config_option *ptr_option;
@@ -3307,9 +3294,7 @@ config_file_write_internal (struct t_config_file *config_file,
config_file->file = NULL;
/* update file mode */
error = NULL;
file_perms = strtol (CONFIG_STRING(config_look_config_permissions), &error, 8);
if (!error || error[0])
if (!util_parse_long (CONFIG_STRING(config_look_config_permissions), 8, &file_perms))
file_perms = 0600;
if (chmod (filename2, file_perms) < 0)
{
@@ -3382,18 +3367,15 @@ config_file_write (struct t_config_file *config_file)
int
config_file_parse_version (const char *version)
{
long number;
char *error;
int number;
if (!version)
return -1;
error = NULL;
number = strtoll (version, &error, 10);
if (!error || error[0])
if (!util_parse_int (version, 10, &number) || (number < 1))
return -1;
return (number < 1) ? -1 : (int)number;
return number;
}
/*
@@ -4296,6 +4278,7 @@ config_file_hdata_config_option_cb (const void *pointer, void *data,
HDATA_VAR(struct t_config_option, name, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_config_option, parent_name, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_config_option, type, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_config_option, themable, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_config_option, description, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_config_option, string_values, STRING, 0, "*,*", NULL);
HDATA_VAR(struct t_config_option, min, INTEGER, 0, NULL, NULL);
@@ -4408,6 +4391,8 @@ config_file_add_option_to_infolist (struct t_infolist *infolist,
{
goto error;
}
if (!infolist_new_var_integer (ptr_item, "themable", option->themable))
goto error;
if (option->value)
{
value = config_file_option_value_to_string (option, 0, 0, 0);
@@ -4572,6 +4557,7 @@ config_file_print_log (void)
log_printf (" name . . . . . . . . . . . . : '%s'", ptr_option->name);
log_printf (" parent_name. . . . . . . . . : '%s'", ptr_option->parent_name);
log_printf (" type . . . . . . . . . . . . : %d", ptr_option->type);
log_printf (" themable . . . . . . . . . . : %d", ptr_option->themable);
log_printf (" description. . . . . . . . . : '%s'", ptr_option->description);
log_printf (" string_values. . . . . . . . : %p", ptr_option->string_values);
log_printf (" min. . . . . . . . . . . . . : %d", ptr_option->min);
+3 -1
View File
@@ -154,6 +154,8 @@ struct t_config_option
char *parent_name; /* parent name (to inherit the */
/* value from another option) */
enum t_config_option_type type; /* type */
int themable; /* 1 if option is themable */
/* (color, or string with color) */
char *description; /* description */
char **string_values; /* allowed string values */
int min, max; /* min and max for value */
@@ -286,7 +288,7 @@ extern void config_file_search_with_string (const char *option_name,
struct t_config_file **config_file,
struct t_config_section **section,
struct t_config_option **option,
char **pos_option_name);
const char **pos_option_name);
extern int config_file_string_to_boolean (const char *text);
extern int config_file_option_reset (struct t_config_option *option,
int run_callback);
+58 -49
View File
@@ -50,6 +50,8 @@
#include "core-proxy.h"
#include "core-string.h"
#include "core-sys.h"
#include "core-theme.h"
#include "core-util.h"
#include "core-version.h"
#include "../gui/gui-bar.h"
#include "../gui/gui-bar-item.h"
@@ -221,6 +223,8 @@ struct t_config_option *config_look_separator_horizontal = NULL;
struct t_config_option *config_look_separator_vertical = NULL;
struct t_config_option *config_look_tab_whitespace_char = NULL;
struct t_config_option *config_look_tab_width = NULL;
struct t_config_option *config_look_theme = NULL;
struct t_config_option *config_look_theme_backup = NULL;
struct t_config_option *config_look_time_format = NULL;
struct t_config_option *config_look_whitespace_char = NULL;
struct t_config_option *config_look_window_auto_zoom = NULL;
@@ -1380,7 +1384,7 @@ config_change_color (const void *pointer, void *data,
(void) data;
(void) option;
if (gui_init_ok)
if (gui_init_ok && !theme_applying)
{
gui_color_init_weechat ();
gui_window_ask_refresh (1);
@@ -1708,7 +1712,7 @@ config_weechat_update_cb (const void *pointer, void *data,
int version_read,
struct t_hashtable *data_read)
{
const char *ptr_config, *ptr_section, *ptr_option, *ptr_value;
const char *ptr_config, *ptr_section, *ptr_option, *ptr_value, *pos_option;
char *new_commands[][2] = {
/* old command, new command */
{ "/input jump_smart", "/buffer jump smart" },
@@ -1738,7 +1742,7 @@ config_weechat_update_cb (const void *pointer, void *data,
{ "number_desc" "-buffer.number" },
{ NULL, NULL },
};
char *new_option, *new_value, *pos_option;
char *new_option, *new_value;
int changes, i;
/* make C compiler happy */
@@ -2147,19 +2151,14 @@ void
config_weechat_palette_change_cb (const void *pointer, void *data,
struct t_config_option *option)
{
char *error;
int number;
/* make C compiler happy */
(void) pointer;
(void) data;
error = NULL;
number = (int)strtol (option->name, &error, 10);
if (error && !error[0])
{
if (util_parse_int (option->name, 10, &number))
gui_color_palette_add (number, CONFIG_STRING(option));
}
}
/*
@@ -2174,7 +2173,6 @@ config_weechat_palette_create_option_cb (const void *pointer, void *data,
const char *value)
{
struct t_config_option *ptr_option;
char *error;
int rc, number;
/* make C compiler happy */
@@ -2183,9 +2181,7 @@ config_weechat_palette_create_option_cb (const void *pointer, void *data,
rc = WEECHAT_CONFIG_OPTION_SET_ERROR;
error = NULL;
number = (int)strtol (option_name, &error, 10);
if (error && !error[0])
if (util_parse_int (option_name, 10, &number))
{
if (option_name)
{
@@ -2243,7 +2239,6 @@ config_weechat_palette_delete_option_cb (const void *pointer, void *data,
struct t_config_section *section,
struct t_config_option *option)
{
char *error;
int number;
/* make C compiler happy */
@@ -2252,9 +2247,7 @@ config_weechat_palette_delete_option_cb (const void *pointer, void *data,
(void) config_file;
(void) section;
error = NULL;
number = (int)strtol (option->name, &error, 10);
if (error && !error[0])
if (util_parse_int (option->name, 10, &number))
gui_color_palette_remove (number);
config_file_option_free (option, 1);
@@ -2272,7 +2265,8 @@ config_weechat_proxy_read_cb (const void *pointer, void *data,
struct t_config_section *section,
const char *option_name, const char *value)
{
char *pos_option, *proxy_name;
const char *pos_option;
char *proxy_name;
struct t_proxy *ptr_temp_proxy;
int index_option;
@@ -2351,7 +2345,8 @@ config_weechat_bar_read_cb (const void *pointer, void *data,
struct t_config_section *section,
const char *option_name, const char *value)
{
char *pos_option, *bar_name;
const char *pos_option;
char *bar_name;
struct t_gui_bar *ptr_temp_bar;
int index_option;
@@ -2431,7 +2426,8 @@ config_weechat_custom_bar_item_read_cb (const void *pointer, void *data,
struct t_config_section *section,
const char *option_name, const char *value)
{
char *pos_option, *item_name;
const char *pos_option;
char *item_name;
struct t_gui_bar_item_custom *ptr_temp_item;
int index_option;
@@ -2521,10 +2517,10 @@ config_weechat_layout_read_cb (const void *pointer, void *data,
struct t_config_section *section,
const char *option_name, const char *value)
{
int argc, force_current_layout;
char **argv, *pos, *layout_name, *error1, *error2, *error3, *error4;
int argc, force_current_layout, number1, number2, number3, number4;
const char *pos;
char **argv, *layout_name;
const char *ptr_option_name;
long number1, number2, number3, number4;
struct t_gui_layout *ptr_layout;
struct t_gui_layout_window *parent;
@@ -2582,9 +2578,7 @@ config_weechat_layout_read_cb (const void *pointer, void *data,
{
if (argc >= 3)
{
error1 = NULL;
number1 = strtol (argv[2], &error1, 10);
if (error1 && !error1[0])
if (util_parse_int (argv[2], 10, &number1))
gui_layout_buffer_add (ptr_layout, argv[0], argv[1], number1);
}
string_free_split (argv);
@@ -2601,16 +2595,10 @@ config_weechat_layout_read_cb (const void *pointer, void *data,
{
if (argc >= 6)
{
error1 = NULL;
number1 = strtol (argv[0], &error1, 10);
error2 = NULL;
number2 = strtol (argv[1], &error2, 10);
error3 = NULL;
number3 = strtol (argv[2], &error3, 10);
error4 = NULL;
number4 = strtol (argv[3], &error4, 10);
if (error1 && !error1[0] && error2 && !error2[0]
&& error3 && !error3[0] && error4 && !error4[0])
if (util_parse_int (argv[0], 10, &number1)
&& util_parse_int (argv[1], 10, &number2)
&& util_parse_int (argv[2], 10, &number3)
&& util_parse_int (argv[3], 10, &number4))
{
parent = gui_layout_window_search_by_id (ptr_layout->layout_windows,
number2);
@@ -3465,7 +3453,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
config_look_buffer_time_format = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"buffer_time_format", "string",
"buffer_time_format", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("time format for each line displayed in buffers (see man "
"strftime for date/time specifiers, extra specifiers are "
@@ -3489,7 +3477,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_buffer_time_same = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"buffer_time_same", "string",
"buffer_time_same", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("time displayed for a message with same time as previous message: "
"use a space \" \" to hide time, another string to display this "
@@ -3656,7 +3644,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_day_change_message_1date = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"day_change_message_1date", "string",
"day_change_message_1date", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("message displayed when the day has changed, with one date "
"displayed (for example at beginning of buffer) (see man "
@@ -3669,7 +3657,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_day_change_message_2dates = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"day_change_message_2dates", "string",
"day_change_message_2dates", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("message displayed when the day has changed, with two dates "
"displayed (between two messages); the second date specifiers "
@@ -3781,6 +3769,7 @@ config_weechat_init_options (void)
NULL, 0, 0,
"${away} "
"|| ${buffer.num_displayed} == 0 "
"|| ${info:relay_client_count,api,connected} > 0 "
"|| ${info:relay_client_count,weechat,connected} > 0",
NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
@@ -3985,7 +3974,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_item_time_format = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"item_time_format", "string",
"item_time_format", "string|themable",
N_("time format for \"time\" bar item (see man strftime for "
"date/time specifiers) (note: content is evaluated, so you can "
"use colors with format \"${color:xxx}\", see /help eval)"),
@@ -4040,7 +4029,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_nick_color_force = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"nick_color_force", "string",
"nick_color_force", "string|themable",
N_("force color for some nicks: hash computed with nickname "
"to find color will not be used for these nicks (format is: "
"\"nick1:color1;nick2:color2\"); look up for nicks is with "
@@ -4132,7 +4121,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
config_look_prefix[GUI_CHAT_PREFIX_ERROR] = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"prefix_error", "string",
"prefix_error", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("prefix for error messages (note: content is evaluated, so you "
"can use colors with format \"${color:xxx}\", see /help eval)"),
@@ -4142,7 +4131,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_prefix[GUI_CHAT_PREFIX_NETWORK] = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"prefix_network", "string",
"prefix_network", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("prefix for network messages (note: content is evaluated, so you "
"can use colors with format \"${color:xxx}\", see /help eval)"),
@@ -4152,7 +4141,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_prefix[GUI_CHAT_PREFIX_ACTION] = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"prefix_action", "string",
"prefix_action", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("prefix for action messages (note: content is evaluated, so you "
"can use colors with format \"${color:xxx}\", see /help eval)"),
@@ -4162,7 +4151,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_prefix[GUI_CHAT_PREFIX_JOIN] = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"prefix_join", "string",
"prefix_join", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("prefix for join messages (note: content is evaluated, so you "
"can use colors with format \"${color:xxx}\", see /help eval)"),
@@ -4172,7 +4161,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_look_prefix[GUI_CHAT_PREFIX_QUIT] = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"prefix_quit", "string",
"prefix_quit", "string|themable",
/* TRANSLATORS: string "${color:xxx}" must NOT be translated */
N_("prefix for quit messages (note: content is evaluated, so you "
"can use colors with format \"${color:xxx}\", see /help eval)"),
@@ -4441,6 +4430,26 @@ config_weechat_init_options (void)
NULL, NULL, NULL,
&config_change_tab, NULL, NULL,
NULL, NULL, NULL);
config_look_theme = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"theme", "string",
N_("name of the last theme applied with command /theme "
"(set automatically, do not change manually); informational "
"only, the theme is not re-applied at startup"),
NULL, 0, 0, "", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
config_look_theme_backup = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"theme_backup", "boolean",
N_("create a backup theme file with the current themable "
"options before applying a theme with command /theme; if "
"the backup file cannot be written, the apply is aborted "
"(no option is changed); the backup file is written to "
"directory \"themes\" inside the WeeChat configuration "
"directory and can be restored with the command: `/theme apply "
"backup-<timestamp>`"),
NULL, 0, 0, "on", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
config_look_time_format = config_file_new_option (
weechat_config_file, weechat_config_section_look,
"time_format", "string",
@@ -4661,7 +4670,7 @@ config_weechat_init_options (void)
NULL, NULL, NULL);
config_color_chat_nick_colors = config_file_new_option (
weechat_config_file, weechat_config_section_color,
"chat_nick_colors", "string",
"chat_nick_colors", "string|themable",
/* TRANSLATORS: please do not translate "lightred:blue" */
N_("text color for nicks (comma separated list of colors, "
"background is allowed with format: \"fg:bg\", for example: "
@@ -4932,7 +4941,7 @@ config_weechat_init_options (void)
/* eval syntax highlighting colors (for "${raw_hl:xxx}" and "${hl:xxx}") */
config_color_eval_syntax_colors = config_file_new_option (
weechat_config_file, weechat_config_section_color,
"eval_syntax_colors", "string",
"eval_syntax_colors", "string|themable",
/* TRANSLATORS: please do not translate "lightred:blue" */
N_("text color for syntax highlighting in evaluated strings, "
"with \"${raw_hl:...}\" and \"${hl:...}\" (comma separated "
+2
View File
@@ -277,6 +277,8 @@ extern struct t_config_option *config_look_separator_horizontal;
extern struct t_config_option *config_look_separator_vertical;
extern struct t_config_option *config_look_tab_whitespace_char;
extern struct t_config_option *config_look_tab_width;
extern struct t_config_option *config_look_theme;
extern struct t_config_option *config_look_theme_backup;
extern struct t_config_option *config_look_time_format;
extern struct t_config_option *config_look_whitespace_char;
extern struct t_config_option *config_look_window_auto_zoom;
+10 -4
View File
@@ -46,6 +46,9 @@
#include <netinet/in.h>
#include <inttypes.h>
#define BE_INT64 htonll
#elif defined(__HAIKU__)
#include <ByteOrder.h>
#define BE_INT64 B_HOST_TO_BENDIAN_INT64
#else
#define BE_INT64 htobe64
#endif
@@ -657,15 +660,18 @@ weecrypto_totp_validate (const char *secret_base32, time_t totp_time,
otp_ok = 0;
/*
* Compare in constant time and never break early: a non-constant
* compare and an early exit on match would let an observer measure
* how many digits of the expected OTP they got right and which
* time-window offset matched.
*/
for (i = moving_factor - window; i <= moving_factor + window; i++)
{
rc = weecrypto_totp_generate_internal (secret, length_secret,
i, digits, str_otp);
if (rc && (strcmp (str_otp, otp) == 0))
{
if (rc && (string_memcmp_constant_time (str_otp, otp, digits) == 0))
otp_ok = 1;
break;
}
}
free (secret);
-62
View File
@@ -1223,14 +1223,9 @@ dir_file_compress_zstd (const char *from, const char *to,
void *buffer_in, *buffer_out;
size_t buffer_in_size, buffer_out_size, num_read, remaining;
int rc;
#if ZSTD_VERSION_NUMBER >= 10400 /* zstd ≥ 1.4.0 */
ZSTD_CCtx *cctx = NULL;
ZSTD_EndDirective mode;
int finished, last_chunk;
#else /* zstd < 1.4.0 */
ZSTD_CStream *cstream = NULL;
size_t result, to_read;
#endif
ZSTD_inBuffer input;
ZSTD_outBuffer output;
@@ -1259,7 +1254,6 @@ dir_file_compress_zstd (const char *from, const char *to,
if (!dest)
goto end;
#if ZSTD_VERSION_NUMBER >= 10400 /* zstd ≥ 1.4.0 */
cctx = ZSTD_createCCtx ();
if (!cctx)
goto error;
@@ -1296,77 +1290,21 @@ dir_file_compress_zstd (const char *from, const char *to,
if (last_chunk)
break;
}
#else /* zstd < 1.4.0 */
cstream = ZSTD_createCStream ();
if (!cstream)
goto error;
result = ZSTD_initCStream (cstream, compression_level);
if (ZSTD_isError (result))
goto error;
to_read = buffer_in_size;
while ((num_read = fread (buffer_in, 1, buffer_in_size, source)))
{
input.src = buffer_in;
input.size = num_read;
input.pos = 0;
while (input.pos < input.size)
{
output.dst = buffer_out;
output.size = buffer_out_size;
output.pos = 0;
to_read = ZSTD_compressStream (cstream, &output , &input);
if (ZSTD_isError (to_read))
goto error;
if (to_read > buffer_in_size)
to_read = buffer_in_size;
if ((fwrite (buffer_out, 1, output.pos, dest) != output.pos)
|| ferror (dest))
{
goto error;
}
}
}
output.dst = buffer_out;
output.size = buffer_out_size;
output.pos = 0;
remaining = ZSTD_endStream (cstream, &output);
if (remaining)
goto error;
if ((fwrite (buffer_out, 1, output.pos, dest) != output.pos)
|| ferror (dest))
{
goto error;
}
#endif
rc = 1;
goto end;
error:
#if ZSTD_VERSION_NUMBER >= 10400 /* zstd ≥ 1.4.0 */
if (cctx)
{
ZSTD_freeCCtx (cctx);
cctx = NULL;
}
#else /* zstd < 1.4.0 */
if (cstream)
{
ZSTD_freeCStream (cstream);
cstream = NULL;
}
#endif
unlink (to);
end:
#if ZSTD_VERSION_NUMBER >= 10400 /* zstd ≥ 1.4.0 */
if (cctx)
ZSTD_freeCCtx (cctx);
#else /* zstd < 1.4.0 */
if (cstream)
ZSTD_freeCStream (cstream);
#endif
free (buffer_in);
free (buffer_out);
+50 -61
View File
@@ -28,6 +28,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <errno.h>
#include <regex.h>
#include <time.h>
#include <sys/time.h>
@@ -314,8 +315,6 @@ eval_string_range_chars (const char *range)
char1 = utf8_char_int (range);
/* next char must be '-' */
if (!range[0])
goto end;
ptr_char = utf8_next_char (range);
if (!ptr_char || !ptr_char[0] || (ptr_char[0] != '-'))
goto end;
@@ -400,9 +399,8 @@ char *
eval_string_cut (const char *text, int screen)
{
const char *pos, *pos2;
char *tmp, *error, *value;
int count_suffix;
long number;
char *tmp, *value;
int count_suffix, number;
count_suffix = 0;
if (text[0] == '+')
@@ -423,9 +421,7 @@ eval_string_cut (const char *text, int screen)
if (!tmp)
return strdup ("");
error = NULL;
number = strtol (tmp, &error, 10);
if (!error || error[0] || (number < 0))
if (!util_parse_int (tmp, 10, &number) || (number < 0))
{
free (tmp);
return strdup ("");
@@ -453,8 +449,8 @@ char *
eval_string_repeat (const char *text)
{
const char *pos;
char *tmp, *error;
long number;
char *tmp;
int number;
pos = strchr (text, ',');
if (!pos)
@@ -464,9 +460,7 @@ eval_string_repeat (const char *text)
if (!tmp)
return strdup ("");
error = NULL;
number = strtol (tmp, &error, 10);
if (!error || error[0] || (number < 0))
if (!util_parse_int (tmp, 10, &number) || (number < 0))
{
free (tmp);
return strdup ("");
@@ -514,10 +508,11 @@ eval_string_repeat (const char *text)
char *
eval_string_split (const char *text)
{
char *pos, *pos2, *pos3, *str_number, *separators, **items, *value, *error;
const char *pos, *pos2, *pos3;
char *str_number, *separators, **items, *value;
char str_value[32], *str_flags, **list_flags, *strip_items, **ptr_flag;
int num_items, count_items, random_item, flags;
long number, max_items;
int num_items, count_items, random_item, flags, max_items;
long number;
str_number = NULL;
separators = NULL;
@@ -550,9 +545,7 @@ eval_string_split (const char *text)
}
else
{
error = NULL;
number = strtol (str_number, &error, 10);
if (!error || error[0] || (number == 0))
if (!util_parse_long (str_number, 10, &number) || (number == 0))
goto end;
}
@@ -590,9 +583,8 @@ eval_string_split (const char *text)
}
else if (strncmp (*ptr_flag, "max_items=", 10) == 0)
{
error = NULL;
max_items = strtol (*ptr_flag + 10, &error, 10);
if (!error || error[0] || (max_items < 0))
if (!util_parse_int (*ptr_flag + 10, 10, &max_items)
|| (max_items < 0))
goto end;
}
}
@@ -664,7 +656,8 @@ end:
char *
eval_string_split_shell (const char *text)
{
char *pos, *str_number, **items, *value, *error, str_value[32];
const char *pos;
char *str_number, **items, *value, str_value[32];
int num_items, count_items, random_item;
long number;
@@ -693,9 +686,7 @@ eval_string_split_shell (const char *text)
}
else
{
error = NULL;
number = strtol (str_number, &error, 10);
if (!error || error[0] || (number == 0))
if (!util_parse_long (str_number, 10, &number) || (number == 0))
goto end;
}
@@ -746,11 +737,11 @@ end:
char *
eval_string_regex_group (const char *text, struct t_eval_context *eval_context)
{
char str_value[64], *error;
char str_value[64];
long number;
if (!eval_context->regex || !eval_context->regex->result)
return strdup ("");
goto end;
if (strcmp (text, "#") == 0)
{
@@ -772,10 +763,8 @@ eval_string_regex_group (const char *text, struct t_eval_context *eval_context)
}
else
{
error = NULL;
number = strtol (text, &error, 10);
if (!error || error[0])
number = -1;
if (!util_parse_long (text, 10, &number))
goto end;
}
if ((number >= 0) && (number <= eval_context->regex->last_match))
{
@@ -786,6 +775,7 @@ eval_string_regex_group (const char *text, struct t_eval_context *eval_context)
eval_context->regex->match[number].rm_so);
}
end:
return strdup ("");
}
@@ -1058,7 +1048,8 @@ eval_string_if (const char *text, struct t_eval_context *eval_context)
char *
eval_string_random (const char *text)
{
char *pos, *error, *tmp, result[128];
const char *pos;
char *tmp, result[128];
long long min_number, max_number;
if (!text || !text[0])
@@ -1071,18 +1062,14 @@ eval_string_random (const char *text)
tmp = string_strndup (text, pos - text);
if (!tmp)
goto error;
error = NULL;
min_number = strtoll (tmp, &error, 10);
if (!error || error[0])
if (!util_parse_longlong (tmp, 10, &min_number))
{
free (tmp);
goto error;
}
free (tmp);
error = NULL;
max_number = strtoll (pos + 1, &error, 10);
if (!error || error[0])
if (!util_parse_longlong (pos + 1, 10, &max_number))
goto error;
if (min_number > max_number)
@@ -1128,7 +1115,8 @@ eval_string_translate (const char *text)
void
eval_string_define (const char *text, struct t_eval_context *eval_context)
{
char *pos, *name;
const char *pos;
char *name;
pos = strchr (text, ',');
if (!pos)
@@ -1155,7 +1143,8 @@ eval_hdata_count (const char *text, struct t_eval_context *eval_context)
struct t_hdata *hdata;
unsigned long ptr_value;
void *pointer;
char *pos1, *pos2, *value, *hdata_name, *pointer_name, str_count[64];
const char *pos1, *pos2;
char *value, *hdata_name, *pointer_name, str_count[64];
int rc, count;
value = NULL;
@@ -1227,8 +1216,8 @@ char *
eval_hdata_get_value (struct t_hdata *hdata, void *pointer, const char *path,
struct t_eval_context *eval_context)
{
char *value, *var_name, str_value[128], *pos, *property;
const char *ptr_value, *hdata_name, *ptr_var_name, *pos_open_paren;
char *value, *var_name, str_value[128], *property;
const char *ptr_value, *hdata_name, *ptr_var_name, *pos, *pos_open_paren;
int type, debug_id;
struct t_hashtable *hashtable;
@@ -1555,8 +1544,8 @@ eval_syntax_highlight_add_markers (const char *prefix, const char *text,
char *
eval_syntax_highlight_colorize (const char *value)
{
const char *ptr_value;
char **result, *pos;
const char *ptr_value, *pos;
char **result;
int color;
if (!value)
@@ -2224,17 +2213,20 @@ eval_compare (const char *expr1, int comparison, const char *expr2,
if (!string_compare)
{
errno = 0;
error = NULL;
value1 = strtod (expr1, &error);
if (!error || error[0])
{
if (!error || error[0] || (errno == ERANGE))
string_compare = 1;
}
if (!string_compare)
{
errno = 0;
error = NULL;
value2 = strtod (expr2, &error);
if (!error || error[0] || (errno == ERANGE))
string_compare = 1;
}
else
{
value2 = strtod (expr2, &error);
if (!error || error[0])
string_compare = 1;
}
}
if (string_compare)
@@ -2683,10 +2675,9 @@ eval_expression (const char *expr, struct t_hashtable *pointers,
{
struct t_eval_context context, *eval_context;
struct t_hashtable *user_vars;
int condition, rc, pointers_allocated, regex_allocated, debug_id;
int condition, rc, pointers_allocated, regex_allocated, debug_id, debug_level;
int ptr_window_added, ptr_buffer_added;
long number;
char *value, *error;
char *value;
const char *default_prefix = EVAL_DEFAULT_PREFIX;
const char *default_suffix = EVAL_DEFAULT_SUFFIX;
const char *ptr_value, *regex_replace;
@@ -2826,11 +2817,9 @@ eval_expression (const char *expr, struct t_hashtable *pointers,
ptr_value = hashtable_get (options, "debug");
if (ptr_value && ptr_value[0])
{
error = NULL;
number = strtol (ptr_value, &error, 10);
if (error && !error[0] && (number >= 1))
if (util_parse_int (ptr_value, 10, &debug_level) && (debug_level >= 1))
{
eval_context->debug_level = (int)number;
eval_context->debug_level = debug_level;
eval_context->debug_output = string_dyn_alloc (256);
}
}
+19 -31
View File
@@ -35,6 +35,7 @@
#include "core-hashtable.h"
#include "core-log.h"
#include "core-string.h"
#include "core-util.h"
#include "../plugins/plugin.h"
@@ -262,9 +263,7 @@ hdata_get_var_array_size (struct t_hdata *hdata, void *pointer,
{
struct t_hdata_var *var;
const char *ptr_size;
char *error;
long value;
int i, offset;
int i, offset, value;
void *ptr_value;
if (!hdata || !name)
@@ -340,10 +339,8 @@ hdata_get_var_array_size (struct t_hdata *hdata, void *pointer,
else
{
/* check if the size is a valid integer */
error = NULL;
value = strtol (ptr_size, &error, 10);
if (error && !error[0])
return (int)value;
if (util_parse_int (ptr_size, 10, &value))
return value;
}
}
@@ -691,8 +688,9 @@ hdata_count (struct t_hdata *hdata, void *pointer)
void
hdata_get_index_and_name (const char *name, int *index, const char **ptr_name)
{
char *pos, *str_index, *error;
long number;
const char *pos;
char *str_index;
int number;
if (index)
*index = -1;
@@ -708,9 +706,7 @@ hdata_get_index_and_name (const char *name, int *index, const char **ptr_name)
str_index = string_strndup (name, pos - name);
if (str_index)
{
error = NULL;
number = strtol (str_index, &error, 10);
if (error && !error[0])
if (util_parse_int (str_index, 10, &number))
{
if (index)
*index = number;
@@ -1246,11 +1242,11 @@ hdata_set (struct t_hdata *hdata, void *pointer, const char *name,
const char *value)
{
struct t_hdata_var *var;
char **ptr_string, *error;
long number;
long long number_longlong;
char **ptr_string;
unsigned long ptr;
int rc;
int rc, number_int;
long number_long;
long long number_longlong;
if (!hdata->update_pending)
return 0;
@@ -1270,27 +1266,21 @@ hdata_set (struct t_hdata *hdata, void *pointer, const char *name,
*((char *)(pointer + var->offset)) = (value) ? value[0] : '\0';
return 1;
case WEECHAT_HDATA_INTEGER:
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number_int))
{
*((int *)(pointer + var->offset)) = (int)number;
*((int *)(pointer + var->offset)) = number_int;
return 1;
}
break;
case WEECHAT_HDATA_LONG:
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_long (value, 10, &number_long))
{
*((long *)(pointer + var->offset)) = number;
*((long *)(pointer + var->offset)) = number_long;
return 1;
}
break;
case WEECHAT_HDATA_LONGLONG:
error = NULL;
number_longlong = strtoll (value, &error, 10);
if (error && !error[0])
if (util_parse_longlong (value, 10, &number_longlong))
{
*((long long *)(pointer + var->offset)) = number_longlong;
return 1;
@@ -1323,11 +1313,9 @@ hdata_set (struct t_hdata *hdata, void *pointer, const char *name,
}
break;
case WEECHAT_HDATA_TIME:
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0] && (number >= 0))
if (util_parse_longlong (value, 10, &number_longlong) && (number_longlong >= 0))
{
*((time_t *)(pointer + var->offset)) = (time_t)number;
*((time_t *)(pointer + var->offset)) = (time_t)number_longlong;
return 1;
}
break;
+5 -11
View File
@@ -560,9 +560,7 @@ void
hook_set (struct t_hook *hook, const char *property, const char *value)
{
ssize_t num_written;
char *error;
long number;
int rc;
int rc, number;
/* invalid hook? */
if (!hook_valid (hook))
@@ -605,22 +603,20 @@ hook_set (struct t_hook *hook, const char *property, const char *value)
&& (hook->type == HOOK_TYPE_PROCESS)
&& (HOOK_PROCESS(hook, child_pid) > 0))
{
error = NULL;
number = strtol (value, &error, 10);
if (!error || error[0])
if (!util_parse_int (value, 10, &number))
{
/* not a number? look for signal by name */
number = signal_search_name (value);
}
if (number >= 0)
{
rc = kill (HOOK_PROCESS(hook, child_pid), (int)number);
rc = kill (HOOK_PROCESS(hook, child_pid), number);
if (rc < 0)
{
gui_chat_printf (NULL,
_("%sError sending signal %d to pid %d: %s"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
(int)number,
number,
HOOK_PROCESS(hook, child_pid),
strerror (errno));
}
@@ -633,9 +629,7 @@ hook_set (struct t_hook *hook, const char *property, const char *value)
&& ((hook->type == HOOK_TYPE_COMMAND)
|| (hook->type == HOOK_TYPE_COMMAND_RUN)))
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
{
switch (hook->type)
{
+8 -3
View File
@@ -242,8 +242,8 @@ int
input_data (struct t_gui_buffer *buffer, const char *data,
const char *commands_allowed, int split_newline, int user_data)
{
char *pos, str_buffer[128], *new_data, *buffer_full_name;
const char *ptr_data, *ptr_data_for_buffer;
const char *ptr_data_for_buffer;
char *pos, str_buffer[128], *new_data, *buffer_full_name, *ptr_data;
int first_command, rc;
if (!buffer || !gui_buffer_valid (buffer) || !data)
@@ -272,8 +272,13 @@ input_data (struct t_gui_buffer *buffer, const char *data,
if (data[0] && new_data && !new_data[0])
goto end;
if (!new_data)
new_data = strdup (data);
if (!new_data)
goto end;
first_command = 1;
ptr_data = (new_data) ? new_data : data;
ptr_data = new_data;
while (ptr_data)
{
/*
+24 -11
View File
@@ -58,6 +58,7 @@
#include "core-config.h"
#include "core-proxy.h"
#include "core-string.h"
#include "core-util.h"
#include "../gui/gui-chat.h"
#include "../plugins/plugin.h"
@@ -581,7 +582,13 @@ network_pass_socks5proxy (struct t_proxy *proxy, int sock, const char *address,
int port)
{
struct t_network_socks5 socks5;
unsigned char buffer[288];
/*
* buffer must be large enough for the username/password authentication
* request, which is the longest message sent/received here; according to
* RFC 1929 it is: version (1) + username length (1) + username (max 255)
* + password length (1) + password (max 255)
*/
unsigned char buffer[2 + 255 + 1 + 255];
int username_len, password_len, addr_len, addr_buffer_len;
unsigned char *addr_buffer;
char *username, *password;
@@ -630,6 +637,18 @@ network_pass_socks5proxy (struct t_proxy *proxy, int sock, const char *address,
username_len = strlen (username);
password_len = strlen (password);
/*
* username and password length are each stored on a single byte
* (RFC 1929), so they cannot exceed 255 bytes: reject longer values,
* otherwise the memcpy calls below would overflow the buffer
*/
if ((username_len > 255) || (password_len > 255))
{
free (username);
free (password);
return 0;
}
/* make username/password buffer */
buffer[0] = 1;
buffer[1] = (unsigned char) username_len;
@@ -1570,11 +1589,9 @@ int
network_connect_child_read_cb (const void *pointer, void *data, int fd)
{
struct t_hook *hook_connect;
char buffer[1], buf_size[6], *cb_error, *cb_ip_address, *error;
int num_read;
char buffer[1], buf_size[6], *cb_error, *cb_ip_address;
long size_msg;
int rc, direction;
int sock, i;
int rc, num_read, direction, sock, i;
struct msghdr msg;
struct cmsghdr *cmsg;
char msg_buf[CMSG_SPACE(sizeof (sock))];
@@ -1603,9 +1620,7 @@ network_connect_child_read_cb (const void *pointer, void *data, int fd)
buf_size, 5);
if (num_read == 5)
{
error = NULL;
size_msg = strtol (buf_size, &error, 10);
if (error && !error[0] && (size_msg > 0))
if (util_parse_long (buf_size, 10, &size_msg) && (size_msg > 0))
{
cb_ip_address = malloc (size_msg + 1);
if (cb_ip_address)
@@ -1740,9 +1755,7 @@ network_connect_child_read_cb (const void *pointer, void *data, int fd)
buf_size, 5);
if (num_read == 5)
{
error = NULL;
size_msg = strtol (buf_size, &error, 10);
if (error && !error[0] && (size_msg > 0))
if (util_parse_long (buf_size, 10, &size_msg) && (size_msg > 0))
{
cb_error = malloc (size_msg + 1);
if (cb_error)
+53 -18
View File
@@ -55,6 +55,7 @@
#include "core-eval.h"
#include "core-hashtable.h"
#include "core-utf8.h"
#include "core-util.h"
#include "../gui/gui-chat.h"
#include "../gui/gui-color.h"
#include "../plugins/plugin.h"
@@ -922,6 +923,43 @@ string_strcmp_ignore_chars (const char *string1, const char *string2,
string_charcasecmp (string1, string2);
}
/*
* Compare two memory areas of the same size in constant time.
*
* Use to compare secrets (e.g. password hashes, MACs) without leaking
* information through the comparison's running time. The loop always
* walks the full "size" bytes and uses only bitwise operations on the
* data, so the execution time depends on "size" alone, not on the
* position of the first differing byte.
*
* If either pointer is NULL, the areas are considered different (the
* NULL check itself is not constant time but does not look at any
* secret content).
*
* Return:
* 0: areas are equal
* 1: areas differ
*/
int
string_memcmp_constant_time (const void *area1, const void *area2, size_t size)
{
const unsigned char *p1, *p2;
unsigned char diff;
size_t i;
if (!area1 || !area2)
return (area1 == area2) ? 0 : 1;
p1 = (const unsigned char *)area1;
p2 = (const unsigned char *)area2;
diff = 0;
for (i = 0; i < size; i++)
diff |= p1[i] ^ p2[i];
return (diff == 0) ? 0 : 1;
}
/*
* Search for a string in another string (locale and case independent).
*
@@ -1648,9 +1686,8 @@ string_mask_to_regex (const char *mask)
const char *
string_regex_flags (const char *regex, int default_flags, int *flags)
{
const char *ptr_regex, *ptr_flags;
const char *ptr_regex, *ptr_flags, *pos;
int set_flag, flag;
char *pos;
if (flags)
*flags = default_flags;
@@ -1928,6 +1965,9 @@ string_replace (const char *string, const char *search, const char *replace)
if (!string || !search || !replace)
return NULL;
if (!search[0])
return strdup (string);
length1 = strlen (search);
length2 = strlen (replace);
@@ -2925,8 +2965,9 @@ char **
string_split_command (const char *command, char separator)
{
int nb_substr, arr_idx, str_idx, type;
const char *p;
char **array, **array2;
char *buffer, *p;
char *buffer;
const char *ptr;
if (!command || !command[0])
@@ -3394,7 +3435,7 @@ unsigned long long
string_parse_size (const char *size)
{
const char *pos;
char *str_number, *error;
char *str_number;
long long number;
unsigned long long result;
@@ -3417,11 +3458,7 @@ string_parse_size (const char *size)
if (!str_number)
goto end;
error = NULL;
number = strtoll (str_number, &error, 10);
if (!error || error[0])
goto end;
if (number < 0)
if (!util_parse_longlong (str_number, 10, &number) || (number < 0))
goto end;
while (pos[0] == ' ')
@@ -4101,8 +4138,7 @@ string_is_command_char (const char *string)
const char *
string_input_for_buffer (const char *string)
{
char *pos_slash, *pos_space, *pos_newline;
const char *next_char;
const char *pos_slash, *pos_space, *pos_newline, *next_char;
if (!string)
return NULL;
@@ -4439,8 +4475,9 @@ string_get_priority_and_name (const char *string,
int *priority, const char **name,
int default_priority)
{
char *pos, *str_priority, *error;
long number;
const char *pos;
char *str_priority;
int number;
if (priority)
*priority = default_priority;
@@ -4456,17 +4493,15 @@ string_get_priority_and_name (const char *string,
str_priority = string_strndup (string, pos - string);
if (str_priority)
{
error = NULL;
number = strtol (str_priority, &error, 10);
if (error && !error[0])
if (util_parse_int (str_priority, 10, &number))
{
if (priority)
*priority = number;
if (name)
*name = pos + 1;
}
free (str_priority);
}
if (name)
*name = pos + 1;
}
}
+2
View File
@@ -69,6 +69,8 @@ extern int string_strcmp_ignore_chars (const char *string1,
const char *string2,
const char *chars_ignored,
int case_sensitive);
extern int string_memcmp_constant_time (const void *area1, const void *area2,
size_t size);
extern const char *string_strcasestr (const char *string, const char *search);
extern int string_match (const char *string, const char *mask,
int case_sensitive);
+2 -4
View File
@@ -181,7 +181,7 @@ void
sys_setrlimit (void)
{
#ifdef HAVE_SYS_RESOURCE_H
char **items, *pos, *error;
char **items, *pos;
int num_items, i;
long long number;
@@ -198,9 +198,7 @@ sys_setrlimit (void)
if (pos)
{
pos[0] = '\0';
error = NULL;
number = strtoll (pos + 1, &error, 10);
if (error && !error[0])
if (util_parse_longlong (pos + 1, 10, &number) && (number >= -1))
{
sys_setrlimit_resource (items[i], number);
}
+141
View File
@@ -0,0 +1,141 @@
/*
* SPDX-FileCopyrightText: 2026 Sébastien Helleu <flashcode@flashtux.org>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* This file is part of WeeChat, the extensible chat client.
*
* WeeChat is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* WeeChat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
*/
/* Built-in theme registrations (core contribution only). */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include "weechat.h"
#include "core-hashtable.h"
#include "core-theme.h"
#include "../plugins/weechat-plugin.h"
/*
* Core overrides for the "light" theme: option values tuned for a
* light-background terminal. Order is by full option name to keep diffs
* stable; the list ends with a NULL sentinel.
*/
struct t_theme_builtin_entry
{
const char *option;
const char *value;
};
struct t_theme_builtin_entry theme_builtin_light_core[] =
{
{ "weechat.bar.status.color_bg", "254" },
{ "weechat.bar.status.color_bg_inactive", "default" },
{ "weechat.bar.title.color_bg", "254" },
{ "weechat.bar.title.color_bg_inactive", "default" },
{ "weechat.color.bar_more", "magenta" },
{ "weechat.color.chat_buffer", "default" },
{ "weechat.color.chat_channel", "default" },
{ "weechat.color.chat_nick", "cyan" },
{ "weechat.color.chat_nick_colors",
"red,green,brown,blue,magenta,cyan,lightred,lightblue,lightmagenta,"
"20,28,52,57,58,61,63,88,94,128,166,202" },
{ "weechat.color.chat_nick_self", "default" },
{ "weechat.color.chat_prefix_action", "default" },
{ "weechat.color.chat_prefix_error", "94" },
{ "weechat.color.chat_prefix_join", "green" },
{ "weechat.color.chat_prefix_more", "magenta" },
{ "weechat.color.chat_prefix_quit", "red" },
{ "weechat.color.chat_prefix_suffix", "251" },
{ "weechat.color.chat_server", "94" },
{ "weechat.color.chat_text_found_bg", "magenta" },
{ "weechat.color.chat_time_delimiters", "94" },
{ "weechat.color.eval_syntax_colors",
"green,red,blue,magenta,94,cyan" },
{ "weechat.color.input_actions", "28" },
{ "weechat.color.item_away", "brown" },
{ "weechat.color.separator", "251" },
{ "weechat.color.status_count_msg", "94" },
{ "weechat.color.status_data_highlight", "93" },
{ "weechat.color.status_data_msg", "94" },
{ "weechat.color.status_data_private", "green" },
{ "weechat.color.status_more", "94" },
{ "weechat.color.status_mouse", "green" },
{ "weechat.color.status_name", "default" },
{ "weechat.color.status_name_insecure", "202" },
{ "weechat.color.status_name_tls", "default" },
{ "weechat.color.status_number", "28" },
{ NULL, NULL },
};
/*
* Build a hashtable of overrides from a NULL-terminated table and
* register it under the given theme name, with an optional description.
*/
void
theme_builtin_register_entries (const char *name,
const char *description,
const struct t_theme_builtin_entry *entries)
{
struct t_hashtable *overrides;
struct t_theme *theme;
int i;
if (!name || !entries)
return;
overrides = hashtable_new (32,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (!overrides)
return;
for (i = 0; entries[i].option; i++)
hashtable_set (overrides, entries[i].option, entries[i].value);
theme = theme_register (NULL, NULL, name, overrides);
if (theme && description)
{
free (theme->description);
theme->description = strdup (description);
}
hashtable_free (overrides);
}
/*
* Register all built-in themes contributed by core. Called once from
* weechat_init; plugins/scripts add their own contributions later via
* weechat_theme_register.
*/
void
theme_builtin_init (void)
{
theme_builtin_register_entries (
"light",
_("WeeChat default theme for light-background terminals"),
theme_builtin_light_core);
}
File diff suppressed because it is too large Load Diff
+92
View File
@@ -0,0 +1,92 @@
/*
* SPDX-FileCopyrightText: 2026 Sébastien Helleu <flashcode@flashtux.org>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* This file is part of WeeChat, the extensible chat client.
*
* WeeChat is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* WeeChat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef WEECHAT_THEME_H
#define WEECHAT_THEME_H
struct t_hashtable;
struct t_arraylist;
struct t_weechat_plugin;
/*
* A contribution is one (owner, overrides) pair attached to a theme.
* "owner" is identified by a (plugin, script) pair:
* - plugin == NULL && script == NULL => core
* - plugin != NULL && script == NULL => plugin (e.g. irc, fset)
* - plugin != NULL && script != NULL => individual script under that
* script-language plugin
*/
struct t_theme_contribution
{
struct t_weechat_plugin *plugin;
const void *script;
struct t_hashtable *overrides; /* full_option_name -> value */
struct t_theme_contribution *prev_contribution;
struct t_theme_contribution *next_contribution;
};
struct t_theme
{
char *name; /* "light", "solarized", ... */
char *description; /* free-form text */
char *date; /* "YYYY-MM-DD HH:MM:SS" */
char *weechat_version; /* version at registration time */
struct t_theme_contribution *contributions;
struct t_theme_contribution *last_contribution;
struct t_theme *prev_theme;
struct t_theme *next_theme;
};
extern struct t_theme *themes;
extern struct t_theme *last_theme;
extern int theme_applying; /* gate for config_change_color */
extern struct t_theme *theme_search (const char *name);
extern struct t_theme *theme_register (struct t_weechat_plugin *plugin,
const void *script,
const char *name,
struct t_hashtable *overrides);
extern int theme_overrides_count (struct t_theme *theme);
extern const char *theme_get_override (struct t_theme *theme,
const char *option_name);
extern struct t_arraylist *theme_list (void);
extern int theme_apply (const char *name);
extern int theme_reset (void);
extern int theme_save (const char *name);
extern int theme_rename (const char *old_name, const char *new_name);
extern int theme_delete (const char *name);
extern char *theme_make_backup (void);
extern char *theme_user_file_path (const char *name);
extern struct t_theme *theme_file_parse (const char *path);
extern void theme_free (struct t_theme *theme);
/* lifecycle: drop all contributions owned by a plugin or script */
extern void theme_unregister_plugin (struct t_weechat_plugin *plugin);
extern void theme_unregister_script (struct t_weechat_plugin *plugin,
const void *script);
extern void theme_init (void);
extern void theme_end (void);
/* implemented in core-theme-builtin.c */
extern void theme_builtin_init (void);
#endif /* WEECHAT_THEME_H */
+3 -8
View File
@@ -410,7 +410,7 @@ upgrade_weechat_read_buffer (struct t_infolist *infolist)
struct t_gui_buffer *ptr_buffer;
const char *key, *var_name, *name, *plugin_name, *ptr_id;
const char *str;
char option_name[64], *option_key, *option_var, *error;
char option_name[64], *option_key, *option_var;
int index, main_buffer;
long long id;
@@ -421,9 +421,7 @@ upgrade_weechat_read_buffer (struct t_infolist *infolist)
ptr_id = infolist_string (infolist, "id");
if (ptr_id)
{
error = NULL;
id = strtoll (ptr_id, &error, 10);
if (!error || error[0])
if (!util_parse_longlong (ptr_id, 10, &id))
id = -1;
}
}
@@ -712,7 +710,6 @@ upgrade_weechat_read_nicklist (struct t_infolist *infolist)
{
struct t_gui_nick_group *ptr_group;
const char *type, *name, *group_name, *ptr_id;
char *error;
long long id;
if (!upgrade_current_buffer)
@@ -731,9 +728,7 @@ upgrade_weechat_read_nicklist (struct t_infolist *infolist)
ptr_id = infolist_string (infolist, "id");
if (ptr_id)
{
error = NULL;
id = strtoll (ptr_id, &error, 10);
if (!error || error[0])
if (!util_parse_longlong (ptr_id, 10, &id))
id = -1;
}
}
+8
View File
@@ -125,7 +125,9 @@ struct t_url_constant url_auth[] =
URL_DEF_CONST(AUTH, NTLM),
URL_DEF_CONST(AUTH, ANY),
URL_DEF_CONST(AUTH, ANYSAFE),
#if LIBCURL_VERSION_NUM < 0x081500 /* < 8.21.0 */
URL_DEF_CONST(AUTH, DIGEST_IE),
#endif
URL_DEF_CONST(AUTH, ONLY),
#if LIBCURL_VERSION_NUM < 0x080800 /* < 8.8.0 */
URL_DEF_CONST(AUTH, NTLM_WB),
@@ -141,8 +143,10 @@ struct t_url_constant url_auth[] =
struct t_url_constant url_authtype[] =
{
#if LIBCURL_VERSION_NUM < 0x081600 /* < 8.22.0 */
URL_DEF_CONST(_TLSAUTH, NONE),
URL_DEF_CONST(_TLSAUTH, SRP),
#endif
{ NULL, 0 },
};
@@ -407,9 +411,11 @@ struct t_url_option url_options[] =
URL_DEF_OPTION(PASSWORD, STRING, NULL),
URL_DEF_OPTION(PROXYUSERNAME, STRING, NULL),
URL_DEF_OPTION(PROXYPASSWORD, STRING, NULL),
#if LIBCURL_VERSION_NUM < 0x081600 /* < 8.22.0 */
URL_DEF_OPTION(TLSAUTH_TYPE, MASK, url_authtype),
URL_DEF_OPTION(TLSAUTH_USERNAME, STRING, NULL),
URL_DEF_OPTION(TLSAUTH_PASSWORD, STRING, NULL),
#endif
URL_DEF_OPTION(SASL_AUTHZID, STRING, NULL),
URL_DEF_OPTION(SASL_IR, LONG, NULL),
@@ -624,9 +630,11 @@ struct t_url_option url_options[] =
URL_DEF_OPTION(PROXY_SSL_OPTIONS, LONG, url_ssl_options),
URL_DEF_OPTION(PROXY_SSL_VERIFYHOST, LONG, NULL),
URL_DEF_OPTION(PROXY_SSL_VERIFYPEER, LONG, NULL),
#if LIBCURL_VERSION_NUM < 0x081600 /* < 8.22.0 */
URL_DEF_OPTION(PROXY_TLSAUTH_PASSWORD, STRING, NULL),
URL_DEF_OPTION(PROXY_TLSAUTH_TYPE, STRING, NULL),
URL_DEF_OPTION(PROXY_TLSAUTH_USERNAME, STRING, NULL),
#endif
URL_DEF_OPTION(TLS13_CIPHERS, LIST, NULL),
URL_DEF_OPTION(PROXY_TLS13_CIPHERS, LIST, NULL),
#if LIBCURL_VERSION_NUM >= 0x074700 /* 7.71.0 */
+8 -10
View File
@@ -416,8 +416,8 @@ util_strftimeval (char *string, int max, const char *format, struct timeval *tv)
int
util_parse_time (const char *datetime, struct timeval *tv)
{
char *string, *pos, *pos2, *pos_colon, *pos_hyphen, *pos_dot;
char str_usec[16], *error, str_date[128];
const char *pos_colon, *pos_hyphen, *pos_dot;
char *pos, *pos2, *string, str_usec[16], str_date[128];
struct tm tm_date, tm_date_gm, tm_date_local, *local_time;
time_t time_now, time_gm, time_local;
long long value;
@@ -488,9 +488,7 @@ util_parse_time (const char *datetime, struct timeval *tv)
{
strcat (str_usec, "0");
}
error = NULL;
value = strtoll (str_usec, &error, 10);
if (error && !error[0])
if (util_parse_longlong (str_usec, 10, &value))
{
/*
* just in case: this should not happen as minus is not
@@ -655,9 +653,7 @@ util_parse_time (const char *datetime, struct timeval *tv)
else
{
/* timestamp format: "1704402062" */
error = NULL;
value = strtoll (string, &error, 10);
if (error && !error[0] && (value >= 0))
if (util_parse_longlong (string, 10, &value) && (value >= 0))
{
tv->tv_sec = (time_t)value;
rc = 1;
@@ -777,9 +773,10 @@ util_parse_delay (const char *string_delay, unsigned long long default_factor,
if (!str_number)
return 0;
errno = 0;
error = NULL;
*delay = strtoull (str_number, &error, 10);
if (!error || error[0])
if ((errno == ERANGE) || !error || error[0])
{
free (str_number);
*delay = 0;
@@ -846,9 +843,10 @@ util_version_number (const char *version)
buf[index_buf] = '\0';
if (buf[0])
{
errno = 0;
error = NULL;
number = strtoul (buf, &error, 10);
if (error && !error[0])
if ((errno != ERANGE) && error && !error[0])
{
if (number > 0xFF)
number = 0xFF;
+2 -2
View File
@@ -597,8 +597,8 @@ hook_command_exec (struct t_gui_buffer *buffer, int any_plugin,
struct t_hook *hook_plugin, *hook_other_plugin, *hook_other_plugin2;
struct t_hook *hook_incomplete_command;
struct t_hook_exec_cb hook_exec_cb;
char **argv, **argv_eol, *command_name, *pos;
const char *ptr_string;
char **argv, **argv_eol, *command_name;
const char *ptr_string, *pos;
int argc, rc, length_command_name, allow_incomplete_commands;
int count_other_plugin, count_incomplete_commands, flags;
+5 -6
View File
@@ -41,6 +41,7 @@
#include "../core-log.h"
#include "../core-string.h"
#include "../core-url.h"
#include "../core-util.h"
#include "../../gui/gui-chat.h"
#include "../../plugins/plugin.h"
@@ -88,9 +89,9 @@ hook_process_hashtable (struct t_weechat_plugin *plugin,
{
struct t_hook *new_hook;
struct t_hook_process *new_hook_process;
char *stdout_buffer, *stderr_buffer, *error;
char *stdout_buffer, *stderr_buffer;
const char *ptr_value;
long number;
int number;
stdout_buffer = NULL;
stderr_buffer = NULL;
@@ -149,12 +150,10 @@ hook_process_hashtable (struct t_weechat_plugin *plugin,
ptr_value = hashtable_get (options, "buffer_flush");
if (ptr_value && ptr_value[0])
{
error = NULL;
number = strtol (ptr_value, &error, 10);
if (error && !error[0]
if (util_parse_int (ptr_value, 10, &number)
&& (number >= 1) && (number <= HOOK_PROCESS_BUFFER_SIZE))
{
new_hook_process->buffer_flush = (int)number;
new_hook_process->buffer_flush = number;
}
}
}
+2 -1
View File
@@ -132,7 +132,8 @@ void
hook_signal_extract_flags (const char *signal, const char **ptr_signal,
int *stop_on_error, int *ignore_eat)
{
char *pos, *str_flags, **flags;
const char *pos;
char *str_flags, **flags;
int i, num_flags;
if (!signal || !ptr_signal || !stop_on_error || !ignore_eat)
+46 -15
View File
@@ -75,6 +75,7 @@
#include "core-secure-config.h"
#include "core-signal.h"
#include "core-string.h"
#include "core-theme.h"
#include "core-upgrade.h"
#include "core-url.h"
#include "core-utf8.h"
@@ -134,10 +135,13 @@ int weechat_auto_load_scripts = 1; /* auto-load scripts */
/*
* Display WeeChat startup message.
*
* If "term_theme_light" is set, a notice about the automatic "light" theme is
* displayed on first start.
*/
void
weechat_startup_message (void)
weechat_startup_message (int term_theme_light)
{
if (weechat_headless)
{
@@ -182,22 +186,34 @@ weechat_startup_message (void)
if (weechat_first_start)
{
/* message on first run (when weechat.conf is created) */
gui_chat_printf (NULL, "");
gui_chat_printf (NULL, _("Welcome to WeeChat!"));
gui_chat_printf (
NULL,
_("Welcome to WeeChat!\n"
"\n"
"If you are discovering WeeChat, it is recommended to read at "
"least the quickstart guide, and the user's guide if you have "
"some time; they explain main WeeChat concepts.\n"
"All WeeChat docs are available at: https://weechat.org/doc/\n"
"\n"
"Moreover, there is inline help with /help on all commands and "
"options (use Tab key to complete the name).\n"
"The command /fset can help to customize WeeChat.\n"
"\n"
"You can add and connect to an IRC server with /server and "
_("If you are discovering WeeChat, it is recommended to "
"read at least the quickstart guide, and the user's guide if "
"you have some time; they explain main WeeChat concepts."));
gui_chat_printf (
NULL,
_("All WeeChat docs are available at: %s"),
WEECHAT_WEBSITE_DOC);
gui_chat_printf (
NULL,
_("Moreover, there is inline help with /help on all commands and "
"options (use Tab key to complete the name)."));
gui_chat_printf (
NULL,
_("The command /fset can help to customize WeeChat."));
gui_chat_printf (
NULL,
_("You can add and connect to an IRC server with /server and "
"/connect commands (see /help server)."));
if (term_theme_light)
{
gui_chat_printf (
NULL,
_("The \"light\" theme will be automatically applied. "
"Use /theme reset to switch back to the default dark theme."));
}
gui_chat_printf (NULL, "");
gui_chat_printf (NULL, "---");
gui_chat_printf (NULL, "");
@@ -360,6 +376,8 @@ weechat_init_gettext (void)
void
weechat_init (int argc, char *argv[], void (*gui_init_cb)(void))
{
int term_theme_light; /* 1 if a light terminal detected */
weechat_first_start_time = time (NULL); /* initialize start time */
gettimeofday (&weechat_current_start_timeval, NULL);
@@ -368,6 +386,9 @@ weechat_init (int argc, char *argv[], void (*gui_init_cb)(void))
* weechat_current_start_timeval.tv_usec)
^ getpid ());
/* detect the terminal theme, before initializing the GUI */
term_theme_light = gui_term_theme_is_light ();
weeurl_init (); /* initialize URL */
string_init (); /* initialize string */
signal_init (); /* initialize signals */
@@ -384,6 +405,8 @@ weechat_init (int argc, char *argv[], void (*gui_init_cb)(void))
weechat_shutdown (EXIT_FAILURE, 0);
if (!secure_config_init ()) /* init secured data options (sec.*)*/
weechat_shutdown (EXIT_FAILURE, 0);
theme_init (); /* initialize theme registry */
theme_builtin_init (); /* register built-in themes */
if (!config_weechat_init ()) /* init WeeChat options (weechat.*) */
weechat_shutdown (EXIT_FAILURE, 0);
args_parse (argc, argv); /* parse command line args */
@@ -405,7 +428,7 @@ weechat_init (int argc, char *argv[], void (*gui_init_cb)(void))
weechat_upgrading = 0;
}
if (!weechat_doc_gen)
weechat_startup_message (); /* display WeeChat startup message */
weechat_startup_message (term_theme_light); /* startup message */
gui_chat_print_lines_waiting_buffer (NULL); /* display lines waiting */
weechat_term_check (); /* warning about wrong $TERM */
weechat_locale_check (); /* warning about wrong locale */
@@ -423,6 +446,13 @@ weechat_init (int argc, char *argv[], void (*gui_init_cb)(void))
weechat_doc_gen_ok = doc_generate (weechat_doc_gen_path);
weechat_quit = 1;
}
if (weechat_first_start && isatty (STDOUT_FILENO) && !weechat_headless && !weechat_doc_gen)
{
/* switch to "light" theme if terminal background was detected as "light" */
if (term_theme_light)
theme_apply ("light");
}
}
/*
@@ -449,6 +479,7 @@ weechat_end (void (*gui_end_cb)(int clean_exit))
unhook_all (); /* remove all hooks */
hdata_end (); /* end hdata */
secure_end (); /* end secured data */
theme_end (); /* end theme registry */
string_end (); /* end string */
weeurl_end ();
weechat_shutdown (-1, 0); /* end other things */
+3
View File
@@ -55,7 +55,10 @@
#define WEECHAT_COPYRIGHT_DATE "(C) 2003-2026"
#define WEECHAT_WEBSITE "https://weechat.org/"
#define WEECHAT_WEBSITE_DOC "https://weechat.org/doc/"
#define WEECHAT_WEBSITE_DOWNLOAD "https://weechat.org/download/"
#define WEECHAT_AUTHOR_NAME "Sébastien Helleu"
#define WEECHAT_AUTHOR_EMAIL "flashcode@flashtux.org"
/* log file */
#define WEECHAT_LOG_NAME "weechat.log"
+7 -18
View File
@@ -37,6 +37,7 @@
#include "../../core/core-list.h"
#include "../../core/core-string.h"
#include "../../core/core-utf8.h"
#include "../../core/core-util.h"
#include "../../plugins/plugin.h"
#include "../gui-buffer.h"
#include "../gui-color.h"
@@ -225,7 +226,6 @@ int
gui_color_assign (int *color, const char *color_name)
{
int flag, extra_attr, color_index, number;
char *error;
/* read extended attributes */
extra_attr = 0;
@@ -244,9 +244,7 @@ gui_color_assign (int *color, const char *color_name)
}
/* is it a color number? */
error = NULL;
number = (int)strtol (color_name, &error, 10);
if (color_name[0] && error && !error[0] && (number >= 0))
if (color_name[0] && util_parse_int (color_name, 10, &number) && (number >= 0))
{
/* color_name is a number, use this color number */
if (number > GUI_COLOR_EXTENDED_MAX)
@@ -1357,7 +1355,6 @@ gui_color_palette_add_alias_cb (void *data,
const void *key, const void *value)
{
struct t_gui_color_palette *color_palette;
char *error;
int number;
/* make C compiler happy */
@@ -1368,9 +1365,7 @@ gui_color_palette_add_alias_cb (void *data,
if (color_palette && color_palette->alias)
{
error = NULL;
number = (int)strtol ((char *)key, &error, 10);
if (error && !error[0])
if (util_parse_int ((const char *)key, 10, &number))
{
hashtable_set (gui_color_hash_palette_alias,
color_palette->alias,
@@ -1437,8 +1432,7 @@ struct t_gui_color_palette *
gui_color_palette_new (int number, const char *value)
{
struct t_gui_color_palette *new_color_palette;
char **items, *pos, *pos2, *error1, *error2, *error3;
char *str_alias, *str_rgb, str_number[64];
char **items, *pos, *pos2, *str_alias, *str_rgb, str_number[64];
int num_items, i, r, g, b;
if (!value)
@@ -1490,16 +1484,11 @@ gui_color_palette_new (int number, const char *value)
if (pos2)
{
pos2[0] = '\0';
error1 = NULL;
r = (int)strtol (str_rgb, &error1, 10);
error2 = NULL;
g = (int)strtol (pos + 1, &error2, 10);
error3 = NULL;
b = (int)strtol (pos2 + 1, &error3, 10);
if (error1 && !error1[0] && error2 && !error2[0]
&& error3 && !error3[0]
if (util_parse_int (str_rgb, 10, &r)
&& (r >= 0) && (r <= 1000)
&& util_parse_int (pos + 1, 10, &g)
&& (g >= 0) && (g <= 1000)
&& util_parse_int (pos2 + 1, 10, &b)
&& (b >= 0) && (b <= 1000))
{
new_color_palette->r = r;
+1 -1
View File
@@ -186,7 +186,7 @@ gui_key_default_bindings (int context, int create_option)
BIND("meta-w,meta-b", "/window balance");
BIND("meta-w,meta-s", "/window swap");
BIND("meta-z", "/window zoom");
BIND("meta-=", "/filter toggle");
BIND("meta-=", "/mute /filter toggle");
BIND("meta--", "/filter toggle @");
BIND("meta-0", "/buffer *10");
BIND("meta-1", "/buffer *1");
+6 -12
View File
@@ -36,6 +36,7 @@
#include "../../core/core-hook.h"
#include "../../core/core-string.h"
#include "../../core/core-utf8.h"
#include "../../core/core-util.h"
#include "../../plugins/plugin.h"
#include "../gui-bar.h"
#include "../gui-bar-window.h"
@@ -355,10 +356,9 @@ gui_mouse_event_concat_gesture (char *key)
const char *
gui_mouse_event_name_sgr (const char *key)
{
int length, num_items, is_release;
char **items, *error;
int length, num_items, is_release, button, x, y;
char **items;
static char mouse_key[128];
long button, x, y;
if (!key || !key[0])
return NULL;
@@ -372,14 +372,10 @@ gui_mouse_event_name_sgr (const char *key)
if (num_items < 3)
goto error;
error = NULL;
button = strtol (items[0], &error, 10);
if (!error || error[0])
if (!util_parse_int (items[0], 10, &button))
goto error;
error = NULL;
x = strtol (items[1], &error, 10);
if (!error || error[0])
if (!util_parse_int (items[1], 10, &x))
goto error;
x = (x >= 1) ? x - 1 : 0;
@@ -388,9 +384,7 @@ gui_mouse_event_name_sgr (const char *key)
goto error;
is_release = (items[2][length - 1] == 'm') ? 1 : 0;
items[2][length - 1] = '\0';
error = NULL;
y = strtol (items[2], &error, 10);
if (!error || error[0])
if (!util_parse_int (items[2], 10, &y))
goto error;
y = (y >= 1) ? y - 1 : 0;
+146
View File
@@ -25,6 +25,14 @@
#include "config.h"
#endif
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/select.h>
#include <sys/time.h>
#include <termios.h>
#include <unistd.h>
#ifndef WEECHAT_HEADLESS
#ifdef HAVE_NCURSESW_CURSES_H
#ifdef __sun
@@ -37,6 +45,8 @@
#endif /* HAVE_NCURSESW_CURSES_H */
#endif /* WEECHAT_HEADLESS */
#include "../../core/weechat.h"
/*
* Set "eat_newline_glitch" variable.
@@ -56,3 +66,139 @@ gui_term_set_eat_newline_glitch (int value)
(void) value;
#endif
}
/*
* Auto-detects the terminal background as "light" or "dark".
*
* Best-effort, in order:
*
* 1. Environment variable COLORFGBG (set by rxvt, urxvt, Konsole,
* ...): "fg;bg" or "fg;default;bg"; the last ';'-separated
* component is the bg ANSI color index. 0-6 + 8 are dark,
* 7 + 9-15 are light.
*
* 2. OSC 11 escape query on /dev/tty: write "\033]11;?\033\\",
* wait up to 100 ms for a reply of the form
* "...rgb:RRRR/GGGG/BBBB..." (each component is 1-4 hex digits
* depending on the terminal). Classify the answer by Rec. 601
* luminance computed on the high nibble of each component
* (resolution is plenty for a light/dark binary decision and
* avoids width-normalization headaches).
*
* /dev/tty is used rather than stdin/stdout so a pipe redirection
* does not defeat detection. The select() timeout caps how long a
* silent terminal can stall startup. Headless mode and any I/O error
* short-circuit to the safe default 0 (dark), which is also returned
* when both probes are inconclusive.
*
* MUST be called before curses init: it briefly puts the tty in raw
* mode and reads/writes escape sequences directly.
*
* Returns 1 if a light background is detected, otherwise 0 (0 is the
* preferred value when detection is unsure).
*/
int
gui_term_theme_is_light (void)
{
const char *colorfgbg, *p;
char *endptr;
long bg;
int fd, n, i, len;
struct termios old_attr, new_attr;
fd_set rfds;
struct timeval tv;
char buf[256], *q, *qend;
unsigned long comp_high[3], luminance;
if (weechat_headless)
return 0;
/* 1. COLORFGBG */
colorfgbg = getenv ("COLORFGBG");
if (colorfgbg && colorfgbg[0])
{
p = strrchr (colorfgbg, ';');
if (p)
{
bg = strtol (p + 1, &endptr, 10);
if (endptr != p + 1 && *endptr == '\0')
{
if (bg == 7 || (bg >= 9 && bg <= 15))
return 1;
if ((bg >= 0 && bg <= 6) || bg == 8)
return 0;
}
}
}
/* 2. OSC 11 query on the controlling terminal */
fd = open ("/dev/tty", O_RDWR | O_NOCTTY);
if (fd < 0)
return 0;
if (tcgetattr (fd, &old_attr) != 0)
{
close (fd);
return 0;
}
new_attr = old_attr;
new_attr.c_lflag &= (tcflag_t) ~(ICANON | ECHO);
new_attr.c_cc[VMIN] = 0;
new_attr.c_cc[VTIME] = 0;
if (tcsetattr (fd, TCSANOW, &new_attr) != 0)
{
close (fd);
return 0;
}
n = -1;
if (write (fd, "\033]11;?\033\\", 8) == 8)
{
FD_ZERO (&rfds);
FD_SET (fd, &rfds);
tv.tv_sec = 0;
tv.tv_usec = 100000; /* 100 ms cap on terminals that won't reply */
if (select (fd + 1, &rfds, NULL, NULL, &tv) > 0)
n = read (fd, buf, sizeof (buf) - 1);
}
tcsetattr (fd, TCSANOW, &old_attr);
close (fd);
if (n <= 0)
return 0;
buf[n] = '\0';
q = strstr (buf, "rgb:");
if (!q)
return 0;
q += 4;
for (i = 0; i < 3; i++)
{
qend = q;
while ((*qend >= '0' && *qend <= '9')
|| (*qend >= 'a' && *qend <= 'f')
|| (*qend >= 'A' && *qend <= 'F'))
qend++;
len = (int)(qend - q);
if (len < 1 || len > 4)
return 0;
/* high nibble of this component: width-independent brightness */
comp_high[i] = strtoul (q, NULL, 16) >> ((len - 1) * 4);
q = qend;
if (i < 2)
{
if (*q != '/')
return 0;
q++;
}
}
/* Rec. 601 with coefficients summing to 1000; max = 15 * 1000 */
luminance = (299UL * comp_high[0]
+ 587UL * comp_high[1]
+ 114UL * comp_high[2]);
return (luminance > 7500) ? 1 : 0;
}
+30 -54
View File
@@ -41,6 +41,7 @@
#include "../../core/core-hook.h"
#include "../../core/core-log.h"
#include "../../core/core-string.h"
#include "../../core/core-util.h"
#include "../../plugins/plugin.h"
#include "../gui-window.h"
#include "../gui-bar.h"
@@ -372,7 +373,8 @@ gui_window_set_weechat_color (WINDOW *window, int num_color)
* if not real white, we use default terminal foreground instead of
* white if bold attribute is set
*/
if ((fg == COLOR_WHITE) && (gui_color[num_color]->attributes & A_BOLD)
if (((fg == COLOR_WHITE + 8)
|| ((fg == COLOR_WHITE) && (gui_color[num_color]->attributes & A_BOLD)))
&& !CONFIG_BOOLEAN(config_look_color_real_white))
{
fg = -1;
@@ -442,7 +444,8 @@ gui_window_set_custom_color_fg (WINDOW *window, int fg)
* if not real white, we use default terminal foreground instead of
* white if bold attribute is set
*/
if ((fg == COLOR_WHITE) && (attributes & A_BOLD)
if (((fg == COLOR_WHITE + 8)
|| ((fg == COLOR_WHITE) && (attributes & A_BOLD)))
&& !CONFIG_BOOLEAN(config_look_color_real_white))
{
fg = -1;
@@ -535,7 +538,8 @@ gui_window_set_custom_color_fg_bg (WINDOW *window, int fg, int bg,
* if not real white, we use default terminal foreground instead of
* white if bold attribute is set
*/
if ((fg == COLOR_WHITE) && (attributes & A_BOLD)
if (((fg == COLOR_WHITE + 8)
|| ((fg == COLOR_WHITE) && (attributes & A_BOLD)))
&& !CONFIG_BOOLEAN(config_look_color_real_white))
{
fg = -1;
@@ -638,7 +642,7 @@ void
gui_window_string_apply_color_fg (unsigned char **string, WINDOW *window)
{
unsigned char *ptr_string;
char str_fg[6], *error;
char str_fg[6];
int fg, extra_attr, flag;
ptr_string = *string;
@@ -659,9 +663,7 @@ gui_window_string_apply_color_fg (unsigned char **string, WINDOW *window)
{
memcpy (str_fg, ptr_string, 5);
str_fg[5] = '\0';
error = NULL;
fg = (int)strtol (str_fg, &error, 10);
if (error && !error[0])
if (util_parse_int (str_fg, 10, &fg))
{
gui_window_set_custom_color_fg (window,
fg | GUI_COLOR_EXTENDED_FLAG | extra_attr);
@@ -685,9 +687,7 @@ gui_window_string_apply_color_fg (unsigned char **string, WINDOW *window)
str_fg[0] = ptr_string[0];
str_fg[1] = ptr_string[1];
str_fg[2] = '\0';
error = NULL;
fg = (int)strtol (str_fg, &error, 10);
if (error && !error[0])
if (util_parse_int (str_fg, 10, &fg))
{
gui_window_set_custom_color_fg (window, fg | extra_attr);
}
@@ -710,7 +710,7 @@ void
gui_window_string_apply_color_bg (unsigned char **string, WINDOW *window)
{
unsigned char *ptr_string;
char str_bg[6], *error;
char str_bg[6];
int bg;
ptr_string = *string;
@@ -724,9 +724,7 @@ gui_window_string_apply_color_bg (unsigned char **string, WINDOW *window)
{
memcpy (str_bg, ptr_string + 1, 5);
str_bg[5] = '\0';
error = NULL;
bg = (int)strtol (str_bg, &error, 10);
if (error && !error[0])
if (util_parse_int (str_bg, 10, &bg))
{
gui_window_set_custom_color_bg (window,
bg | GUI_COLOR_EXTENDED_FLAG);
@@ -744,9 +742,7 @@ gui_window_string_apply_color_bg (unsigned char **string, WINDOW *window)
str_bg[0] = ptr_string[0];
str_bg[1] = ptr_string[1];
str_bg[2] = '\0';
error = NULL;
bg = (int)strtol (str_bg, &error, 10);
if (error && !error[0])
if (util_parse_int (str_bg, 10, &bg))
{
gui_window_set_custom_color_bg (window, bg);
}
@@ -769,7 +765,7 @@ void
gui_window_string_apply_color_fg_bg (unsigned char **string, WINDOW *window)
{
unsigned char *ptr_string;
char str_fg[6], str_bg[6], *error;
char str_fg[6], str_bg[6];
int fg, bg, extra_attr, flag;
ptr_string = *string;
@@ -794,12 +790,10 @@ gui_window_string_apply_color_fg_bg (unsigned char **string, WINDOW *window)
{
memcpy (str_fg, ptr_string, 5);
str_fg[5] = '\0';
error = NULL;
fg = (int)strtol (str_fg, &error, 10);
if (!error || error[0])
fg = -1;
else
if (util_parse_int (str_fg, 10, &fg))
fg |= GUI_COLOR_EXTENDED_FLAG | extra_attr;
else
fg = -1;
}
ptr_string += 5;
}
@@ -819,12 +813,10 @@ gui_window_string_apply_color_fg_bg (unsigned char **string, WINDOW *window)
str_fg[0] = ptr_string[0];
str_fg[1] = ptr_string[1];
str_fg[2] = '\0';
error = NULL;
fg = (int)strtol (str_fg, &error, 10);
if (!error || error[0])
fg = -1;
else
if (util_parse_int (str_fg, 10, &fg))
fg |= extra_attr;
else
fg = -1;
}
ptr_string += 2;
}
@@ -846,12 +838,10 @@ gui_window_string_apply_color_fg_bg (unsigned char **string, WINDOW *window)
{
memcpy (str_bg, ptr_string + 1, 5);
str_bg[5] = '\0';
error = NULL;
bg = (int)strtol (str_bg, &error, 10);
if (!error || error[0])
bg = -1;
else
if (util_parse_int (str_bg, 10, &bg))
bg |= GUI_COLOR_EXTENDED_FLAG;
else
bg = -1;
}
ptr_string += 6;
}
@@ -865,9 +855,7 @@ gui_window_string_apply_color_fg_bg (unsigned char **string, WINDOW *window)
str_bg[0] = ptr_string[0];
str_bg[1] = ptr_string[1];
str_bg[2] = '\0';
error = NULL;
bg = (int)strtol (str_bg, &error, 10);
if (!error || error[0])
if (!util_parse_int (str_bg, 10, &bg))
bg = -1;
}
ptr_string += 2;
@@ -893,7 +881,7 @@ void
gui_window_string_apply_color_pair (unsigned char **string, WINDOW *window)
{
unsigned char *ptr_string;
char str_pair[6], *error;
char str_pair[6];
int pair;
ptr_string = *string;
@@ -906,12 +894,8 @@ gui_window_string_apply_color_pair (unsigned char **string, WINDOW *window)
{
memcpy (str_pair, ptr_string, 5);
str_pair[5] = '\0';
error = NULL;
pair = (int)strtol (str_pair, &error, 10);
if (error && !error[0])
{
if (util_parse_int (str_pair, 10, &pair))
gui_window_set_custom_color_pair (window, pair);
}
}
ptr_string += 5;
}
@@ -930,7 +914,7 @@ void
gui_window_string_apply_color_weechat (unsigned char **string, WINDOW *window)
{
unsigned char *ptr_string;
char str_number[3], *error;
char str_number[3];
int weechat_color;
ptr_string = *string;
@@ -942,13 +926,8 @@ gui_window_string_apply_color_weechat (unsigned char **string, WINDOW *window)
str_number[0] = ptr_string[0];
str_number[1] = ptr_string[1];
str_number[2] = '\0';
error = NULL;
weechat_color = (int)strtol (str_number, &error, 10);
if (error && !error[0])
{
gui_window_set_weechat_color (window,
weechat_color);
}
if (util_parse_int (str_number, 10, &weechat_color))
gui_window_set_weechat_color (window, weechat_color);
}
ptr_string += 2;
}
@@ -2517,7 +2496,6 @@ void
gui_window_bare_display_toggle (const char *delay)
{
long seconds;
char *error;
gui_window_bare_display ^= 1;
@@ -2529,9 +2507,7 @@ gui_window_bare_display_toggle (const char *delay)
gui_mouse_disable ();
if (delay)
{
error = NULL;
seconds = strtol (delay, &error, 10);
if (error && !error[0] && (seconds >= 0))
if (util_parse_long (delay, 10, &seconds) && (seconds >= 0))
{
if (gui_window_bare_display_timer)
{
+4 -3
View File
@@ -47,7 +47,7 @@ void
daemonize (void)
{
pid_t pid;
int fd, i;
int fd, i, rc;
printf ("%s ", _("Running WeeChat in background..."));
@@ -77,8 +77,9 @@ daemonize (void)
close (i);
}
fd = open ("/dev/null", O_RDWR);
(void) dup (fd);
(void) dup (fd);
rc = dup (fd);
rc = dup (fd);
(void) rc;
}
/*
+2 -1
View File
@@ -138,7 +138,8 @@ gui_bar_item_custom_search (const char *item_name)
struct t_gui_bar_item_custom *
gui_bar_item_custom_search_with_option_name (const char *option_name)
{
char *item_name, *pos_option;
const char *pos_option;
char *item_name;
struct t_gui_bar_item_custom *ptr_item;
if (!option_name)
+11 -15
View File
@@ -1880,9 +1880,9 @@ gui_bar_item_buffer_nicklist_cb (const void *pointer, void *data,
{
if (strchr (ptr_nick->prefix_color, '.'))
{
config_file_search_with_string (ptr_nick->prefix_color,
NULL, NULL, &ptr_option,
NULL);
config_file_search_with_string (
ptr_nick->prefix_color,
NULL, NULL, &ptr_option, NULL);
if (ptr_option)
{
string_dyn_concat (
@@ -1907,9 +1907,9 @@ gui_bar_item_buffer_nicklist_cb (const void *pointer, void *data,
{
if (strchr (ptr_nick->color, '.'))
{
config_file_search_with_string (ptr_nick->color,
NULL, NULL, &ptr_option,
NULL);
config_file_search_with_string (
ptr_nick->color,
NULL, NULL, &ptr_option, NULL);
if (ptr_option)
{
string_dyn_concat (
@@ -1940,9 +1940,9 @@ gui_bar_item_buffer_nicklist_cb (const void *pointer, void *data,
{
if (strchr (ptr_group->color, '.'))
{
config_file_search_with_string (ptr_group->color,
NULL, NULL, &ptr_option,
NULL);
config_file_search_with_string (
ptr_group->color,
NULL, NULL, &ptr_option, NULL);
if (ptr_option)
{
string_dyn_concat (
@@ -2153,7 +2153,6 @@ gui_bar_item_focus_buffer_nicklist_cb (const void *pointer,
const char *str_window, *str_buffer, *str_bar_item_line;
struct t_gui_window *window;
struct t_gui_buffer *buffer;
char *error;
/* make C compiler happy */
(void) pointer;
@@ -2162,6 +2161,8 @@ gui_bar_item_focus_buffer_nicklist_cb (const void *pointer,
str_bar_item_line = hashtable_get (info, "_bar_item_line");
if (!str_bar_item_line || !str_bar_item_line[0])
return NULL;
if (!util_parse_int (str_bar_item_line, 10, &bar_item_line))
return NULL;
/* get window */
str_window = hashtable_get (info, "_window");
@@ -2193,11 +2194,6 @@ gui_bar_item_focus_buffer_nicklist_cb (const void *pointer,
if (!buffer)
return NULL;
error = NULL;
bar_item_line = (int) strtol (str_bar_item_line, &error, 10);
if (!error || error[0])
return NULL;
i = 0;
ptr_group = NULL;
ptr_nick = NULL;
+14 -22
View File
@@ -39,6 +39,7 @@
#include "../core/core-infolist.h"
#include "../core/core-log.h"
#include "../core/core-string.h"
#include "../core/core-util.h"
#include "../plugins/plugin.h"
#include "gui-bar.h"
#include "gui-bar-item.h"
@@ -514,7 +515,8 @@ gui_bar_search (const char *name)
struct t_gui_bar *
gui_bar_search_with_option_name (const char *option_name)
{
char *bar_name, *pos_option;
const char *pos_option;
char *bar_name;
struct t_gui_bar *ptr_bar;
if (!option_name)
@@ -1018,9 +1020,7 @@ gui_bar_config_check_size (const void *pointer, void *data,
const char *value)
{
struct t_gui_bar *ptr_bar;
long number;
char *error;
int new_value, current_size;
int new_value, current_size, number;
/* make C compiler happy */
(void) pointer;
@@ -1032,30 +1032,26 @@ gui_bar_config_check_size (const void *pointer, void *data,
new_value = -1;
if (strncmp (value, "++", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
if ((number < 0) || (CONFIG_INTEGER(ptr_bar->options[GUI_BAR_OPTION_SIZE]) > INT_MAX - number))
return 0;
new_value = CONFIG_INTEGER(ptr_bar->options[GUI_BAR_OPTION_SIZE]) + number;
}
}
else if (strncmp (value, "--", 2) == 0)
{
error = NULL;
number = strtol (value + 2, &error, 10);
if (error && !error[0])
if (util_parse_int (value + 2, 10, &number))
{
if ((number < 0) || (CONFIG_INTEGER(ptr_bar->options[GUI_BAR_OPTION_SIZE]) < INT_MIN + number))
return 0;
new_value = CONFIG_INTEGER(ptr_bar->options[GUI_BAR_OPTION_SIZE]) - number;
}
}
else
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
{
if (util_parse_int (value, 10, &number))
new_value = number;
}
}
if (new_value < 0)
return 0;
@@ -2062,9 +2058,8 @@ gui_bar_scroll (struct t_gui_bar *bar, struct t_gui_window *window,
const char *scroll)
{
struct t_gui_bar_window *ptr_bar_win;
long number;
char *str, *error;
int length, add_x, add, percent, scroll_beginning, scroll_end;
char *str;
int length, add_x, add, percent, scroll_beginning, scroll_end, number;
if (!bar)
return 0;
@@ -2132,10 +2127,7 @@ gui_bar_scroll (struct t_gui_bar *bar, struct t_gui_window *window,
if (!str)
return 0;
error = NULL;
number = strtol (str, &error, 10);
if (!error || error[0] || (number <= 0))
if (!util_parse_int (str, 10, &number) || (number <= 0))
{
free (str);
return 0;
+100 -98
View File
@@ -49,6 +49,7 @@
#include "../core/core-secure-buffer.h"
#include "../core/core-string.h"
#include "../core/core-utf8.h"
#include "../core/core-util.h"
#include "../plugins/plugin.h"
#include "gui-buffer.h"
#include "gui-chat.h"
@@ -1763,17 +1764,13 @@ void
gui_buffer_set_notify (struct t_gui_buffer *buffer, const char *notify)
{
const char *ptr_notify;
char *error;
long number;
int mute_old;
int mute_old, number;
if (!buffer)
return;
ptr_notify = NULL;
error = NULL;
number = strtol (notify, &error, 10);
if (error && !error[0])
if (util_parse_int (notify, 10, &number))
{
if (number < GUI_BUFFER_NUM_NOTIFY)
{
@@ -2231,9 +2228,8 @@ void
gui_buffer_set_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
const char *new_hotlist_max_level_nicks)
{
char **nicks, *pos, *error;
int nicks_count, value, i;
long number;
char **nicks, *pos;
int nicks_count, number, value, i;
if (!buffer)
return;
@@ -2259,13 +2255,10 @@ gui_buffer_set_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
{
pos[0] = '\0';
pos++;
error = NULL;
number = strtol (pos, &error, 10);
if (error && !error[0])
value = (int)number;
if (util_parse_int (pos, 10, &number))
value = number;
}
hashtable_set (buffer->hotlist_max_level_nicks, nicks[i],
&value);
hashtable_set (buffer->hotlist_max_level_nicks, nicks[i], &value);
}
string_free_split (nicks);
}
@@ -2278,9 +2271,8 @@ void
gui_buffer_add_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
const char *nicks_to_add)
{
char **nicks, *pos, *error;
int nicks_count, value, i;
long number;
char **nicks, *pos;
int nicks_count, number, value, i;
if (!buffer || !nicks_to_add)
return;
@@ -2301,13 +2293,10 @@ gui_buffer_add_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
{
pos[0] = '\0';
pos++;
error = NULL;
number = strtol (pos, &error, 10);
if (error && !error[0])
value = (int)number;
if (util_parse_int (pos, 10, &number))
value = number;
}
hashtable_set (buffer->hotlist_max_level_nicks, nicks[i],
&value);
hashtable_set (buffer->hotlist_max_level_nicks, nicks[i], &value);
}
string_free_split (nicks);
}
@@ -2453,9 +2442,7 @@ void
gui_buffer_set_unread (struct t_gui_buffer *buffer, const char *argument)
{
struct t_gui_line *old_last_read_line;
int i, old_first_line_not_read;
long number;
char *error;
int i, number, old_first_line_not_read;
if (!buffer || (buffer->type != GUI_BUFFER_TYPE_FORMATTED))
return;
@@ -2478,9 +2465,7 @@ gui_buffer_set_unread (struct t_gui_buffer *buffer, const char *argument)
else if (argument[0] == '-')
{
/* move the unread marker N lines towards the first line */
error = NULL;
number = strtol (argument, &error, 10);
if (error && !error[0] && (number < 0))
if (util_parse_int (argument, 10, &number) && (number < 0))
{
for (i = 0; i > number; i--)
{
@@ -2506,9 +2491,7 @@ gui_buffer_set_unread (struct t_gui_buffer *buffer, const char *argument)
else if (argument[0] == '+')
{
/* move the unread marker N lines towards the last line */
error = NULL;
number = strtol (argument, &error, 10);
if (error && !error[0] && (number > 0))
if (util_parse_int (argument, 10, &number) && (number > 0))
{
for (i = 0; i < number; i++)
{
@@ -2532,9 +2515,7 @@ gui_buffer_set_unread (struct t_gui_buffer *buffer, const char *argument)
else
{
/* move the unread marker N lines from the end towards the first line */
error = NULL;
number = strtol (argument, &error, 10);
if (error && !error[0] && (number > 0))
if (util_parse_int (argument, 10, &number) && (number > 0))
{
buffer->lines->last_read_line = buffer->lines->last_line;
buffer->lines->first_line_not_read = 0;
@@ -2568,8 +2549,7 @@ void
gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
const char *value)
{
long number;
char *error;
int number;
if (!property || !value)
return;
@@ -2583,9 +2563,7 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
gui_add_hotlist = 1;
else if (buffer)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
{
if (number < 0)
{
@@ -2613,9 +2591,7 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
/* properties that need a buffer */
if (strcmp (property, "hotlist_conditions") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
{
if (number < 0)
{
@@ -2649,9 +2625,7 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
}
else if (strcmp (property, "hidden") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
{
if (number)
gui_buffer_hide (buffer);
@@ -2661,37 +2635,27 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
}
else if (strcmp (property, "print_hooks_enabled") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
buffer->print_hooks_enabled = (number) ? 1 : 0;
}
else if (strcmp (property, "day_change") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_day_change (buffer, number);
}
else if (strcmp (property, "clear") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
buffer->clear = (number) ? 1 : 0;
}
else if (strcmp (property, "filter") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_filter (buffer, number);
}
else if (strcmp (property, "number") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0] && (number >= 1))
if (util_parse_int (value, 10, &number) && (number >= 1))
gui_buffer_move_to_number (buffer, number);
}
else if (strcmp (property, "name") == 0)
@@ -2723,30 +2687,22 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
}
else if (strcmp (property, "time_for_each_line") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_time_for_each_line (buffer, number);
}
else if (strcmp (property, "nicklist") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_nicklist (buffer, number);
}
else if (strcmp (property, "nicklist_case_sensitive") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_nicklist_case_sensitive (buffer, number);
}
else if (strcmp (property, "nicklist_display_groups") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_nicklist_display_groups (buffer, number);
}
else if (strcmp (property, "highlight_words") == 0)
@@ -2815,37 +2771,27 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
}
else if (strcmp (property, "input_pos") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_input_set_pos (buffer, number);
}
else if (strcmp (property, "input_get_any_user_data") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_input_get_any_user_data (buffer, number);
}
else if (strcmp (property, "input_get_unknown_commands") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_input_get_unknown_commands (buffer, number);
}
else if (strcmp (property, "input_get_empty") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_input_get_empty (buffer, number);
}
else if (strcmp (property, "input_multiline") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
gui_buffer_set_input_multiline (buffer, number);
}
else if (strncmp (property, "localvar_set_", 13) == 0)
@@ -3075,7 +3021,6 @@ gui_buffer_search (const char *plugin, const char *name)
struct t_gui_buffer *ptr_buffer;
int plugin_match, plugin_case_sensitive, name_case_sensitive;
long long id;
char *error;
if (!name || !name[0])
return gui_current_window->buffer;
@@ -3085,9 +3030,9 @@ gui_buffer_search (const char *plugin, const char *name)
if (plugin && (strcmp (plugin, "==id") == 0))
{
error = NULL;
id = strtoll (name, &error, 10);
return (error && !error[0]) ? gui_buffer_search_by_id (id) : NULL;
if (util_parse_longlong (name, 10, &id))
return gui_buffer_search_by_id (id);
return NULL;
}
plugin_case_sensitive = 1;
@@ -3278,6 +3223,35 @@ gui_buffer_search_by_number (int number)
return NULL;
}
/*
* Search for a buffer by id, full name or partial name.
*/
struct t_gui_buffer *
gui_buffer_search_by_id_name (const char *string)
{
struct t_gui_buffer *ptr_buffer;
long long id;
if (!string || !string[0])
return NULL;
ptr_buffer = NULL;
if (util_parse_longlong (string, 10, &id))
{
ptr_buffer = gui_buffer_search_by_id (id);
}
else
{
ptr_buffer = gui_buffer_search_by_full_name (string);
if (!ptr_buffer)
ptr_buffer = gui_buffer_search_by_partial_name (NULL, string);
}
return ptr_buffer;
}
/*
* Search for a buffer by id, number, full name or partial name.
*/
@@ -3287,16 +3261,13 @@ gui_buffer_search_by_id_number_name (const char *string)
{
struct t_gui_buffer *ptr_buffer;
long long number;
char *error;
if (!string)
if (!string || !string[0])
return NULL;
ptr_buffer = NULL;
error = NULL;
number = strtoll (string, &error, 10);
if (error && !error[0])
if (util_parse_longlong (string, 10, &number))
{
ptr_buffer = gui_buffer_search_by_id (number);
if (!ptr_buffer)
@@ -3804,6 +3775,7 @@ gui_buffer_close (struct t_gui_buffer *buffer)
gui_hotlist_remove_buffer (buffer, 1);
free (buffer->hotlist_removed);
buffer->hotlist_removed = NULL;
if (gui_hotlist_initial_buffer == buffer)
gui_hotlist_initial_buffer = NULL;
@@ -3822,55 +3794,85 @@ gui_buffer_close (struct t_gui_buffer *buffer)
/* free all lines */
gui_line_free_all (buffer);
free (buffer->own_lines);
buffer->own_lines = NULL;
free (buffer->mixed_lines);
buffer->mixed_lines = NULL;
/* free some data */
gui_buffer_undo_free_all (buffer);
gui_history_buffer_free (buffer);
gui_completion_free (buffer->completion);
buffer->completion = NULL;
gui_nicklist_remove_all (buffer);
gui_nicklist_remove_group (buffer, buffer->nicklist_root);
buffer->nicklist_root = NULL;
hashtable_free (buffer->hotlist_max_level_nicks);
buffer->hotlist_max_level_nicks = NULL;
gui_key_free_all (-1, &buffer->keys, &buffer->last_key,
&buffer->keys_count, 0);
gui_buffer_local_var_remove_all (buffer);
hashtable_free (buffer->local_variables);
buffer->local_variables = NULL;
free (buffer->plugin_name_for_upgrade);
buffer->plugin_name_for_upgrade = NULL;
free (buffer->name);
buffer->name = NULL;
free (buffer->full_name);
buffer->full_name = NULL;
free (buffer->old_full_name);
buffer->old_full_name = NULL;
free (buffer->short_name);
buffer->short_name = NULL;
free (buffer->title);
buffer->title = NULL;
free (buffer->modes);
buffer->modes = NULL;
free (buffer->input_prompt);
buffer->input_prompt = NULL;
free (buffer->input_buffer);
buffer->input_buffer = NULL;
free (buffer->input_undo_snap);
buffer->input_undo_snap = NULL;
free (buffer->text_search_input);
buffer->text_search_input = NULL;
if (buffer->text_search_regex_compiled)
{
regfree (buffer->text_search_regex_compiled);
free (buffer->text_search_regex_compiled);
buffer->text_search_regex_compiled = NULL;
}
free (buffer->highlight_words);
buffer->highlight_words = NULL;
free (buffer->highlight_disable_regex);
buffer->highlight_disable_regex = NULL;
if (buffer->highlight_disable_regex_compiled)
{
regfree (buffer->highlight_disable_regex_compiled);
free (buffer->highlight_disable_regex_compiled);
buffer->highlight_disable_regex_compiled = NULL;
}
free (buffer->highlight_regex);
buffer->highlight_regex = NULL;
if (buffer->highlight_regex_compiled)
{
regfree (buffer->highlight_regex_compiled);
free (buffer->highlight_regex_compiled);
buffer->highlight_regex_compiled = NULL;
}
free (buffer->highlight_tags_restrict);
buffer->highlight_tags_restrict = NULL;
string_free_split_tags (buffer->highlight_tags_restrict_array);
buffer->highlight_tags_restrict_array = NULL;
free (buffer->highlight_tags);
buffer->highlight_tags = NULL;
string_free_split_tags (buffer->highlight_tags_array);
buffer->highlight_tags_array = NULL;
free (buffer->input_callback_data);
buffer->input_callback_data = NULL;
free (buffer->close_callback_data);
buffer->close_callback_data = NULL;
free (buffer->nickcmp_callback_data);
buffer->nickcmp_callback_data = NULL;
/* remove buffer from buffers list */
if (buffer->prev_buffer)
+1
View File
@@ -416,6 +416,7 @@ extern struct t_gui_buffer *gui_buffer_search (const char *plugin, const char *n
extern struct t_gui_buffer *gui_buffer_search_by_partial_name (const char *plugin,
const char *name);
extern struct t_gui_buffer *gui_buffer_search_by_number (int number);
extern struct t_gui_buffer *gui_buffer_search_by_id_name (const char *string);
extern struct t_gui_buffer *gui_buffer_search_by_id_number_name (const char *string);
extern int gui_buffer_count_merged_buffers (int number);
extern void gui_buffer_clear (struct t_gui_buffer *buffer);
+5 -9
View File
@@ -118,8 +118,8 @@ gui_chat_init (void)
void
gui_chat_prefix_build (void)
{
const char *ptr_prefix;
char prefix[512], *pos_color;
const char *ptr_prefix, *pos_color;
char prefix[512];
int prefix_color[GUI_CHAT_NUM_PREFIXES] =
{ GUI_COLOR_CHAT_PREFIX_ERROR, GUI_COLOR_CHAT_PREFIX_NETWORK,
GUI_COLOR_CHAT_PREFIX_ACTION, GUI_COLOR_CHAT_PREFIX_JOIN,
@@ -1400,7 +1400,7 @@ gui_chat_hsignal_quote_line_cb (const void *pointer, void *data,
struct timeval tv;
struct t_gui_line *ptr_line;
int is_nick, rc;
char str_time[128], *str, *error;
char str_time[128], *str;
/* make C compiler happy */
(void) pointer;
@@ -1415,9 +1415,7 @@ gui_chat_hsignal_quote_line_cb (const void *pointer, void *data,
hashtable_get (hashtable, "_chat_line_date") : NULL;
if (ptr_date)
{
error = NULL;
number = strtoll (ptr_date, &error, 10);
if (error && !error[0])
if (util_parse_longlong (ptr_date, 10, &number))
{
tv.tv_sec = (time_t)number;
tv.tv_usec = 0;
@@ -1425,9 +1423,7 @@ gui_chat_hsignal_quote_line_cb (const void *pointer, void *data,
hashtable_get (hashtable, "_chat_line_date_usec") : NULL;
if (ptr_date_usec)
{
error = NULL;
number = strtoll (ptr_date_usec, &error, 10);
if (error && !error[0])
if (util_parse_longlong (ptr_date_usec, 10, &number))
tv.tv_usec = (long)number;
}
util_strftimeval (str_time, sizeof (str_time),
+17 -41
View File
@@ -41,6 +41,7 @@
#include "../core/core-list.h"
#include "../core/core-string.h"
#include "../core/core-utf8.h"
#include "../core/core-util.h"
#include "../plugins/plugin.h"
#include "gui-color.h"
#include "gui-chat.h"
@@ -170,8 +171,7 @@ gui_color_search_config (const char *color_name)
/* search in any configuration file (example: "irc.color.message_quit") */
if (strchr (color_name, '.'))
{
config_file_search_with_string (color_name, NULL, NULL, &ptr_option,
NULL);
config_file_search_with_string (color_name, NULL, NULL, &ptr_option, NULL);
if (ptr_option)
return gui_color_from_option (ptr_option);
}
@@ -255,8 +255,8 @@ gui_color_get_custom (const char *color_name)
static char color[32][96];
static int index_color = 0;
char color_fg[32], color_bg[32];
char *pos_delim, *str_fg, *pos_bg, *error, *color_attr;
const char *ptr_color_name;
char *str_fg, *color_attr;
const char *ptr_color_name, *pos_delim, *pos_bg;
/* attribute or other color name (GUI dependent) */
index_color = (index_color + 1) % 32;
@@ -439,9 +439,7 @@ gui_color_get_custom (const char *color_name)
fg_term = gui_color_palette_get_alias (str_fg);
if (fg_term < 0)
{
error = NULL;
term_color = (int)strtol (str_fg, &error, 10);
if (error && !error[0])
if (util_parse_int (str_fg, 10, &term_color))
{
fg_term = term_color;
if (fg_term < 0)
@@ -458,9 +456,7 @@ gui_color_get_custom (const char *color_name)
bg_term = gui_color_palette_get_alias (pos_bg);
if (bg_term < 0)
{
error = NULL;
term_color = (int)strtol (pos_bg, &error, 10);
if (error && !error[0])
if (util_parse_int (pos_bg, 10, &term_color))
{
bg_term = term_color;
if (bg_term < 0)
@@ -1287,7 +1283,7 @@ char *
gui_color_encode_ansi (const char *string)
{
const unsigned char *ptr_string;
char **out, str_concat[128], str_color[8], *error;
char **out, str_concat[128], str_color[8];
int flag, color, length, ansi_color, fg, bg, attrs;
if (!string)
@@ -1321,9 +1317,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 5);
str_color[5] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
snprintf (str_concat, sizeof (str_concat),
"\x1B[38;5;%dm",
@@ -1344,9 +1338,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 2);
str_color[2] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
ansi_color = gui_color_weechat_to_ansi (color);
snprintf (str_concat, sizeof (str_concat),
@@ -1371,9 +1363,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 5);
str_color[5] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
snprintf (str_concat, sizeof (str_concat),
"\x1B[48;5;%dm",
@@ -1389,9 +1379,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 2);
str_color[2] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
ansi_color = gui_color_weechat_to_ansi (color);
snprintf (str_concat, sizeof (str_concat),
@@ -1421,9 +1409,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 5);
str_color[5] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
snprintf (str_concat, sizeof (str_concat),
"\x1B[38;5;%dm",
@@ -1444,9 +1430,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 2);
str_color[2] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
ansi_color = gui_color_weechat_to_ansi (color);
snprintf (str_concat, sizeof (str_concat),
@@ -1477,9 +1461,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 5);
str_color[5] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
snprintf (str_concat, sizeof (str_concat),
"\x1B[48;5;%dm",
@@ -1496,9 +1478,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 2);
str_color[2] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
ansi_color = gui_color_weechat_to_ansi (color);
snprintf (str_concat, sizeof (str_concat),
@@ -1522,9 +1502,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 5);
str_color[5] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0])
if (util_parse_int (str_color, 10, &color))
{
snprintf (str_concat, sizeof (str_concat),
"\x1B[38;5;%dm",
@@ -1596,9 +1574,7 @@ gui_color_encode_ansi (const char *string)
{
memcpy (str_color, ptr_string, 2);
str_color[2] = '\0';
error = NULL;
color = (int)strtol (str_color, &error, 10);
if (error && !error[0]
if (util_parse_int (str_color, 10, &color)
&& (color >= 0)
&& (color < GUI_COLOR_NUM_COLORS))
{
+2 -2
View File
@@ -366,8 +366,8 @@ gui_filter_new (int enabled, const char *name, const char *buffer_name,
{
struct t_gui_filter *new_filter;
regex_t *regex1, *regex2;
char *pos_tab, *regex_prefix, buf[512], str_error[1024];
const char *ptr_start_regex, *pos_regex_message;
char *regex_prefix, buf[512], str_error[1024];
const char *ptr_start_regex, *pos_regex_message, *pos_tab;
int rc;
if (!name || !buffer_name || !tags || !regex)
+5 -9
View File
@@ -32,6 +32,7 @@
#include "../core/core-hashtable.h"
#include "../core/core-hook.h"
#include "../core/core-string.h"
#include "../core/core-util.h"
#include "../plugins/plugin.h"
#include "gui-bar.h"
#include "gui-bar-window.h"
@@ -280,11 +281,10 @@ gui_focus_info_hashtable_gui_focus_info_cb (const void *pointer, void *data,
const char *info_name,
struct t_hashtable *hashtable)
{
char *error;
const char *ptr_value;
int x, y;
struct t_gui_focus_info *focus_info;
struct t_hashtable *focus_hashtable, *ret_hashtable;
const char *ptr_value;
int x, y;
/* make C compiler happy */
(void) pointer;
@@ -298,17 +298,13 @@ gui_focus_info_hashtable_gui_focus_info_cb (const void *pointer, void *data,
ptr_value = hashtable_get (hashtable, "x");
if (!ptr_value)
return NULL;
error = NULL;
x = (int)strtol (ptr_value, &error, 10);
if (!error || error[0])
if (!util_parse_int (ptr_value, 10, &x))
return NULL;
ptr_value = hashtable_get (hashtable, "y");
if (!ptr_value)
return NULL;
error = NULL;
y = (int)strtol (ptr_value, &error, 10);
if (!error || error[0])
if (!util_parse_int (ptr_value, 10, &y))
return NULL;
/* get focus info */
+3 -7
View File
@@ -623,10 +623,8 @@ void
gui_hotlist_clear_level_string (struct t_gui_buffer *buffer,
const char *str_level_mask)
{
long level_mask;
char *error;
struct t_gui_hotlist *ptr_hotlist;
int priority;
int level_mask, priority;
if (str_level_mask)
{
@@ -665,11 +663,9 @@ gui_hotlist_clear_level_string (struct t_gui_buffer *buffer,
else
{
/* clear hotlist using a mask of levels */
error = NULL;
level_mask = strtol (str_level_mask, &error, 10);
if (error && !error[0] && (level_mask > 0))
if (util_parse_int (str_level_mask, 10, &level_mask) && (level_mask > 0))
{
gui_hotlist_clear ((int)level_mask);
gui_hotlist_clear (level_mask);
gui_hotlist_initial_buffer = buffer;
}
}
+4 -6
View File
@@ -44,6 +44,7 @@
#include "../core/core-log.h"
#include "../core/core-string.h"
#include "../core/core-utf8.h"
#include "../core/core-util.h"
#include "../plugins/plugin.h"
#include "gui-key.h"
#include "gui-bar.h"
@@ -193,8 +194,7 @@ gui_key_get_current_context (void)
void
gui_key_grab_init (int grab_command, const char *delay)
{
long milliseconds;
char *error;
int milliseconds;
gui_key_grab = 1;
gui_key_grab_count = 0;
@@ -203,9 +203,7 @@ gui_key_grab_init (int grab_command, const char *delay)
gui_key_grab_delay = CONFIG_INTEGER(config_look_key_grab_delay);
if (delay != NULL)
{
error = NULL;
milliseconds = strtol (delay, &error, 10);
if (error && !error[0] && (milliseconds >= 0))
if (util_parse_int (delay, 10, &milliseconds) && (milliseconds >= 0))
{
gui_key_grab_delay = milliseconds;
if (gui_key_grab_delay == 0)
@@ -1076,7 +1074,7 @@ gui_key_set_area_type_name (const char *area,
int *area_type, char **area_name)
{
int focus, length;
char *pos_end;
const char *pos_end;
for (focus = 0; focus < GUI_KEY_NUM_FOCUS; focus++)
{
+24 -28
View File
@@ -39,6 +39,7 @@
#include "../core/core-infolist.h"
#include "../core/core-log.h"
#include "../core/core-string.h"
#include "../core/core-util.h"
#include "../plugins/plugin.h"
#include "gui-line.h"
#include "gui-buffer.h"
@@ -1674,10 +1675,10 @@ gui_line_hook_update (struct t_gui_line *line,
const char *ptr_value, *ptr_value2;
struct t_gui_buffer *ptr_buffer;
unsigned long value_pointer;
long value;
char *error, *new_message, *pos_newline;
long long value_longlong;
char *new_message, *pos_newline;
int rc, tags_updated, notify_level_updated, highlight_updated;
int max_notify_level;
int max_notify_level, value;
tags_updated = 0;
notify_level_updated = 0;
@@ -1730,9 +1731,7 @@ gui_line_hook_update (struct t_gui_line *line,
ptr_value = hashtable_get (hashtable2, "y");
if (ptr_value)
{
error = NULL;
value = strtol (ptr_value, &error, 10);
if (error && !error[0] && (value >= 0))
if (util_parse_int (ptr_value, 10, &value) && (value >= 0))
line->data->y = value;
}
}
@@ -1740,9 +1739,8 @@ gui_line_hook_update (struct t_gui_line *line,
ptr_value2 = hashtable_get (hashtable2, "notify_level");
if (ptr_value2)
{
error = NULL;
value = strtol (ptr_value2, &error, 10);
if (error && !error[0] && (value >= -1) && (value <= GUI_HOTLIST_MAX))
if (util_parse_int (ptr_value2, 10, &value)
&& (value >= -1) && (value <= GUI_HOTLIST_MAX))
{
notify_level_updated = 1;
line->data->notify_level = value;
@@ -1752,9 +1750,7 @@ gui_line_hook_update (struct t_gui_line *line,
ptr_value2 = hashtable_get (hashtable2, "highlight");
if (ptr_value2)
{
error = NULL;
value = strtol (ptr_value2, &error, 10);
if (error && !error[0])
if (util_parse_int (ptr_value2, 10, &value))
{
highlight_updated = 1;
line->data->highlight = (value) ? 1 : 0;
@@ -1764,11 +1760,10 @@ gui_line_hook_update (struct t_gui_line *line,
ptr_value2 = hashtable_get (hashtable2, "date");
if (ptr_value2)
{
error = NULL;
value = strtol (ptr_value2, &error, 10);
if (error && !error[0] && (value >= 0))
if (util_parse_longlong (ptr_value2, 10, &value_longlong)
&& (value_longlong >= 0))
{
line->data->date = (time_t)value;
line->data->date = (time_t)value_longlong;
free (line->data->str_time);
line->data->str_time = gui_chat_get_time_string (
line->data->date,
@@ -1780,11 +1775,10 @@ gui_line_hook_update (struct t_gui_line *line,
ptr_value2 = hashtable_get (hashtable2, "date_usec");
if (ptr_value2)
{
error = NULL;
value = strtol (ptr_value2, &error, 10);
if (error && !error[0] && (value >= 0) && (value <= 999999))
if (util_parse_int (ptr_value2, 10, &value)
&& (value >= 0) && (value <= 999999))
{
line->data->date_usec = (int)value;
line->data->date_usec = value;
free (line->data->str_time);
line->data->str_time = gui_chat_get_time_string (
line->data->date,
@@ -1796,19 +1790,21 @@ gui_line_hook_update (struct t_gui_line *line,
ptr_value2 = hashtable_get (hashtable2, "date_printed");
if (ptr_value2)
{
error = NULL;
value = strtol (ptr_value2, &error, 10);
if (error && !error[0] && (value >= 0))
line->data->date_printed = (time_t)value;
if (util_parse_longlong (ptr_value2, 10, &value_longlong)
&& (value_longlong >= 0))
{
line->data->date_printed = (time_t)value_longlong;
}
}
ptr_value2 = hashtable_get (hashtable2, "date_usec_printed");
if (ptr_value2)
{
error = NULL;
value = strtol (ptr_value2, &error, 10);
if (error && !error[0] && (value >= 0) && (value <= 999999))
line->data->date_usec_printed = (int)value;
if (util_parse_int (ptr_value2, 10, &value)
&& (value >= 0) && (value <= 999999))
{
line->data->date_usec_printed = value;
}
}
ptr_value = hashtable_get (hashtable, "str_time");
+1
View File
@@ -31,5 +31,6 @@ extern void gui_main_end (int clean_exit);
/* terminal functions (GUI dependent) */
extern void gui_term_set_eat_newline_glitch (int value);
extern int gui_term_theme_is_light (void);
#endif /* WEECHAT_GUI_MAIN_H */
+9 -22
View File
@@ -44,6 +44,7 @@
#include "../core/core-log.h"
#include "../core/core-string.h"
#include "../core/core-utf8.h"
#include "../core/core-util.h"
#include "../plugins/plugin.h"
#include "gui-nicklist.h"
#include "gui-buffer.h"
@@ -275,7 +276,6 @@ gui_nicklist_search_group (struct t_gui_buffer *buffer,
const char *name)
{
const char *ptr_name;
char *error;
long long id;
if ((!buffer && !from_group)
@@ -287,8 +287,7 @@ gui_nicklist_search_group (struct t_gui_buffer *buffer,
if (strncmp (name, "==id:", 5) == 0)
{
id = strtoll (name + 5, &error, 10);
if (error && !error[0])
if (util_parse_longlong (name + 5, 10, &id))
return gui_nicklist_search_group_id (buffer, from_group, id);
}
@@ -570,7 +569,6 @@ gui_nicklist_search_nick (struct t_gui_buffer *buffer,
const char *name)
{
long long id;
char *error;
if ((!buffer && !from_group)
|| !name
@@ -581,8 +579,7 @@ gui_nicklist_search_nick (struct t_gui_buffer *buffer,
if (strncmp (name, "==id:", 5) == 0)
{
id = strtoll (name + 5, &error, 10);
if (error && !error[0])
if (util_parse_longlong (name + 5, 10, &id))
return gui_nicklist_search_nick_id (buffer, from_group, id);
}
@@ -1036,9 +1033,7 @@ gui_nicklist_group_set (struct t_gui_buffer *buffer,
const char *property, const char *value)
{
long long id;
long number;
char *error;
int group_changed;
int group_changed, number;
if (!buffer || !group || !property || !value)
return;
@@ -1047,8 +1042,7 @@ gui_nicklist_group_set (struct t_gui_buffer *buffer,
if (strcmp (property, "id") == 0)
{
id = strtoll (value, &error, 10);
if (error && !error[0]
if (util_parse_longlong (value, 10, &id)
&& (id != group->id)
&& !gui_nicklist_search_group_id (buffer, NULL, id))
{
@@ -1064,9 +1058,7 @@ gui_nicklist_group_set (struct t_gui_buffer *buffer,
}
else if (strcmp (property, "visible") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
group->visible = (number) ? 1 : 0;
group_changed = 1;
}
@@ -1158,9 +1150,7 @@ gui_nicklist_nick_set (struct t_gui_buffer *buffer,
const char *property, const char *value)
{
long long id;
long number;
char *error;
int nick_changed;
int nick_changed, number;
if (!buffer || !nick || !property || !value)
return;
@@ -1169,8 +1159,7 @@ gui_nicklist_nick_set (struct t_gui_buffer *buffer,
if (strcmp (property, "id") == 0)
{
id = strtoll (value, &error, 10);
if (error && !error[0]
if (util_parse_longlong (value, 10, &id)
&& (id != nick->id)
&& !gui_nicklist_search_nick_id (buffer, NULL, id))
{
@@ -1198,9 +1187,7 @@ gui_nicklist_nick_set (struct t_gui_buffer *buffer,
}
else if (strcmp (property, "visible") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
if (util_parse_int (value, 10, &number))
nick->visible = (number) ? 1 : 0;
nick_changed = 1;
}
+6 -10
View File
@@ -43,6 +43,7 @@
#include "../core/core-log.h"
#include "../core/core-string.h"
#include "../core/core-utf8.h"
#include "../core/core-util.h"
#include "../plugins/plugin.h"
#include "gui-window.h"
#include "gui-bar.h"
@@ -1182,7 +1183,7 @@ gui_window_scroll (struct t_gui_window *window, char *scroll)
int direction, stop, count_msg, scroll_from_end_free_buffer;
char time_letter, saved_char;
time_t old_date, diff_date;
char *pos, *error;
char *pos;
long number;
struct t_gui_line *ptr_line;
struct tm *date_tmp, line_date, old_line_date;
@@ -1231,9 +1232,7 @@ gui_window_scroll (struct t_gui_window *window, char *scroll)
time_letter = pos[0];
saved_char = pos[0];
pos[0] = '\0';
error = NULL;
number = strtol (scroll, &error, 10);
if (!error || error[0])
if (!util_parse_long (scroll, 10, &number))
number = 0;
pos[0] = saved_char;
}
@@ -1430,9 +1429,8 @@ gui_window_scroll (struct t_gui_window *window, char *scroll)
void
gui_window_scroll_horiz (struct t_gui_window *window, char *scroll)
{
int direction, percentage, start_col;
char saved_char, *pos, *error;
long number;
int direction, percentage, start_col, number;
char saved_char, *pos;
if (!window || !window->buffer->lines->first_line)
return;
@@ -1464,9 +1462,7 @@ gui_window_scroll_horiz (struct t_gui_window *window, char *scroll)
percentage = (pos[0] == '%') ? 1 : 0;
saved_char = pos[0];
pos[0] = '\0';
error = NULL;
number = strtol (scroll, &error, 10);
if (!error || error[0])
if (!util_parse_int (scroll, 10, &number))
number = 0;
pos[0] = saved_char;
}
+1
View File
@@ -27,6 +27,7 @@ add_library(buflist MODULE
buflist-config.c buflist-config.h
buflist-info.c buflist-info.h
buflist-mouse.c buflist-mouse.h
buflist-theme.c buflist-theme.h
)
set_target_properties(buflist PROPERTIES PREFIX "")
+15 -15
View File
@@ -645,7 +645,7 @@ buflist_config_init (void)
{
buflist_config_format_buffer = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"buffer", "string",
"buffer", "string|themable",
N_("format of each line with a buffer "
"(note: content is evaluated, see /help buflist); "
"example: standard format for bar item \"buflist\" and only the "
@@ -663,7 +663,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_buffer_current = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"buffer_current", "string",
"buffer_current", "string|themable",
N_("format for the line with current buffer "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${color:,17}${format_buffer}", NULL, 0,
@@ -672,7 +672,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_hotlist = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"hotlist", "string",
"hotlist", "string|themable",
N_("format for hotlist "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0,
@@ -683,7 +683,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_hotlist_level[3] = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"hotlist_highlight", "string",
"hotlist_highlight", "string|themable",
N_("format for a buffer with hotlist level \"highlight\" "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${color:magenta}", NULL, 0,
@@ -692,7 +692,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_hotlist_level[0] = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"hotlist_low", "string",
"hotlist_low", "string|themable",
N_("format for a buffer with hotlist level \"low\" "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${color:white}", NULL, 0,
@@ -701,7 +701,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_hotlist_level[1] = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"hotlist_message", "string",
"hotlist_message", "string|themable",
N_("format for a buffer with hotlist level \"message\" "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${color:brown}", NULL, 0,
@@ -710,7 +710,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_hotlist_level_none = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"hotlist_none", "string",
"hotlist_none", "string|themable",
N_("format for a buffer not in hotlist "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${color:default}", NULL, 0,
@@ -719,7 +719,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_hotlist_level[2] = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"hotlist_private", "string",
"hotlist_private", "string|themable",
N_("format for a buffer with hotlist level \"private\" "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${color:green}", NULL, 0,
@@ -728,7 +728,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_hotlist_separator = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"hotlist_separator", "string",
"hotlist_separator", "string|themable",
N_("separator for counts in hotlist "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${color:default},", NULL, 0,
@@ -737,7 +737,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_indent = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"indent", "string",
"indent", "string|themable",
N_("string displayed to indent channel, private and list buffers "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, " ", NULL, 0,
@@ -746,7 +746,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_lag = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"lag", "string",
"lag", "string|themable",
N_("format for lag on an IRC server buffer "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0,
@@ -757,7 +757,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_name = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"name", "string",
"name", "string|themable",
N_("format for buffer name "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${name}", NULL, 0,
@@ -766,7 +766,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_nick_prefix = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"nick_prefix", "string",
"nick_prefix", "string|themable",
N_("format for nick prefix on a channel "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0, "${color_nick_prefix}${nick_prefix}", NULL, 0,
@@ -775,7 +775,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_number = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"number", "string",
"number", "string|themable",
N_("format for buffer number, ${number} is the indented number "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0,
@@ -786,7 +786,7 @@ buflist_config_init (void)
NULL, NULL, NULL);
buflist_config_format_tls_version = weechat_config_new_option (
buflist_config_file, buflist_config_section_format,
"tls_version", "string",
"tls_version", "string|themable",
N_("format for TLS version on an IRC server buffer "
"(note: content is evaluated, see /help buflist)"),
NULL, 0, 0,
+8 -19
View File
@@ -40,9 +40,8 @@ struct t_hashtable *
buflist_focus_cb (const void *pointer, void *data, struct t_hashtable *info)
{
const char *ptr_bar_item_name, *ptr_bar_item_line, *keys, *ptr_value;
long item_line;
char *error, str_value[128], **list_keys;
int i, item_index, num_keys, type;
char str_value[128], **list_keys;
int i, item_index, item_line, num_keys, type;
struct t_gui_buffer *ptr_buffer;
/* make C compiler happy */
@@ -64,15 +63,10 @@ buflist_focus_cb (const void *pointer, void *data, struct t_hashtable *info)
ptr_bar_item_line = weechat_hashtable_get (info, "_bar_item_line");
if (!ptr_bar_item_line)
goto end;
error = NULL;
item_line = strtol (ptr_bar_item_line, &error, 10);
if (!error || error[0])
goto end;
if ((item_line < 0)
if (!weechat_util_parse_int (ptr_bar_item_line, 10, &item_line)
|| (item_line < 0)
|| (item_line >= weechat_arraylist_size (buflist_list_buffers[item_index])))
{
goto end;
}
/* check if buffer pointer is still valid */
ptr_buffer = weechat_arraylist_get (buflist_list_buffers[item_index],
@@ -333,10 +327,9 @@ buflist_hsignal_cb (const void *pointer, void *data, const char *signal,
const char *ptr_key, *ptr_pointer, *ptr_number, *ptr_number2;
const char *ptr_full_name;
struct t_gui_buffer *ptr_buffer;
char *error, str_command[1024];
long number, number2;
char str_command[1024];
unsigned long value;
int rc, current_buffer_number;
int rc, current_buffer_number, number, number2;
/* make C compiler happy */
(void) pointer;
@@ -360,13 +353,9 @@ buflist_hsignal_cb (const void *pointer, void *data, const char *signal,
return WEECHAT_RC_OK;
ptr_buffer = (struct t_gui_buffer *)value;
error = NULL;
number = strtol (ptr_number, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (ptr_number, 10, &number))
return WEECHAT_RC_OK;
error = NULL;
number2 = strtol (ptr_number2, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (ptr_number2, 10, &number2))
return WEECHAT_RC_OK;
current_buffer_number = weechat_buffer_get_integer (
+93
View File
@@ -0,0 +1,93 @@
/*
* SPDX-FileCopyrightText: 2026 Sébastien Helleu <flashcode@flashtux.org>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* This file is part of WeeChat, the extensible chat client.
*
* WeeChat is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* WeeChat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
*/
/* buflist contribution to built-in themes. */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stddef.h>
#include "../weechat-plugin.h"
#include "buflist.h"
#include "buflist-theme.h"
/*
* buflist contribution to the "light" theme: format strings tuned for
* a light-background terminal. Each row is { option_full_name, value };
* the table is NULL-terminated.
*/
const char *buflist_theme_light[][2] =
{
{ "buflist.format.buffer_current",
"${color:,117}${format_buffer}" },
{ "buflist.format.hotlist_low",
"${color:default}" },
{ "buflist.format.hotlist_message",
"${color:94}" },
{ "buflist.format.lag",
" ${color:green}[${color:94}${lag}${color:green}]" },
{ "buflist.format.number",
"${color:28}${number}${if:${number_displayed}?.: }" },
{ NULL, NULL },
};
/*
* Register buflist's contribution to one theme from a NULL-terminated
* table of {option, value} rows.
*/
void
buflist_theme_register (const char *name, const char *entries[][2])
{
struct t_hashtable *overrides;
int i;
if (!name || !entries)
return;
overrides = weechat_hashtable_new (32,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (!overrides)
return;
for (i = 0; entries[i][0]; i++)
weechat_hashtable_set (overrides, entries[i][0], entries[i][1]);
weechat_theme_register (name, overrides);
weechat_hashtable_free (overrides);
}
/*
* Register all built-in theme contributions from buflist.
*/
void
buflist_theme_init (void)
{
buflist_theme_register ("light", buflist_theme_light);
}
+27
View File
@@ -0,0 +1,27 @@
/*
* SPDX-FileCopyrightText: 2026 Sébastien Helleu <flashcode@flashtux.org>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* This file is part of WeeChat, the extensible chat client.
*
* WeeChat is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* WeeChat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WeeChat. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef WEECHAT_PLUGIN_BUFLIST_THEME_H
#define WEECHAT_PLUGIN_BUFLIST_THEME_H
extern void buflist_theme_init (void);
#endif /* WEECHAT_PLUGIN_BUFLIST_THEME_H */
+3
View File
@@ -34,6 +34,7 @@
#include "buflist-config.h"
#include "buflist-info.h"
#include "buflist-mouse.h"
#include "buflist-theme.h"
WEECHAT_PLUGIN_NAME(BUFLIST_PLUGIN_NAME);
@@ -455,6 +456,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
buflist_config_read ();
buflist_theme_init ();
if (!buflist_bar_item_init ())
return WEECHAT_RC_ERROR;

Some files were not shown because too many files have changed in this diff Show More