mirror of
https://github.com/weechat/weechat.git
synced 2026-06-12 14:14:48 +02:00
Compare commits
129 Commits
519ab4e7bb
...
theme
| Author | SHA1 | Date | |
|---|---|---|---|
| d4ed290a37 | |||
| a98568788b | |||
| 215fdfc0a7 | |||
| deedaed1f9 | |||
| fb220e1afd | |||
| afd7e08691 | |||
| 0fb0b3bb07 | |||
| ecec47c633 | |||
| 3f64975a72 | |||
| b970962bdb | |||
| d56e46908f | |||
| 8b19d3b0a4 | |||
| fcf439dfa0 | |||
| e4a2a6d3f2 | |||
| 7051d7e08b | |||
| 36d09a2ba6 | |||
| ee799c9032 | |||
| 797d3c0db2 | |||
| 91223591e9 | |||
| f50b91a6d9 | |||
| d2d490146c | |||
| f587a9dcaf | |||
| 54b0753aab | |||
| d189ca7f19 | |||
| 86d8bec433 | |||
| 53db79aa5f | |||
| b994a645e3 | |||
| 64f17761f1 | |||
| 3bdb31bbf6 | |||
| 7f1f9462f4 | |||
| 9fbc81dc54 | |||
| 4550c3e33a | |||
| 7e2b9ffa9a | |||
| 04f817814f | |||
| 0315c53a9e | |||
| 3aeaa70e64 | |||
| 66e633e27e | |||
| 436bbeceff | |||
| c307087e2d | |||
| 51a1149852 | |||
| d74993a42c | |||
| 51464e400f | |||
| 1c5e6c3fc2 | |||
| e563dfc903 | |||
| befbcceb7f | |||
| 56f9ad68fb | |||
| 328f86affc | |||
| f4dc30ec58 | |||
| 23291acb7b | |||
| b802681230 | |||
| 3687ce0f0f | |||
| 1211510ded | |||
| 07871f123f | |||
| a0cf82d4a6 | |||
| 13291b6b9a | |||
| 76d652a513 | |||
| ff9b698665 | |||
| d5c985eb11 | |||
| b29f464322 | |||
| 171a9a9fc4 | |||
| d7bc041098 | |||
| 43a118ac47 | |||
| e540d7a2cf | |||
| 6948aea626 | |||
| 5dbb96b66a | |||
| 4fdcbf8f93 | |||
| e4b70ad252 | |||
| d7fd2b7b0b | |||
| 73cf57742e | |||
| bf7b8484cd | |||
| 86f51b66b3 | |||
| 1400b6c197 | |||
| c71978c0b3 | |||
| 4c38ce050b | |||
| 5520ed1950 | |||
| ad35aef1f4 | |||
| 88f0070674 | |||
| 7683287f71 | |||
| 33adaef85c | |||
| 6f3c804379 | |||
| 617b4e4dee | |||
| ea1eb76b2d | |||
| ad12925d6c | |||
| a5fcf898b9 | |||
| 14d544be39 | |||
| 3e994996c6 | |||
| 3341b9a2d2 | |||
| 815640b840 | |||
| acd3d91318 | |||
| ef5f4d8ee6 | |||
| d40217d1e6 | |||
| 17b593325a | |||
| 3456e848da | |||
| 723232ac35 | |||
| 5f5f9f35e7 | |||
| 86a6c4f5ff | |||
| 3082c2e4e5 | |||
| 062109e33d | |||
| fd88c9a45b | |||
| a8c4d5604e | |||
| ef4c657157 | |||
| 0c29e5a630 | |||
| 77a0dbfd44 | |||
| afa42ec851 | |||
| 8da86431da | |||
| 3d7f988973 | |||
| 5ed21d7dad | |||
| 54eff44d74 | |||
| 83d760deae | |||
| 5147b19e51 | |||
| 50959eeb01 | |||
| ac2ed69c0b | |||
| 2f7f707df0 | |||
| 94e5de4836 | |||
| 38f9a5587f | |||
| 6432711798 | |||
| 81c23a5134 | |||
| 6336c22293 | |||
| 6658122b03 | |||
| 7e8f8b5178 | |||
| d00e334738 | |||
| f48b0bae2e | |||
| d3d18cd4c2 | |||
| cead39b52f | |||
| 7d88e53182 | |||
| 8fe741e057 | |||
| b6ef936cca | |||
| 7c2bae9faf | |||
| 2b48eba784 |
@@ -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
|
||||
@@ -131,7 +131,7 @@ jobs:
|
||||
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
|
||||
cargo install --version 0.0.11 poexam
|
||||
|
||||
- name: Check gettext files (msgcheck)
|
||||
run: msgcheck po/*.po
|
||||
@@ -253,6 +253,52 @@ jobs:
|
||||
lcov --list coverage.info
|
||||
bash <(curl -s https://codecov.io/bash) -f coverage.info || echo 'Codecov error'
|
||||
|
||||
install_fedora:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
os:
|
||||
- ubuntu-24.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:
|
||||
@@ -280,9 +326,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:
|
||||
|
||||
@@ -573,6 +573,7 @@ users
|
||||
usr
|
||||
util
|
||||
valer
|
||||
valgrind
|
||||
verbose
|
||||
verify
|
||||
versiongit
|
||||
|
||||
@@ -7,9 +7,15 @@ select = [
|
||||
"checks",
|
||||
]
|
||||
ignore = [
|
||||
"acronyms",
|
||||
"brackets",
|
||||
"double-quotes",
|
||||
"double-words",
|
||||
"functions",
|
||||
"html-tags",
|
||||
"paths",
|
||||
"unchanged",
|
||||
"urls",
|
||||
]
|
||||
path_words = "."
|
||||
langs = [
|
||||
|
||||
@@ -6,6 +6,65 @@ 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)
|
||||
- relay/api: add field "last_read_line_id" in GET /api/buffers
|
||||
|
||||
### Added
|
||||
|
||||
- core: add `/theme` command with subcommands `list`, `apply`, `reset`, `save`, `rename`, `delete`, `info`, automatic backup of current themable options before apply, and built-in "light" theme
|
||||
- core: detect terminal background on first start and automatically apply the built-in "light" theme when a light terminal is detected
|
||||
- core: add `themable` flag on configuration options (auto-set for color options; explicit opt-in for string options containing `${color:...}` references via the `type|themable` syntax)
|
||||
- core: add option weechat.look.theme (informational, set by `/theme apply`)
|
||||
- core: add option weechat.look.theme_backup (boolean, default `on`)
|
||||
- api: add function `theme_register` (available to plugins and to all script languages)
|
||||
- fset: add filter `t:themable` (matches every themable option regardless of type)
|
||||
- relay: add option relay.network.unix_socket_permissions ([#2317](https://github.com/weechat/weechat/issues/2317))
|
||||
|
||||
### 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))
|
||||
- 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
|
||||
- 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 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))
|
||||
- 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))
|
||||
- relay: fix out-of-bounds read in dump of data ([#2324](https://github.com/weechat/weechat/issues/2324))
|
||||
- api, relay: fix timing attack on TOTP validation ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc))
|
||||
- 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.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))
|
||||
- relay: fix timing attack on password authentication ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc))
|
||||
- api, relay: fix timing attack on TOTP validation ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc))
|
||||
|
||||
## Version 4.9.0 (2026-03-29)
|
||||
|
||||
### Changed
|
||||
|
||||
+2
-1
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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,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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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
@@ -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 delete 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
|
||||
|
||||
|
||||
@@ -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 {
|
||||
@@ -9627,6 +9627,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
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
----
|
||||
|
||||
|
||||
+146
-1
@@ -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 delete 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
|
||||
|
||||
|
||||
@@ -9771,6 +9771,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
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
----
|
||||
|
||||
|
||||
+161
-1
@@ -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 delete 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
|
||||
|
||||
|
||||
@@ -9967,6 +9967,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
@@ -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 delete 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
|
||||
|
||||
|
||||
@@ -9746,6 +9746,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
@@ -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 delete 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
@@ -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 delete 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
|
||||
|
||||
|
||||
@@ -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 | Израчунавање резултата израза.
|
||||
|
||||
@@ -9436,6 +9436,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]]
|
||||
=== Тастерске пречице
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
----
|
||||
|
||||
|
||||
+147
-1
@@ -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 delete 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
|
||||
|
||||
|
||||
@@ -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-05-30 14:00+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 ""
|
||||
@@ -1178,6 +1178,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"
|
||||
|
||||
@@ -11806,8 +11816,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 +12047,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 +13245,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 +15096,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 +15108,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 +15142,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 +15256,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 +15395,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 +15443,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 +15679,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, "
|
||||
|
||||
@@ -23,21 +23,22 @@
|
||||
#
|
||||
#
|
||||
# w8rabbit <w8rabbit@mail.i2p>, 2018.
|
||||
# Nils Görs <weechatter@arcor.de>, 2022-2023.
|
||||
# Nils Görs <>, 2022-2026.
|
||||
#
|
||||
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-05-30 14:00+0200\n"
|
||||
"PO-Revision-Date: 2026-05-30 14:01+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 - Germany <weechat-dev@nongnu.org>\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 +182,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:"
|
||||
@@ -1170,6 +1171,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 +1290,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 +3325,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 +3640,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 +3939,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 $"
|
||||
@@ -11181,9 +11188,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 +11693,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 +13126,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 +13353,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 +14588,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 +16452,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 +16524,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 +16538,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 +16664,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 +16798,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 +16842,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 +17082,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 +17351,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 +17382,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"
|
||||
|
||||
@@ -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-05-30 14:00+0200\n"
|
||||
"PO-Revision-Date: 2026-05-30 14:01+0200\n"
|
||||
"Last-Translator: Santiago Forero <santiago@forero.xyz>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
"Language-Team: Spanish - Spain <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 ""
|
||||
@@ -1222,6 +1222,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"
|
||||
|
||||
@@ -12081,8 +12091,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 +12334,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 +13536,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 +15400,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 +15412,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 +15448,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 +15567,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 +15690,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 +15730,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 +15979,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 ""
|
||||
|
||||
|
||||
@@ -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-05-30 14:00+0200\n"
|
||||
"PO-Revision-Date: 2026-05-30 14:01+0200\n"
|
||||
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
"Language-Team: French - France <weechat-dev@nongnu.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
|
||||
@@ -1155,6 +1155,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 +1513,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 +1780,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 +3017,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 +3066,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 +3515,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 :"
|
||||
@@ -4100,7 +4114,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 "
|
||||
@@ -7059,7 +7074,8 @@ 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.\n"
|
||||
"Toutes les documentations sont disponibles ici : https://weechat.org/doc/\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"
|
||||
@@ -8007,7 +8023,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"
|
||||
|
||||
@@ -11184,7 +11200,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 +12873,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 +13098,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 +14311,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 +14322,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 +15347,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 +16151,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 +16220,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 +16357,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 +16491,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 +16535,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 +16772,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"
|
||||
@@ -17776,7 +17805,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)"
|
||||
|
||||
@@ -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-05-30 14:00+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"
|
||||
@@ -1158,6 +1158,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"
|
||||
@@ -11281,7 +11291,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 +11525,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 +12644,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 +14401,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 +14448,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 +14554,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 +14675,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 +14715,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 +14958,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 ""
|
||||
|
||||
|
||||
@@ -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-05-30 14:00+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 ""
|
||||
@@ -1174,6 +1174,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"
|
||||
|
||||
@@ -12120,8 +12130,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 +12371,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 +13562,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 +15453,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 +15466,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 +15502,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 +15629,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 +15770,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 +15810,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 +16060,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 ""
|
||||
|
||||
|
||||
@@ -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-05-30 14:00+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 "使い方:"
|
||||
@@ -1184,6 +1183,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 "バーの管理"
|
||||
|
||||
@@ -12575,8 +12584,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 +12820,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 +14037,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 +15960,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 +16022,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 +16163,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 +16310,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 +16351,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 +16596,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=インス"
|
||||
|
||||
@@ -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-21 17:26+0100\n"
|
||||
"POT-Creation-Date: 2026-05-30 14:00+0200\n"
|
||||
"PO-Revision-Date: 2026-05-30 14:02+0200\n"
|
||||
"Last-Translator: Krzysztof Korościk <soltys@soltys.info>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
"Language-Team: Polish <weechat-dev@nongnu.org>\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -166,10 +166,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:"
|
||||
@@ -1148,6 +1148,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"
|
||||
|
||||
@@ -12466,8 +12481,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 +12701,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 +13897,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 +15717,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 +15741,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 +15800,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 +15813,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 +15933,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 +16072,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 +16117,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 +16350,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 "
|
||||
|
||||
@@ -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-05-30 14:00+0200\n"
|
||||
"PO-Revision-Date: 2026-05-30 14:02+0200\n"
|
||||
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
|
||||
"Language-Team: Portuguese <>\n"
|
||||
"Language-Team: Portuguese - Portugal <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:"
|
||||
@@ -1190,6 +1190,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"
|
||||
|
||||
@@ -12495,8 +12505,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 +12749,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 +13954,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 +15844,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 +15857,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 +15893,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 +16021,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 +16170,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 +16214,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 +16459,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, "
|
||||
|
||||
+42
-23
@@ -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-05-30 14:00+0200\n"
|
||||
"PO-Revision-Date: 2026-05-30 14:02+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:"
|
||||
@@ -1201,6 +1201,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"
|
||||
|
||||
@@ -11644,8 +11654,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 +11891,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 +13056,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 +14888,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 +14901,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 +14937,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 +15060,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 +15180,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 +15220,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 +15464,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 ""
|
||||
|
||||
|
||||
@@ -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-05-30 14:00+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"
|
||||
@@ -1179,6 +1179,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 "управление буферами"
|
||||
@@ -11327,7 +11337,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 +11571,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 +12696,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 +14452,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 +14499,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 +14603,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 +14725,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 +14767,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 +15011,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 ""
|
||||
|
||||
|
||||
@@ -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-05-30 14:00+0200\n"
|
||||
"PO-Revision-Date: 2026-05-30 14:02+0200\n"
|
||||
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
"Language-Team: Serbian <weechat-dev@nongnu.org>\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 "Употреба:"
|
||||
@@ -1138,6 +1138,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 +1254,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 +1789,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 +1806,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 +3464,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:"
|
||||
@@ -4048,10 +4051,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)"
|
||||
@@ -11906,7 +11907,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 +11917,8 @@ msgstr ""
|
||||
"листа поља за сортирање канала раздвојених запетама (погледајте /help list "
|
||||
"за листу поља); карактер „-” може да се користи испред поља чиме се обрће "
|
||||
"редослед, карактер „~” може да се употреби за поређење које не прави разлику "
|
||||
"у величини слова; пример: „-users,~name2” за поређење које не прави разлику "
|
||||
"у величини слова и обрнуто сортирање по имену опције"
|
||||
"у величини слова; пример: „-users,~name2” најпре за највеће канале, па онда "
|
||||
"сортирање које не прави разлику у величини слова по имену канала без префикса"
|
||||
|
||||
msgid "strip channel topic colors in /list buffer"
|
||||
msgstr "уклањање боја теме канала у /list баферу"
|
||||
@@ -12446,8 +12446,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 "
|
||||
@@ -12664,10 +12664,13 @@ msgstr "%s%s: нисте повезани са сервером"
|
||||
msgid "%s%s: this buffer is not a channel!"
|
||||
msgstr "%s%s: овај бафер није канал!"
|
||||
|
||||
#, 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 канала (укупно: %d) | Филтер: %s | Сортирање: %s | Тастер(унос): ctrl+j= "
|
||||
"приступ каналу, ($)=освежавање, (q)=затварање бафера"
|
||||
@@ -13867,7 +13870,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 +13880,9 @@ msgstr ""
|
||||
"текућем фајлу се поставља екстензија .1; дозвољава се цели број са суфиксом: "
|
||||
"b = бајтова (подразумевано ако се не наведе јединица), k = килобајта, m = "
|
||||
"мегабајта, g = гигабајта, t = терабајта; пример: „2g” значи да се ротација "
|
||||
"врши ако је величина фајла > 2,000,000,000 бајтова; ако се постави на „0”, "
|
||||
"ротација се не врши (нема ограничења лог фајла); УПОЗОРЕЊЕ: пре него што "
|
||||
"промените ову опцију, требало би најпре да поставите тип компресије опцијом "
|
||||
"врши ако је величина фајла > 2 GB; ако се постави на „0”, ротација се не "
|
||||
"врши (нема ограничења лог фајла); УПОЗОРЕЊЕ: пре него што промените ову "
|
||||
"опцију, требало би најпре да поставите тип компресије опцијом "
|
||||
"logger.file.rotation_compression_type"
|
||||
|
||||
msgid ""
|
||||
@@ -15676,13 +15679,21 @@ msgstr ""
|
||||
"relay.network.allow_empty_password) (напомена: садржај се израчунава, "
|
||||
"погледајте /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 ""
|
||||
"листа хеш алгоритама раздвојених запетама који се користе за аутентификацију "
|
||||
"лозинке у weechat протоколу, могу бити: „plain” (лозинка је чисти текст, не "
|
||||
@@ -15691,11 +15702,17 @@ msgstr ""
|
||||
"спречава употреба тог алгоритма, у именима је дозвољена употреба џокера „*” "
|
||||
"(примери: „*”, „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 ""
|
||||
"број итерација који се захтева од клијента у weechat протоколу када се за "
|
||||
"аутентификацију користи лозинка хеширана PBKDF2 алгоритмом ; више итерација "
|
||||
@@ -15744,6 +15761,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 +15893,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 +16030,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 +16074,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 "повезивање"
|
||||
@@ -16274,11 +16303,16 @@ msgstr "(ништа)"
|
||||
msgid "Alt+key/input: v=back to list d=jump to diff"
|
||||
msgstr "Alt+тастер/унос: v=назад на листу d=скок на 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 скрипти (филтер: %s) | Сортирање: %s | Alt+тастер/унос: i=инсталација, "
|
||||
@@ -17701,6 +17735,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 +17871,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 "
|
||||
|
||||
@@ -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-24 23:00+0100\n"
|
||||
"POT-Creation-Date: 2026-05-30 14:00+0200\n"
|
||||
"PO-Revision-Date: 2026-05-30 14:02+0200\n"
|
||||
"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
|
||||
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
|
||||
"Language-Team: Turkish <weechat-dev@nongnu.org>\n"
|
||||
"Language: tr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -85,8 +85,9 @@ msgstr "-P, --plugins <eklenti>"
|
||||
|
||||
#. TRANSLATORS: command line option "-P", "--plugins <plugins>"
|
||||
msgid "load only these plugins at startup (see /help weechat.plugin.autoload)"
|
||||
msgstr "başlangıçta yalnızca bu üç eklentiyi yükle "
|
||||
"(bkz. /help weechat.plugin.autoload)"
|
||||
msgstr ""
|
||||
"başlangıçta yalnızca bu üç eklentiyi yükle (bkz. /help "
|
||||
"weechat.plugin.autoload)"
|
||||
|
||||
#. TRANSLATORS: only "<cmd>" may be translated (please keep it short)
|
||||
msgid "-r, --run-command <cmd>"
|
||||
@@ -162,10 +163,10 @@ msgstr "gcrypt başlat/sonlandır devre dışı bırak"
|
||||
#, 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 Telif hakkı %s, %s %s tarihinde derlendi\n"
|
||||
"Geliştirici: Sébastien Helleu <flashcode@flashtux.org> - %s"
|
||||
"Geliştirici: %s <%s> - %s"
|
||||
|
||||
msgid "Usage:"
|
||||
msgstr "Kullanım:"
|
||||
@@ -1128,6 +1129,21 @@ msgid ""
|
||||
msgstr ""
|
||||
"ileti: Uzakta durumu iletisi (eğer bir ileti verilmezse durum kaldırılır)"
|
||||
|
||||
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:ad}: Renk adı (bkz. \"Eklenti API başvurusu\", \"color\" işlevi)"
|
||||
|
||||
msgid "manage bars"
|
||||
msgstr "çubukları yönet"
|
||||
|
||||
@@ -1771,8 +1787,7 @@ msgid ""
|
||||
"[-n|-s] [-e] [-d] <expression> || [-n] [-d [-d]] -c <expression1> <operator> "
|
||||
"<expression2>"
|
||||
msgstr ""
|
||||
"[-n|-s] [-e] [-d] <ifade> || [-n] [-d [-d]] -c <ifade1> <işleç> "
|
||||
"<ifade2>"
|
||||
"[-n|-s] [-e] [-d] <ifade> || [-n] [-d [-d]] -c <ifade1> <işleç> <ifade2>"
|
||||
|
||||
msgid "raw[-n]: display result without sending it to buffer (debug mode)"
|
||||
msgstr "raw[-n]: Arabelleğe göndermeden sonucu görüntüle (hata ayıklama kipi)"
|
||||
@@ -2396,7 +2411,8 @@ msgstr "-list|-listfull [<eklenti>...] || <komut> || <seçenek>"
|
||||
msgid ""
|
||||
"raw[-list]: list commands, by plugin (without argument, this list is "
|
||||
"displayed)"
|
||||
msgstr "raw[-list]: Eklentiye göre komutları listele (argümansız bu liste "
|
||||
msgstr ""
|
||||
"raw[-list]: Eklentiye göre komutları listele (argümansız bu liste "
|
||||
"görüntülenir)"
|
||||
|
||||
msgid "raw[-listfull]: list commands with description, by plugin"
|
||||
@@ -2450,8 +2466,8 @@ msgid ""
|
||||
"clear only highest level in hotlist, or level mask: integer which is a "
|
||||
"combination of 1=join/part, 2=message, 4=private, 8=highlight"
|
||||
msgstr ""
|
||||
"düzey: Sıcak listede yalnızca en düşük düzeyi temizlemek için \"lowest\", "
|
||||
"en yüksek düzey için \"highest\" veya düzey maskesi olarak tamsayı; şunların "
|
||||
"düzey: Sıcak listede yalnızca en düşük düzeyi temizlemek için \"lowest\", en "
|
||||
"yüksek düzey için \"highest\" veya düzey maskesi olarak tamsayı; şunların "
|
||||
"bir kombinasyonudur: 1=katıl/ayrıl, 2=ileti, 4=özel, 8=vurgula"
|
||||
|
||||
msgid "raw[remove]: remove current buffer from hotlist"
|
||||
@@ -2542,13 +2558,11 @@ msgstr "> raw[delete_next_word]: Sonraki sözcüğü sil"
|
||||
|
||||
msgid ""
|
||||
"> raw[delete_beginning_of_line]: delete from beginning of line until cursor"
|
||||
msgstr ""
|
||||
"> raw[delete_beginning_of_line]: Satırın başından imlece kadar sil"
|
||||
msgstr "> raw[delete_beginning_of_line]: Satırın başından imlece kadar sil"
|
||||
|
||||
msgid ""
|
||||
"> raw[delete_beginning_of_input]: delete from beginning of input until cursor"
|
||||
msgstr ""
|
||||
"> raw[delete_beginning_of_input]: Girişin başından imlece kadar sil"
|
||||
msgstr "> raw[delete_beginning_of_input]: Girişin başından imlece kadar sil"
|
||||
|
||||
msgid "> raw[delete_end_of_line]: delete from cursor until end of line"
|
||||
msgstr "> raw[delete_end_of_line]: İmleçten satırın sonuna kadar sil"
|
||||
@@ -2654,8 +2668,8 @@ msgid ""
|
||||
"> raw[insert]: insert text in command line (escaped chars are allowed, see /"
|
||||
"help print)"
|
||||
msgstr ""
|
||||
"> raw[insert]: Komut satırına metin gir (kaçırılan karakterlere izin verilir; "
|
||||
"bkz. /help print)"
|
||||
"> raw[insert]: Komut satırına metin gir (kaçırılan karakterlere izin "
|
||||
"verilir; bkz. /help print)"
|
||||
|
||||
msgid "> raw[send]: send text to the buffer"
|
||||
msgstr "> raw [send]: Arabelleğe metin gönder"
|
||||
@@ -2713,7 +2727,8 @@ msgstr ""
|
||||
msgid ""
|
||||
"raw[recreate]: set input with the command used to edit the custom bar item"
|
||||
msgstr ""
|
||||
"raw[recreate]: Özel çubuk ögesini düzenlemede kullanılan komutla girişi ayarla"
|
||||
"raw[recreate]: Özel çubuk ögesini düzenlemede kullanılan komutla girişi "
|
||||
"ayarla"
|
||||
|
||||
msgid "raw[del]: delete custom bar items"
|
||||
msgstr "raw[del]: Özel çubuk ögesini sil"
|
||||
@@ -3308,16 +3323,12 @@ msgstr ""
|
||||
msgid "raw[set]: set a value for a proxy property"
|
||||
msgstr ""
|
||||
|
||||
#, 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.proxy."
|
||||
"<proxy_name>.*)"
|
||||
msgstr ""
|
||||
"seçenek: değiştirilecek seçenek (seçenekler listesi için /set "
|
||||
"weechat.bar<çubukadı>.* komutunu çalıştırın)"
|
||||
"seçenek: değiştirilecek seçenek (seçenekler listesi için /set weechat.proxy."
|
||||
"<vekil_adı>.* bölümüne bakın)"
|
||||
|
||||
msgid " add a http proxy, running on local host, port 8888:"
|
||||
msgstr ""
|
||||
@@ -4194,18 +4205,14 @@ msgstr ""
|
||||
msgid "names of filters"
|
||||
msgstr "süzgeçlerin adları"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "names of filters"
|
||||
msgid "names of disabled filters"
|
||||
msgstr "süzgeçlerin adları"
|
||||
msgstr "devre dışı bırakılmış süzgeçlerin adları"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "names of filters"
|
||||
msgid "names of enabled filters"
|
||||
msgstr "süzgeçlerin adları"
|
||||
msgstr "etkinleştirilmiş süzgeçlerin adları"
|
||||
|
||||
msgid "hook types"
|
||||
msgstr ""
|
||||
msgstr "kanca türleri"
|
||||
|
||||
msgid ""
|
||||
"commands (weechat and plugins); optional argument: prefix to add before the "
|
||||
@@ -6012,12 +6019,10 @@ msgstr "ONULMAZ: Yapılandırma seçenekleri ilklendirilirken hata"
|
||||
#. TRANSLATORS: "%s %s" after "compiled on" is date and time
|
||||
#, c-format
|
||||
msgid "WeeChat %s, compiled on %s %s\n"
|
||||
msgstr ""
|
||||
msgstr "WeeChat %s, derlenme: %s %s\n"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "(old options?)"
|
||||
msgid "Build options:\n"
|
||||
msgstr "(eski seçenekler?)"
|
||||
msgstr "Yapı seçenekleri:\n"
|
||||
|
||||
msgid "Windows tree:"
|
||||
msgstr "Pencereler ağacı:"
|
||||
@@ -6029,12 +6034,10 @@ msgid "Memory usage not available (function \"mallinfo\" not found)"
|
||||
msgstr "Bellek kullanımı mevcut değil (\"mallinfo\" işlevi bulunamadı)"
|
||||
|
||||
msgid "not initialized"
|
||||
msgstr ""
|
||||
msgstr "ilklendirilmedi"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "no variable"
|
||||
msgid "not available"
|
||||
msgstr "değişken yok"
|
||||
msgstr "kullanılamıyor"
|
||||
|
||||
msgid "TEMPORARY, deleted on exit"
|
||||
msgstr "GEÇİCİ, çıkışta silinir"
|
||||
@@ -6143,13 +6146,13 @@ msgid "Constants"
|
||||
msgstr "Sabitler"
|
||||
|
||||
msgid "Rank"
|
||||
msgstr ""
|
||||
msgstr "Derece"
|
||||
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
msgstr "Öncelik"
|
||||
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
msgstr "Dosya"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "Constants"
|
||||
@@ -6308,10 +6311,8 @@ msgstr ""
|
||||
"(parolayı atlamak için boşluk düğmesine bir kez basın; ancak bu tüm güvenli "
|
||||
"veriyi DEVRE DIŞI bırakacaktır!)"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "(press ctrl-C to exit WeeChat now)"
|
||||
msgid "(press ctrl-c to exit WeeChat now)"
|
||||
msgstr "(WeeChat'ten şimdi çıkmak için ctrl-C düğmesine basın)"
|
||||
msgstr "(WeeChat'ten şimdi çıkmak için ctrl-c yapın)"
|
||||
|
||||
msgid ""
|
||||
"To recover your secured data, you can use /secure decrypt (see /help secure)"
|
||||
@@ -6368,10 +6369,9 @@ msgid ""
|
||||
"version is too old?)"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%sError encrypting data \"%s\" (%d)"
|
||||
#, c-format
|
||||
msgid "%sFailed to encrypt data \"%s\" (%d)"
|
||||
msgstr "%s\"%s\" verisi şifrelenirken hata (%d)"
|
||||
msgstr "%s\"%s\" verisi şifrelenemedi (%d)"
|
||||
|
||||
msgid ""
|
||||
"cipher used to crypt data (the number after algorithm is the size of the key "
|
||||
@@ -6451,25 +6451,19 @@ msgid "%sUnknown resource limit \"%s\" (see /help weechat.startup.sys_rlimit)"
|
||||
msgstr ""
|
||||
"%sBilinmeyen kaynak limiti \"%s\" (bkz. /help weechat.startup.sys_rlimit)"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "Memory usage (see \"man mallinfo\" for help):"
|
||||
msgid "Resource limits (see \"man getrlimit\" for help):"
|
||||
msgstr "Bellek kullanımı (yardım için bkz. \"man mallinfo\"):"
|
||||
msgstr "Özkaynak sınırları (yardım için bkz. \"man getrlimit\"):"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%sUnable to set resource limit \"%s\" to %s: error %d %s"
|
||||
#, c-format
|
||||
msgid "%sUnable to get resource limit \"%s\": error %d %s"
|
||||
msgstr "%sKaynak limiti \"%s\", %s olarak ayarlanamadı: Hata %d %s"
|
||||
msgstr "%sÖzkaynak sınırı \"%s\" alınamıyor: Hata %d %s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: error: dictionary \"%s\" is not available on your system"
|
||||
#, c-format
|
||||
msgid "System function \"%s\" is not available"
|
||||
msgstr "%s: Hata: \"%s\" sözlüğü sisteminizde yok"
|
||||
msgstr "Sistem işlevi \"%s\" kullanılabilir değil"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "Memory usage (see \"man mallinfo\" for help):"
|
||||
msgid "Resource usage (see \"man getrusage\" for help):"
|
||||
msgstr "Bellek kullanımı (yardım için bkz. \"man mallinfo\"):"
|
||||
msgstr "Özkaynak kullanımı (yardım için bkz. \"man getrusage\"):"
|
||||
|
||||
#, c-format
|
||||
msgid "%sError upgrading WeeChat with file \"%s\":"
|
||||
@@ -6550,95 +6544,84 @@ msgid "Upgrade done (%.02fs)"
|
||||
msgstr "Yükseltme bitti (%.02fs)"
|
||||
|
||||
msgid "invalid URL"
|
||||
msgstr ""
|
||||
msgstr "geçersiz URL"
|
||||
|
||||
msgid "not enough memory"
|
||||
msgstr "yetersiz bellek"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%sFilter \"%s\" not found"
|
||||
#, c-format
|
||||
msgid "file \"%s\" not found"
|
||||
msgstr "%s\"%s\" süzgeci bulunamadı"
|
||||
msgstr "\"%s\" dosyası bulunamadı"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%sCannot create file \"%s\""
|
||||
#, c-format
|
||||
msgid "cannot write file \"%s\""
|
||||
msgstr "%s\"%s\" dosyası oluşturulamıyor"
|
||||
msgstr "\"%s\" dosyası yazılamıyor"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "fork error"
|
||||
msgid "transfer error"
|
||||
msgstr "çatal hatası"
|
||||
msgstr "aktarım hatası"
|
||||
|
||||
#, c-format
|
||||
msgid "curl error %d (%s) (URL: \"%s\")\n"
|
||||
msgstr "curl hatası %d (%s) (URL: \"%s\")\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "curl error %d (%s) (URL: \"%s\")\n"
|
||||
#, c-format
|
||||
msgid "transfer stopped (URL: \"%s\")\n"
|
||||
msgstr "curl hatası %d (%s) (URL: \"%s\")\n"
|
||||
msgstr "aktarım durduruldu (URL: \"%s\")\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "End of command '%s', timeout reached (%.1fs)"
|
||||
#, c-format
|
||||
msgid "transfer timeout reached (%.3fs) (URL: \"%s\")\n"
|
||||
msgstr "'%s' komutu sonu, zaman aşımına ulaşıldı (%.1fs)"
|
||||
msgstr "aktarım zaman aşımına ulaşıldı (%.3fs) (URL: \"%s\")\n"
|
||||
|
||||
#, c-format
|
||||
msgid "%sAnother command \"%s\" already exists for plugin \"%s\""
|
||||
msgstr "%sŞu eklenti için başka bir komut (\"%s\") halihazırda var: \"%s\""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%sUnknown command \"%s\" (type /help for help)"
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%sUnknown command \"%s\" (commands are case-sensitive, type /help for help), "
|
||||
"commands with similar name: %s"
|
||||
msgstr "%s Bilinmeyen komut \"%s\" (yardım için /help yazın)"
|
||||
msgstr ""
|
||||
"%sBilinmeyen komut \"%s\" (komutlar BÜYÜK/küçük harf duyarlıdır; yardım "
|
||||
"için /help yazın); benzer adlı komutlar: %s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%sUnknown command \"%s\" (type /help for help)"
|
||||
#, c-format
|
||||
msgid ""
|
||||
"%sUnknown command \"%s\" (type /help for help), commands with similar name: "
|
||||
"%s"
|
||||
msgstr "%s Bilinmeyen komut \"%s\" (yardım için /help yazın)"
|
||||
msgstr ""
|
||||
"%sBilinmeyen komut \"%s\" (yardım için /help yazın); benzer adlı komutlar: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "%sBad file descriptor (%d) used in hook_fd"
|
||||
msgstr "%sHatalı dosya açıklayıcısı (%d) hook_fd içinde kullanılmış"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "End of command '%s', timeout reached (%.1fs)"
|
||||
#, c-format
|
||||
msgid "End of command '%s', timeout reached (%.3fs)"
|
||||
msgstr "'%s' komutu sonu, zaman aşımına ulaşıldı (%.1fs)"
|
||||
msgstr "\"%s\" komutunun sonu; zaman aşımına ulaşıldı (%.3fs)"
|
||||
|
||||
#, c-format
|
||||
msgid "System clock skew detected (%+ld seconds), reinitializing all timers"
|
||||
msgstr ""
|
||||
"Sistem saati hatalı (%+ld saniye), tüm zamanlayıcılar yeniden başlatılıyor"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "curl error %d (%s) (URL: \"%s\")\n"
|
||||
#, c-format
|
||||
msgid "%sURL transfer error: %s (URL: \"%s\")"
|
||||
msgstr "curl hatası %d (%s) (URL: \"%s\")\n"
|
||||
msgstr "%sURL aktarım hatası: %s (URL: \"%s\")"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "End of command '%s', timeout reached (%.1fs)"
|
||||
#, c-format
|
||||
msgid "End of URL transfer '%s', timeout reached (%.3fs)"
|
||||
msgstr "'%s' komutu sonu, zaman aşımına ulaşıldı (%.1fs)"
|
||||
msgstr "\"%s\" URL aktarımının sonu; zaman aşımına ulaşıldı (%.3fs)"
|
||||
|
||||
#, c-format
|
||||
msgid "%sError running thread in hook_url: %s (URL: \"%s\")"
|
||||
msgstr ""
|
||||
msgstr "%shook_url içinde iş parçacığı çalıştırılırken hata: %s (URL: \"%s\")"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "End of command '%s', timeout reached (%.1fs)"
|
||||
#, c-format
|
||||
msgid "End of URL transfer '%s', transfer stopped"
|
||||
msgstr "'%s' komutu sonu, zaman aşımına ulaşıldı (%.1fs)"
|
||||
msgstr "\"%s\" URL aktarımının sonu; aktarım durduruldu"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "WeeChat is running in headless mode (Ctrl-C to quit)."
|
||||
msgid "WeeChat is running in headless mode (ctrl-c to quit)."
|
||||
msgstr "WeeChat başsız kipte çalışıyor (çıkmak için Ctrl-C)."
|
||||
msgstr "WeeChat başsız kipte çalışıyor (çıkmak için ctrl-c yapın)."
|
||||
|
||||
msgid ""
|
||||
"Welcome to WeeChat!\n"
|
||||
@@ -6737,7 +6720,7 @@ msgid "Nick colors:"
|
||||
msgstr "Takma ad renkleri:"
|
||||
|
||||
msgid "Syntax highlighting colors in evaluated strings:"
|
||||
msgstr ""
|
||||
msgstr "Değerlendirilen dizilerdeki sözdizim vurgulama renkleri:"
|
||||
|
||||
msgid "Color aliases:"
|
||||
msgstr "Renk armaları:"
|
||||
@@ -6781,35 +6764,30 @@ msgstr "çubuk ögesinin içeriği (değerlendirilir, bkz. /help eval)"
|
||||
#, c-format
|
||||
msgid "debug: long callback: bar: %s, item: %s, plugin: %s, time elapsed: %s"
|
||||
msgstr ""
|
||||
"hata ayıkla: uzun geri çağrı: çubuk: %s, öge: %s, eklenti: %s, geçen süre: %s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%sPaste %d line? [ctrl-Y] Yes [ctrl-N] No"
|
||||
#| msgid_plural "%sPaste %d lines? [ctrl-Y] Yes [ctrl-N] No"
|
||||
#, c-format
|
||||
msgid "%sPaste %d line? [ctrl-y] Yes [ctrl-n] No"
|
||||
msgid_plural "%sPaste %d lines? [ctrl-y] Yes [ctrl-n] No"
|
||||
msgstr[0] "%s%d satır yapıştırılsın mı? [ctrl-Y] Evet [ctrl-N] Hayır"
|
||||
msgstr[1] "%s%d satır yapıştırılsın mı? [ctrl-Y] Evet [ctrl-N] Hayır"
|
||||
msgstr[0] "%s%d satır yapıştırılsın mı? [ctrl-y] Evet [ctrl-n] Hayır"
|
||||
msgstr[1] "%s%d satır yapıştırılsın mı? [ctrl-y] Evet [ctrl-n] Hayır"
|
||||
|
||||
#. TRANSLATORS: search in "local" history
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
msgstr "yerel"
|
||||
|
||||
#. TRANSLATORS: search in "global" history
|
||||
msgid "global"
|
||||
msgstr ""
|
||||
msgstr "global"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "Search"
|
||||
msgid "Search lines"
|
||||
msgstr "Arama"
|
||||
msgstr "Satırlar ara"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "default command:"
|
||||
msgid "Search command"
|
||||
msgstr "öntanımlı komut:"
|
||||
msgstr "Arama komutu"
|
||||
|
||||
msgid "keyboard and mouse debug ('q' to quit debug mode)"
|
||||
msgstr ""
|
||||
msgstr "klavye ve fare hata ayıklaması (bu kipten çıkmak için \"q\"ya basın)"
|
||||
|
||||
#, c-format
|
||||
msgid "%s-MORE(%d)-"
|
||||
@@ -6968,10 +6946,9 @@ msgstr ""
|
||||
msgid "New key binding (context \"%s\"): %s%s => %s%s"
|
||||
msgstr "Yeni düğme bağıntısı (bağlam: \"%s\"): %s%s => %s%s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%sUnable to bind key \"%s\""
|
||||
#, c-format
|
||||
msgid "%sUnable to bind key \"%s\" in context \"%s\" (see /help key)"
|
||||
msgstr "%s\"%s\" düğmesi bağlanamıyor"
|
||||
msgstr "%s\"%s\" düğmesi, \"%s\" bağlamında bağıntılanamıyor (bkz. /help key)"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
@@ -6988,6 +6965,8 @@ msgid ""
|
||||
"%sWarning: key \"%s\" seems either a raw code or invalid, it may not work "
|
||||
"(see /help key)"
|
||||
msgstr ""
|
||||
"%sUyarı: \"%s\" düğmesi ya bir ham kod ya da geçersiz, çalışmayabilir (bkz. /"
|
||||
"help key)"
|
||||
|
||||
#, c-format
|
||||
msgid "Key \"%s\" unbound (context: \"%s\")"
|
||||
@@ -7008,16 +6987,14 @@ msgstr "hsignal gönderiliyor: \"%s\""
|
||||
msgid "Executing command: \"%s\" on buffer \"%s\""
|
||||
msgstr "Komut yürütülüyor: \"%s\", \"%s\" arabelleğinde"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid "list of key bindings"
|
||||
msgid "no key binding"
|
||||
msgstr "düğme bağıntılarının listesi"
|
||||
msgstr "düğme bağıntısı yok"
|
||||
|
||||
msgid "debug:"
|
||||
msgstr ""
|
||||
msgstr "hata ayıkla:"
|
||||
|
||||
msgid "mouse"
|
||||
msgstr ""
|
||||
msgstr "fare"
|
||||
|
||||
#, c-format
|
||||
msgid "Debug enabled for mouse (%s)"
|
||||
@@ -7030,15 +7007,13 @@ msgstr "Fare için hata ayıklaması devre dışı"
|
||||
msgid "%s%s: error creating alias \"%s\" => \"%s\""
|
||||
msgstr "%s%s: \"%s\" => \"%s\" arması oluşturulurken hata"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "Alias \"%s\" => \"%s\" created"
|
||||
#, c-format
|
||||
msgid "Alias updated: \"%s\" => \"%s\""
|
||||
msgstr "\"%s\" => \"%s\" arması oluşturuldu"
|
||||
msgstr "Arma güncellendi: \"%s\" => \"%s\""
|
||||
|
||||
#, fuzzy, c-format
|
||||
#| msgid "Alias \"%s\" => \"%s\" created"
|
||||
#, c-format
|
||||
msgid "Alias created: \"%s\" => \"%s\""
|
||||
msgstr "\"%s\" => \"%s\" arması oluşturuldu"
|
||||
msgstr "Arma oluşturuldu: \"%s\" => \"%s\""
|
||||
|
||||
#, c-format
|
||||
msgid "Aliases with \"%s\":"
|
||||
@@ -7082,9 +7057,9 @@ msgid ""
|
||||
"addcompletion|addreplacecompletion <completion> <name> [<command>[;"
|
||||
"<command>...]] || del <name>|<mask>... || rename <name> <new_name> || missing"
|
||||
msgstr ""
|
||||
"list [<ad>] || add|addreplace <ad> [<komut>[;<komut>...]] || "
|
||||
"addcompletion|addreplacecompletion <tamamlama> <ad> [<komut>[;"
|
||||
"<komut>...]] || del <ad>|<maske>... || rename <ad> <yeni_ad> || missing"
|
||||
"list [<ad>] || add|addreplace <ad> [<komut>[;<komut>...]] || addcompletion|"
|
||||
"addreplacecompletion <tamamlama> <ad> [<komut>[;<komut>...]] || del <ad>|"
|
||||
"<maske>... || rename <ad> <yeni_ad> || missing"
|
||||
|
||||
msgid "raw[list]: list aliases (without argument, this list is displayed)"
|
||||
msgstr ""
|
||||
@@ -7305,16 +7280,12 @@ msgid ""
|
||||
" - ${number_displayed}: \"1\" if the number is displayed, otherwise \"0\""
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "string displayed to indent channel and private buffers (note: content is "
|
||||
#| "evaluated, see /help buflist)"
|
||||
msgid ""
|
||||
" - ${indent}: indentation for name (channel, private and list buffers are "
|
||||
"indented) (evaluation of option buflist.format.indent)"
|
||||
msgstr ""
|
||||
"kanal ve özel arabellekleri girintilendirmek için görüntülenen dizi (not: "
|
||||
"içerik değerlendirilir, bkz. /help buflist)"
|
||||
" - ${indent}: Ad için girintileme (kanal, özel ve liste arabellekleri "
|
||||
"girintilenir) (buflist.format.indent seçeneğinin değerlendirmesi)"
|
||||
|
||||
msgid ""
|
||||
" - ${format_nick_prefix}: colored nick prefix for a channel (evaluation "
|
||||
@@ -12649,8 +12620,8 @@ msgstr "sunucu adı"
|
||||
msgid "get nick from IRC host"
|
||||
msgstr "IRC makinesinden takma adı al"
|
||||
|
||||
msgid "IRC host (like `:nick!name@server.com`)"
|
||||
msgstr "IRC makinesi (örneğin: `:nick!name@server.com`)"
|
||||
msgid "IRC host (like `:nick!name@server`)"
|
||||
msgstr "IRC makinesi (örneğin: `:nick!name@server`)"
|
||||
|
||||
msgid ""
|
||||
"get nick color code (*deprecated* since version 1.5, replaced by "
|
||||
@@ -12886,8 +12857,8 @@ msgstr "%s%s: Bu arabellek bir kanal değil!"
|
||||
|
||||
#, 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"
|
||||
@@ -14116,7 +14087,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"
|
||||
@@ -16072,13 +16043,21 @@ msgstr ""
|
||||
"şifreye gerek yok anlamına gelir, relay.network.allow_empty_password "
|
||||
"seçeneğine bakın) (not: içerik değerlendirilir, bkz. /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 ""
|
||||
"weechat protokolünde parola doğrulaması yapmak için kullanılan sağlama "
|
||||
"algoritmalarının virgülle ayrılmış listesi: \"plain\" (düz metin parola, "
|
||||
@@ -16088,11 +16067,17 @@ msgstr ""
|
||||
"adlarda \"*\" jokerine izin verilir (örnekler: \"*\", \"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 ""
|
||||
"PBKDF2 algoritmasını kullanan bir sağlaması yapılmış bir parola kimlik "
|
||||
"doğrulama için kullanıldığında istemciye sorulan yineleme sayısı; daha fazla "
|
||||
@@ -16151,6 +16136,11 @@ msgstr ""
|
||||
"parola, geçerli parola ve sonrasında iki parola kabul et, ..., yüksek sayı "
|
||||
"güvenlik düzeyini düşürür (0 ve 1 önerilir)"
|
||||
|
||||
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 "
|
||||
@@ -16286,11 +16276,11 @@ msgstr "iletim istemci sayısı"
|
||||
#. 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 (ikisi de isteğe bağlıdır, her bir argüman için \"*\" tümü "
|
||||
"anlamına gelir; protokoller: irc, weechat; durumlar: connecting, "
|
||||
"anlamına gelir; protokoller: api, irc, weechat; durumlar: connecting, "
|
||||
"waiting_auth, connected, auth_failed, disconnected)"
|
||||
|
||||
msgid "list of relay clients"
|
||||
@@ -16433,6 +16423,11 @@ msgstr "%s%s: %s yolunda \"bağlama\" yapılamıyor (%s): hata %d %s"
|
||||
msgid "%s%s: cannot \"bind\" on port %d (%s): error %d %s"
|
||||
msgstr "%s%s: %d kapısında \"bağlama\" yapılamıyor (%s): hata %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 yolunda \"dinleme\" yapılamıyor (%s): error %d %s"
|
||||
|
||||
#, c-format
|
||||
msgid "%s%s: cannot \"listen\" on path %s (%s): error %d %s"
|
||||
msgstr "%s%s: %s yolunda \"dinleme\" yapılamıyor (%s): error %d %s"
|
||||
@@ -16469,9 +16464,8 @@ msgstr ""
|
||||
msgid "%s%s: not enough memory for listening on new port"
|
||||
msgstr "%s%s: yeni kapıda dinleme için yetersiz bellek"
|
||||
|
||||
msgid "Relay WeeChat data to remote application (irc/weechat protocols)"
|
||||
msgstr ""
|
||||
"WeeChat verisini uzak konum uygulamalarına ilet (irc/weechat protokolleri)"
|
||||
msgid "Relay WeeChat data to remote applications"
|
||||
msgstr "WeeChat verisini uzak konum uygulamalarına ilet"
|
||||
|
||||
msgid "connecting"
|
||||
msgstr "bağlanıyor"
|
||||
@@ -16712,11 +16706,16 @@ msgstr "(hiçbir şey)"
|
||||
msgid "Alt+key/input: v=back to list d=jump to diff"
|
||||
msgstr "Alt+düğme/girdi: v=listeye geri dön d=diff'e atla"
|
||||
|
||||
#, 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 betik (süzgeç: %s) | Sırala: %s | Alt+düğme/girdi: i=kur, r=kaldır, "
|
||||
@@ -16743,9 +16742,9 @@ msgid ""
|
||||
"|| -up|-down [<number>] || -go <line>|end"
|
||||
msgstr ""
|
||||
"enable || list [-o|-ol|-i|-il] || search <metin> || show <betik> || load|"
|
||||
"unload|reload <betik>... || autoload|noautoload|toggleautoload <betik>... "
|
||||
"|| install|remove|installremove|hold [-q] <betik>... || upgrade || update "
|
||||
"|| -up|-down [<sayı>] || -go <satır>|end"
|
||||
"unload|reload <betik>... || autoload|noautoload|toggleautoload <betik>... || "
|
||||
"install|remove|installremove|hold [-q] <betik>... || upgrade || update || "
|
||||
"-up|-down [<sayı>] || -go <satır>|end"
|
||||
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
@@ -18138,8 +18137,8 @@ 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\" çubuk ögesinde takma adlardan önce görüntülenecek metin; ayarlıysa "
|
||||
"öntanımlı olarak görüntülenen \"Yazıyar: \" metni yerine kullanılır"
|
||||
"\"typing\" çubuk ögesinde takma adlardan önce görüntülenecek metin; "
|
||||
"ayarlıysa öntanımlı olarak görüntülenen \"Yazıyar: \" metni yerine kullanılır"
|
||||
|
||||
msgid "Typing status of users"
|
||||
msgstr "Kullanıcıların metin yazma durumu"
|
||||
|
||||
+38
-19
@@ -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-05-30 14:00+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:"
|
||||
@@ -1072,6 +1072,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 ""
|
||||
|
||||
@@ -10267,7 +10277,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 +10481,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 +11572,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 +13177,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 +13218,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 +13314,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 +13433,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 +13473,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 +13698,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 ""
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
-179
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
@@ -1974,6 +1975,151 @@ 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
|
||||
*/
|
||||
|
||||
struct t_completion_theme_dir
|
||||
{
|
||||
struct t_gui_completion *completion;
|
||||
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 delete.
|
||||
*/
|
||||
|
||||
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 (excludes 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);
|
||||
|
||||
+76
-91
@@ -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;
|
||||
char *pos, *option_name, *parent_name, *type_name;
|
||||
const char *ptr_type;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1404,9 +1428,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 +1515,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 +1524,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 +1533,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 +1586,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 +1596,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 +1611,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 +1640,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 +1649,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 +1669,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 +1892,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 +1967,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 +2038,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 +2048,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 +2063,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 +2092,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 +2101,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 +2121,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 +2466,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)
|
||||
@@ -3156,7 +3142,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 +3293,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 +3366,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 +4277,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 +4390,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 +4556,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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
+49
-44
@@ -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);
|
||||
@@ -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);
|
||||
@@ -2521,10 +2514,9 @@ 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;
|
||||
char **argv, *pos, *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 +2574,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 +2591,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 +3449,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 +3473,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 +3640,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 +3653,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 +3765,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 +3970,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 +4025,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 +4117,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 +4127,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 +4137,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 +4147,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 +4157,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 +4426,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: /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 +4666,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 +4937,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 "
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
+39
-55
@@ -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,10 @@ eval_string_repeat (const char *text)
|
||||
char *
|
||||
eval_string_split (const char *text)
|
||||
{
|
||||
char *pos, *pos2, *pos3, *str_number, *separators, **items, *value, *error;
|
||||
char *pos, *pos2, *pos3, *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 +544,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 +582,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 +655,7 @@ end:
|
||||
char *
|
||||
eval_string_split_shell (const char *text)
|
||||
{
|
||||
char *pos, *str_number, **items, *value, *error, str_value[32];
|
||||
char *pos, *str_number, **items, *value, str_value[32];
|
||||
int num_items, count_items, random_item;
|
||||
long number;
|
||||
|
||||
@@ -693,9 +684,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 +735,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 +761,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 +773,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 +1046,7 @@ 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];
|
||||
char *pos, *tmp, result[128];
|
||||
long long min_number, max_number;
|
||||
|
||||
if (!text || !text[0])
|
||||
@@ -1071,18 +1059,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)
|
||||
@@ -2224,17 +2208,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 +2670,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 +2812,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);
|
||||
}
|
||||
}
|
||||
|
||||
+18
-31
@@ -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,8 @@ 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;
|
||||
char *pos, *str_index;
|
||||
int number;
|
||||
|
||||
if (index)
|
||||
*index = -1;
|
||||
@@ -708,9 +705,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 +1241,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 +1265,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 +1312,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_long (value, 10, &number_long) && (number_long >= 0))
|
||||
{
|
||||
*((time_t *)(pointer + var->offset)) = (time_t)number;
|
||||
*((time_t *)(pointer + var->offset)) = (time_t)number_long;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
|
||||
+5
-11
@@ -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)
|
||||
{
|
||||
|
||||
+5
-10
@@ -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"
|
||||
|
||||
@@ -1570,11 +1571,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 +1602,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 +1737,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)
|
||||
|
||||
+48
-13
@@ -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).
|
||||
*
|
||||
@@ -1928,6 +1966,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);
|
||||
|
||||
@@ -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] == ' ')
|
||||
@@ -4439,8 +4476,8 @@ string_get_priority_and_name (const char *string,
|
||||
int *priority, const char **name,
|
||||
int default_priority)
|
||||
{
|
||||
char *pos, *str_priority, *error;
|
||||
long number;
|
||||
char *pos, *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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* 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 "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 },
|
||||
};
|
||||
|
||||
/*
|
||||
* Builds a hashtable of overrides from a NULL-terminated table and
|
||||
* registers it under the given theme name.
|
||||
*/
|
||||
|
||||
void
|
||||
theme_builtin_register_entries (const char *name,
|
||||
const struct t_theme_builtin_entry *entries)
|
||||
{
|
||||
struct t_hashtable *overrides;
|
||||
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_register (NULL, NULL, name, overrides);
|
||||
|
||||
hashtable_free (overrides);
|
||||
}
|
||||
|
||||
/*
|
||||
* Registers all built-in themes contributed by core. Called once from
|
||||
* theme_init; plugins/scripts add their own contributions later via
|
||||
* weechat_theme_register.
|
||||
*/
|
||||
|
||||
void
|
||||
theme_builtin_init (void)
|
||||
{
|
||||
theme_builtin_register_entries ("light", theme_builtin_light_core);
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -417,7 +417,7 @@ 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];
|
||||
char 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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+40
-13
@@ -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"
|
||||
@@ -97,6 +98,7 @@ char *weechat_argv0 = NULL; /* WeeChat binary file name (argv[0])*/
|
||||
int weechat_upgrading = 0; /* =1 if WeeChat is upgrading */
|
||||
int weechat_first_start = 0; /* first start of WeeChat? */
|
||||
time_t weechat_first_start_time = 0; /* start time (used by /uptime cmd) */
|
||||
int weechat_term_theme_light = 0; /* 1 if light theme detected */
|
||||
int weechat_upgrade_count = 0; /* number of /upgrade done */
|
||||
struct timeval weechat_current_start_timeval; /* start time used to display */
|
||||
/* duration of /upgrade */
|
||||
@@ -182,22 +184,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 (weechat_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, "");
|
||||
@@ -368,6 +382,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 */
|
||||
weechat_term_theme_light = gui_term_theme_is_light ();
|
||||
|
||||
weeurl_init (); /* initialize URL */
|
||||
string_init (); /* initialize string */
|
||||
signal_init (); /* initialize signals */
|
||||
@@ -384,6 +401,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 */
|
||||
@@ -423,6 +442,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 (weechat_term_theme_light)
|
||||
theme_apply ("light");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -449,6 +475,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 */
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
+12
-21
@@ -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"
|
||||
@@ -1018,9 +1019,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 +1031,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 +2057,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 +2126,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;
|
||||
|
||||
@@ -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"
|
||||
@@ -3278,6 +3279,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.
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 "")
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 },
|
||||
};
|
||||
|
||||
/*
|
||||
* Registers 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);
|
||||
}
|
||||
|
||||
/*
|
||||
* Registers all built-in theme contributions from buflist.
|
||||
*/
|
||||
|
||||
void
|
||||
buflist_theme_init (void)
|
||||
{
|
||||
buflist_theme_register ("light", buflist_theme_light);
|
||||
}
|
||||
@@ -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 */
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ add_library(exec MODULE
|
||||
exec-command.c exec-command.h
|
||||
exec-completion.c exec-completion.h
|
||||
exec-config.c exec-config.h
|
||||
exec-theme.c exec-theme.h
|
||||
)
|
||||
set_target_properties(exec PROPERTIES PREFIX "")
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/* exec contribution to built-in themes. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "../weechat-plugin.h"
|
||||
#include "exec.h"
|
||||
#include "exec-theme.h"
|
||||
|
||||
|
||||
const char *exec_theme_light[][2] =
|
||||
{
|
||||
{ "exec.color.flag_finished", "red" },
|
||||
{ "exec.color.flag_running", "green" },
|
||||
{ NULL, NULL },
|
||||
};
|
||||
|
||||
void
|
||||
exec_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);
|
||||
}
|
||||
|
||||
void
|
||||
exec_theme_init (void)
|
||||
{
|
||||
exec_theme_register ("light", exec_theme_light);
|
||||
}
|
||||
@@ -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_EXEC_THEME_H
|
||||
#define WEECHAT_PLUGIN_EXEC_THEME_H
|
||||
|
||||
extern void exec_theme_init (void);
|
||||
|
||||
#endif /* WEECHAT_PLUGIN_EXEC_THEME_H */
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "exec-command.h"
|
||||
#include "exec-completion.h"
|
||||
#include "exec-config.h"
|
||||
#include "exec-theme.h"
|
||||
|
||||
|
||||
WEECHAT_PLUGIN_NAME(EXEC_PLUGIN_NAME);
|
||||
@@ -742,6 +743,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
|
||||
if (!exec_config_init ())
|
||||
return WEECHAT_RC_ERROR;
|
||||
|
||||
exec_theme_init ();
|
||||
|
||||
exec_config_read ();
|
||||
|
||||
/* hook some signals */
|
||||
|
||||
@@ -29,6 +29,7 @@ add_library(fset MODULE
|
||||
fset-info.c fset-info.h
|
||||
fset-mouse.c fset-mouse.h
|
||||
fset-option.c fset-option.h
|
||||
fset-theme.c fset-theme.h
|
||||
)
|
||||
set_target_properties(fset PROPERTIES PREFIX "")
|
||||
|
||||
|
||||
@@ -702,7 +702,9 @@ fset_command_init (void)
|
||||
N_("> `xxx`: show only options with \"xxx\" in name"),
|
||||
N_("> `f:xxx`: show only configuration file \"xxx\""),
|
||||
N_("> `t:xxx`: show only type \"xxx\" (bool/int/str/col/enum "
|
||||
"or boolean/integer/string/color/enum)"),
|
||||
"or boolean/integer/string/color/enum); the special value "
|
||||
"\"themable\" matches all options with the themable flag, "
|
||||
"regardless of type"),
|
||||
N_("> `d`: show only changed options"),
|
||||
N_("> `d:xxx`: show only changed options with \"xxx\" in "
|
||||
"name"),
|
||||
|
||||
@@ -572,7 +572,7 @@ fset_config_init (void)
|
||||
NULL, NULL, NULL);
|
||||
fset_config_format_option[1] = weechat_config_new_option (
|
||||
fset_config_file, fset_config_section_format,
|
||||
"option2", "string",
|
||||
"option2", "string|themable",
|
||||
N_("second format of each line, used when option "
|
||||
"fset.look.format_number is set to 2 "
|
||||
"(note: content is evaluated, see /help fset); "
|
||||
|
||||
@@ -337,7 +337,7 @@ fset_mouse_init (void)
|
||||
weechat_hashtable_set (
|
||||
keys,
|
||||
"@chat(" FSET_PLUGIN_NAME "." FSET_BUFFER_NAME "):button1",
|
||||
"/window ${_window_number};/fset -go ${fset_option_index}");
|
||||
"/window ${_window_number};/mute /fset -go ${fset_option_index}");
|
||||
weechat_hashtable_set (
|
||||
keys,
|
||||
"@chat(" FSET_PLUGIN_NAME "." FSET_BUFFER_NAME "):button2*",
|
||||
|
||||
@@ -335,6 +335,10 @@ fset_option_match_filter (struct t_fset_option *fset_option, const char *filter)
|
||||
}
|
||||
else if (strncmp (filter, "t:", 2) == 0)
|
||||
{
|
||||
/* virtual cross-type value: match themable flag (any option type) */
|
||||
if (weechat_strcasecmp (filter + 2, "themable") == 0)
|
||||
return (fset_option->themable) ? 1 : 0;
|
||||
|
||||
/* filter by type */
|
||||
return (
|
||||
(weechat_strcasecmp (
|
||||
@@ -426,7 +430,7 @@ fset_option_set_values (struct t_fset_option *fset_option,
|
||||
const char **ptr_string_values;
|
||||
void *ptr_default_value, *ptr_value;
|
||||
struct t_config_option *ptr_parent_option;
|
||||
int *ptr_type, *ptr_min, *ptr_max;
|
||||
int *ptr_type, *ptr_themable, *ptr_min, *ptr_max;
|
||||
char str_value[64], str_allowed_values[4096];
|
||||
|
||||
/* file */
|
||||
@@ -466,6 +470,10 @@ fset_option_set_values (struct t_fset_option *fset_option,
|
||||
ptr_type = weechat_config_option_get_pointer (option, "type");
|
||||
fset_option->type = *ptr_type;
|
||||
|
||||
/* themable */
|
||||
ptr_themable = weechat_config_option_get_pointer (option, "themable");
|
||||
fset_option->themable = (ptr_themable) ? *ptr_themable : 0;
|
||||
|
||||
/* default value */
|
||||
free (fset_option->default_value);
|
||||
fset_option->default_value = NULL;
|
||||
@@ -784,6 +792,7 @@ fset_option_alloc (struct t_config_option *option)
|
||||
new_fset_option->name = NULL;
|
||||
new_fset_option->parent_name = NULL;
|
||||
new_fset_option->type = 0;
|
||||
new_fset_option->themable = 0;
|
||||
new_fset_option->default_value = NULL;
|
||||
new_fset_option->value = NULL;
|
||||
new_fset_option->parent_value = NULL;
|
||||
@@ -1691,6 +1700,7 @@ fset_option_hdata_option_cb (const void *pointer, void *data,
|
||||
WEECHAT_HDATA_VAR(struct t_fset_option, name, STRING, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_fset_option, parent_name, STRING, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_fset_option, type, INTEGER, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_fset_option, themable, INTEGER, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_fset_option, default_value, STRING, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_fset_option, value, STRING, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_fset_option, parent_value, STRING, 0, NULL, NULL);
|
||||
@@ -1740,6 +1750,8 @@ fset_option_add_to_infolist (struct t_infolist *infolist,
|
||||
return 0;
|
||||
if (!weechat_infolist_new_var_string (ptr_item, "type_en", fset_option_type_string[fset_option->type]))
|
||||
return 0;
|
||||
if (!weechat_infolist_new_var_integer (ptr_item, "themable", fset_option->themable))
|
||||
return 0;
|
||||
if (!weechat_infolist_new_var_string (ptr_item, "default_value", fset_option->default_value))
|
||||
return 0;
|
||||
if (!weechat_infolist_new_var_string (ptr_item, "value", fset_option->value))
|
||||
@@ -1793,6 +1805,7 @@ fset_option_print_log (void)
|
||||
weechat_log_printf (" type. . . . . . . . . : %d ('%s')",
|
||||
ptr_fset_option->type,
|
||||
fset_option_type_string[ptr_fset_option->type]);
|
||||
weechat_log_printf (" themable. . . . . . . : %d", ptr_fset_option->themable);
|
||||
weechat_log_printf (" default_value . . . . : '%s'", ptr_fset_option->default_value);
|
||||
weechat_log_printf (" value . . . . . . . . : '%s'", ptr_fset_option->value);
|
||||
weechat_log_printf (" parent_value. . . . . : '%s'", ptr_fset_option->parent_value);
|
||||
|
||||
@@ -46,6 +46,7 @@ struct t_fset_option
|
||||
char *name; /* option full name: file.sect.opt */
|
||||
char *parent_name; /* parent option name */
|
||||
enum t_fset_option_type type; /* option type */
|
||||
int themable; /* 1 if option is themable */
|
||||
char *default_value; /* option default value */
|
||||
char *value; /* option value */
|
||||
char *parent_value; /* parent option value */
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* 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/>.
|
||||
*/
|
||||
|
||||
/* fset contribution to built-in themes. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include "../weechat-plugin.h"
|
||||
#include "fset.h"
|
||||
#include "fset-theme.h"
|
||||
|
||||
|
||||
/*
|
||||
* fset contribution to the "light" theme: option values tuned for a
|
||||
* light-background terminal. Each row is { option_full_name, value };
|
||||
* the table is NULL-terminated.
|
||||
*/
|
||||
|
||||
const char *fset_theme_light[][2] =
|
||||
{
|
||||
{ "fset.color.allowed_values_selected", "default" },
|
||||
{ "fset.color.color_name", "darkgray" },
|
||||
{ "fset.color.color_name_selected", "darkgray" },
|
||||
{ "fset.color.default_value_selected", "default" },
|
||||
{ "fset.color.description_selected", "242" },
|
||||
{ "fset.color.file_changed", "94" },
|
||||
{ "fset.color.file_changed_selected", "94" },
|
||||
{ "fset.color.file_selected", "default" },
|
||||
{ "fset.color.help_default_value", "default" },
|
||||
{ "fset.color.help_name", "default" },
|
||||
{ "fset.color.index", "24" },
|
||||
{ "fset.color.index_selected", "24" },
|
||||
{ "fset.color.line_marked_bg1", "193" },
|
||||
{ "fset.color.line_marked_bg2", "193" },
|
||||
{ "fset.color.line_selected_bg1", "117" },
|
||||
{ "fset.color.line_selected_bg2", "117" },
|
||||
{ "fset.color.marked", "94" },
|
||||
{ "fset.color.marked_selected", "94" },
|
||||
{ "fset.color.max_selected", "default" },
|
||||
{ "fset.color.min_selected", "default" },
|
||||
{ "fset.color.name_changed", "red" },
|
||||
{ "fset.color.name_changed_selected", "red" },
|
||||
{ "fset.color.name_selected", "default" },
|
||||
{ "fset.color.option_changed", "94" },
|
||||
{ "fset.color.option_changed_selected", "94" },
|
||||
{ "fset.color.option_selected", "default" },
|
||||
{ "fset.color.parent_name_selected", "default" },
|
||||
{ "fset.color.parent_value", "24" },
|
||||
{ "fset.color.parent_value_selected", "24" },
|
||||
{ "fset.color.quotes_changed_selected", "default" },
|
||||
{ "fset.color.section_changed", "94" },
|
||||
{ "fset.color.section_changed_selected", "94" },
|
||||
{ "fset.color.section_selected", "default" },
|
||||
{ "fset.color.string_values_selected", "default" },
|
||||
{ "fset.color.title_count_options", "30" },
|
||||
{ "fset.color.title_current_option", "30" },
|
||||
{ "fset.color.title_filter", "18" },
|
||||
{ "fset.color.title_marked_options", "94" },
|
||||
{ "fset.color.title_sort", "darkgray" },
|
||||
{ "fset.color.type", "58" },
|
||||
{ "fset.color.type_selected", "58" },
|
||||
{ "fset.color.unmarked_selected", "default" },
|
||||
{ "fset.color.value", "20" },
|
||||
{ "fset.color.value_changed", "red" },
|
||||
{ "fset.color.value_changed_selected", "red" },
|
||||
{ "fset.color.value_selected", "20" },
|
||||
{ "fset.color.value_undef_selected", "magenta" },
|
||||
{ NULL, NULL },
|
||||
};
|
||||
|
||||
/*
|
||||
* Registers fset's contribution to one theme from a NULL-terminated
|
||||
* table of {option, value} rows.
|
||||
*/
|
||||
|
||||
void
|
||||
fset_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);
|
||||
}
|
||||
|
||||
/*
|
||||
* Registers all built-in theme contributions from fset.
|
||||
*/
|
||||
|
||||
void
|
||||
fset_theme_init (void)
|
||||
{
|
||||
fset_theme_register ("light", fset_theme_light);
|
||||
}
|
||||
@@ -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_FSET_THEME_H
|
||||
#define WEECHAT_PLUGIN_FSET_THEME_H
|
||||
|
||||
extern void fset_theme_init (void);
|
||||
|
||||
#endif /* WEECHAT_PLUGIN_FSET_THEME_H */
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "fset-info.h"
|
||||
#include "fset-mouse.h"
|
||||
#include "fset-option.h"
|
||||
#include "fset-theme.h"
|
||||
|
||||
|
||||
WEECHAT_PLUGIN_NAME(FSET_PLUGIN_NAME);
|
||||
@@ -126,6 +127,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
|
||||
|
||||
fset_config_read ();
|
||||
|
||||
fset_theme_init ();
|
||||
|
||||
if (!fset_bar_item_init ())
|
||||
return WEECHAT_RC_ERROR;
|
||||
|
||||
|
||||
@@ -2003,6 +2003,32 @@ weechat_guile_api_config_unset_plugin (SCM option)
|
||||
API_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
SCM
|
||||
weechat_guile_api_theme_register (SCM name, SCM overrides)
|
||||
{
|
||||
struct t_hashtable *c_overrides;
|
||||
const char *result;
|
||||
SCM return_value;
|
||||
|
||||
API_INIT_FUNC(1, "theme_register", API_RETURN_EMPTY);
|
||||
if (!scm_is_string (name) || !scm_list_p (overrides))
|
||||
API_WRONG_ARGS(API_RETURN_EMPTY);
|
||||
|
||||
c_overrides = weechat_guile_alist_to_hashtable (overrides,
|
||||
WEECHAT_SCRIPT_HASHTABLE_DEFAULT_SIZE,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING);
|
||||
|
||||
result = API_PTR2STR(plugin_script_api_theme_register (
|
||||
weechat_guile_plugin,
|
||||
guile_current_script,
|
||||
API_SCM_TO_STRING(name), c_overrides));
|
||||
|
||||
weechat_hashtable_free (c_overrides);
|
||||
|
||||
API_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
SCM
|
||||
weechat_guile_api_key_bind (SCM context, SCM keys)
|
||||
{
|
||||
@@ -5537,6 +5563,7 @@ weechat_guile_api_module_init (void *data)
|
||||
API_DEF_FUNC(config_set_plugin, 2);
|
||||
API_DEF_FUNC(config_set_desc_plugin, 2);
|
||||
API_DEF_FUNC(config_unset_plugin, 1);
|
||||
API_DEF_FUNC(theme_register, 2);
|
||||
API_DEF_FUNC(key_bind, 2);
|
||||
API_DEF_FUNC(key_unbind, 2);
|
||||
API_DEF_FUNC(prefix, 1);
|
||||
|
||||
@@ -48,6 +48,7 @@ add_library(irc MODULE
|
||||
irc-sasl.c irc-sasl.h
|
||||
irc-server.c irc-server.h
|
||||
irc-tag.c irc-tag.h
|
||||
irc-theme.c irc-theme.h
|
||||
irc-typing.c irc-typing.h
|
||||
irc-upgrade.c irc-upgrade.h
|
||||
)
|
||||
|
||||
@@ -3959,7 +3959,7 @@ irc_config_init (void)
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
irc_config_color_mirc_remap = weechat_config_new_option (
|
||||
irc_config_file, irc_config_section_color,
|
||||
"mirc_remap", "string",
|
||||
"mirc_remap", "string|themable",
|
||||
/* TRANSLATORS: please do not translate the list of WeeChat color names at the end of string */
|
||||
N_("remap mirc colors in messages using a hashtable (used only "
|
||||
"for standard colors, not RGB colors): keys are \"fg,bg\" as "
|
||||
@@ -3977,7 +3977,7 @@ irc_config_init (void)
|
||||
NULL, NULL, NULL);
|
||||
irc_config_color_nick_prefixes = weechat_config_new_option (
|
||||
irc_config_file, irc_config_section_color,
|
||||
"nick_prefixes", "string",
|
||||
"nick_prefixes", "string|themable",
|
||||
N_("color for nick prefixes using mode char (o=op, h=halfop, "
|
||||
"v=voice, ..), format is: \"o:color1;h:color2;v:color3\" (if a "
|
||||
"mode is not found, WeeChat will try with next modes received "
|
||||
@@ -4008,7 +4008,7 @@ irc_config_init (void)
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
irc_config_color_term_remap = weechat_config_new_option (
|
||||
irc_config_file, irc_config_section_color,
|
||||
"term_remap", "string",
|
||||
"term_remap", "string|themable",
|
||||
N_("remap terminal color numbers in messages using a hashtable "
|
||||
"(used only for RGB colors as hexadecimal, which are first "
|
||||
"translated to terminal color numbers): keys are \"fg,bg\" as "
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user