1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 21:06:38 +02:00

Compare commits

..

2 Commits

Author SHA1 Message Date
Sébastien Helleu 72dce52901 core, plugins: replace "%p" by "%lx" in calls to sscanf 2025-05-15 20:12:12 +02:00
Sébastien Helleu de7150c65b Revert "core, plugins: replace "%lx" by "%p" in calls to sscanf"
This reverts commit e64ab3c675.

This was causing incorrect conversion of strings "0x..." to pointers on systems
like Solaris/ILLUMOS.

And as a side effect, buffers were sometimes empty in weechat relay clients
like glowing-bear.
2025-05-15 20:10:32 +02:00
69 changed files with 911 additions and 909 deletions
+1 -3
View File
@@ -194,13 +194,11 @@ jobs:
weechat-headless \ weechat-headless \
--dir /tmp/weechat-test-api \ --dir /tmp/weechat-test-api \
--run-command '/set relay.network.password "${{ env.RELAY_PASSWORD }}"' \ --run-command '/set relay.network.password "${{ env.RELAY_PASSWORD }}"' \
--run-command '/set relay.network.password_hash_iterations 100' \
--run-command '/set relay.network.max_clients 0' \
--run-command '/relay add api 9000' \ --run-command '/relay add api 9000' \
--daemon \ --daemon \
; ;
sleep 5 sleep 5
schemathesis run --url http://localhost:9000/api ./src/plugins/relay/api/weechat-relay-api.yaml ./tools/test_relay_api.sh http://localhost:9000
echo '*/quit' >/tmp/weechat-test-api/weechat_fifo_* echo '*/quit' >/tmp/weechat-test-api/weechat_fifo_*
- name: Code coverage - name: Code coverage
-1
View File
@@ -29,7 +29,6 @@ Alphabetically:
- Asakura - Asakura
- Bazerka - Bazerka
- Benoit Papillault (benoit) - Benoit Papillault (benoit)
- Caleb Josue Ruiz Torres
- Chris Hills - Chris Hills
- Christian Duerr - Christian Duerr
- Christian Heinz - Christian Heinz
+1 -9
View File
@@ -6,20 +6,16 @@ SPDX-License-Identifier: GPL-3.0-or-later
# WeeChat ChangeLog # WeeChat ChangeLog
## Version 4.7.0 (2025-07-19) ## Version 4.7.0 (under dev)
### Changed ### Changed
- **breaking:** core: fix buffer overflow in function utf8_next_char and return NULL for empty string - **breaking:** core: fix buffer overflow in function utf8_next_char and return NULL for empty string
- **breaking:** core: fix integer overflow and return "unsigned long" in function util_version_number - **breaking:** core: fix integer overflow and return "unsigned long" in function util_version_number
- core: write configuration files on disk only if there are changes ([#2250](https://github.com/weechat/weechat/issues/2250)) - core: write configuration files on disk only if there are changes ([#2250](https://github.com/weechat/weechat/issues/2250))
- core: always enable partial completion for templates in option weechat.completion.partial_completion_templates, add option weechat.completion.partial_completion_auto_expand to expand word on new completion ([#2253](https://github.com/weechat/weechat/issues/2253))
- core: add script name in output of `/debug hooks <plugin>`
- relay/api: return HTTP error 405 (Method Not Allowed) when the method received is not allowed
### Added ### Added
- core: add support of specifier `%@` for UTC time in function util_strftimeval
- api: add function file_compare - api: add function file_compare
- irc: add support of strikethrough text in IRC messages ([#2248](https://github.com/weechat/weechat/issues/2248)) - irc: add support of strikethrough text in IRC messages ([#2248](https://github.com/weechat/weechat/issues/2248))
- buflist: add variables `${number_zero}` and `${number_zero2}` (zero-padded buffer number) - buflist: add variables `${number_zero}` and `${number_zero2}` (zero-padded buffer number)
@@ -38,10 +34,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
- core: fix memory leak in function util_parse_delay - core: fix memory leak in function util_parse_delay
- irc: display nick changes and quit messages when option irc.look.ignore_tag_messages is enabled ([#2241](https://github.com/weechat/weechat/issues/2241)) - irc: display nick changes and quit messages when option irc.look.ignore_tag_messages is enabled ([#2241](https://github.com/weechat/weechat/issues/2241))
- perl: fix build when multiplicity is not available ([#2243](https://github.com/weechat/weechat/issues/2243)) - perl: fix build when multiplicity is not available ([#2243](https://github.com/weechat/weechat/issues/2243))
- relay/api: reject any invalid or unknown password hash algorithm in handshake resource
- relay/api: process HTTP request received as soon as a NULL char is received
- relay/weechat: fix empty buffers in client when WeeChat is running on Solaris/illumos
- build: fix build on Solaris/illumos (issue #2251)
## Version 4.6.3 (2025-05-11) ## Version 4.6.3 (2025-05-11)
-21
View File
@@ -208,7 +208,6 @@ include(FindPkgConfig)
include(CheckIncludeFiles) include(CheckIncludeFiles)
include(CheckFunctionExists) include(CheckFunctionExists)
include(CheckSymbolExists) include(CheckSymbolExists)
include(CheckLibraryExists)
check_include_files("langinfo.h" HAVE_LANGINFO_CODESET) check_include_files("langinfo.h" HAVE_LANGINFO_CODESET)
check_include_files("sys/resource.h" HAVE_SYS_RESOURCE_H) check_include_files("sys/resource.h" HAVE_SYS_RESOURCE_H)
@@ -219,33 +218,13 @@ check_symbol_exists("malloc_trim" "malloc.h" HAVE_MALLOC_TRIM)
check_function_exists(mallinfo HAVE_MALLINFO) check_function_exists(mallinfo HAVE_MALLINFO)
check_function_exists(mallinfo2 HAVE_MALLINFO2) check_function_exists(mallinfo2 HAVE_MALLINFO2)
check_symbol_exists("htonll" "sys/types.h;netinet/in.h;inttypes.h" HAVE_HTONLL)
check_symbol_exists("eat_newline_glitch" "term.h" HAVE_EAT_NEWLINE_GLITCH) check_symbol_exists("eat_newline_glitch" "term.h" HAVE_EAT_NEWLINE_GLITCH)
# Check if res_init requires libresolv
check_function_exists(res_init, LIBC_HAS_RES_INIT)
if(NOT LIBC_HAS_RES_INIT)
find_library(RESOLV_LIBRARY resolv)
if(RESOLV_LIBRARY)
check_library_exists("${RESOLV_LIBRARY}" res_init "" LIBRESOLV_HAS_RES_INIT)
if(LIBRESOLV_HAS_RES_INIT)
list(APPEND EXTRA_LIBS ${RESOLV_LIBRARY})
endif()
endif()
endif()
# Check for Large File Support # Check for Large File Support
if(ENABLE_LARGEFILE) if(ENABLE_LARGEFILE)
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_LARGE_FILES) add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_LARGE_FILES)
endif() endif()
# _XPG4_2 is needed for macros like CMSG_SPACE
# __EXTENSIONS__ is needed for constants like NI_MAXHOST and for struct timeval
if(CMAKE_HOST_SOLARIS)
add_definitions(-D_XPG4_2 -D__EXTENSIONS__)
endif()
# Check for libgcrypt # Check for libgcrypt
pkg_check_modules(LIBGCRYPT REQUIRED libgcrypt) pkg_check_modules(LIBGCRYPT REQUIRED libgcrypt)
include_directories(${LIBGCRYPT_INCLUDE_DIRS}) include_directories(${LIBGCRYPT_INCLUDE_DIRS})
+36
View File
@@ -0,0 +1,36 @@
#
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2009 Julien Louis <ptitlouis@sysif.net>
#
# 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/>.
#
# - Find Python
# This module finds if Python is installed and determines where the include files
# and libraries are. It also determines what the name of the library is. This
# code sets the following variables:
#
# PYTHON_EXECUTABLE = full path to the python binary
# PYTHON_INCLUDE_DIRS = path to where python.h can be found
# PYTHON_LIBRARIES = path to where libpython.so* can be found
# PYTHON_LDFLAGS = python compiler options for linking
pkg_check_modules(PYTHON python3-embed IMPORTED_TARGET GLOBAL)
if(NOT PYTHON_FOUND)
pkg_check_modules(PYTHON python3 IMPORTED_TARGET GLOBAL)
endif()
-1
View File
@@ -49,7 +49,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
#cmakedefine HAVE_MALLINFO2 #cmakedefine HAVE_MALLINFO2
#cmakedefine HAVE_MALLOC_H #cmakedefine HAVE_MALLOC_H
#cmakedefine HAVE_MALLOC_TRIM #cmakedefine HAVE_MALLOC_TRIM
#cmakedefine HAVE_HTONLL
#cmakedefine HAVE_EAT_NEWLINE_GLITCH #cmakedefine HAVE_EAT_NEWLINE_GLITCH
#cmakedefine HAVE_ASPELL_VERSION_STRING #cmakedefine HAVE_ASPELL_VERSION_STRING
#cmakedefine HAVE_ENCHANT_GET_VERSION #cmakedefine HAVE_ENCHANT_GET_VERSION
-1
View File
@@ -38,7 +38,6 @@ if(ENABLE_MAN OR ENABLE_DOC)
if(ASCIIDOCTOR_FOUND) if(ASCIIDOCTOR_FOUND)
# common asciidoctor arguments # common asciidoctor arguments
set(ASCIIDOCTOR_ARGS set(ASCIIDOCTOR_ARGS
-v
-a experimental -a experimental
-a reproducible -a reproducible
-a "prewrap!" -a "prewrap!"
+3 -3
View File
@@ -625,7 +625,7 @@ Einige Umgebungsvariablen werden von WeeChat genutzt, sofern sie definiert wurde
[width="100%",cols="1m,6",options="header"] [width="100%",cols="1m,6",options="header"]
|=== |===
| Name | Beschreibung | Name | Beschreibung
| WEECHAT_HOME | Das WeeChat Verzeichnis (beinhaltet Konfigurationsdateien, Protokolldateien, Skripten, ...). Gleiches Verhalten wie <<build,CMake option>> `WEECHAT_HOME`. | WEECHAT_HOME | Das WeeChat Verzeichnis (beinhaltet Konfigurationsdateien, Protokolldateien, Skripten, ...). Gleiches Verhalten wie <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE | Die Passphrase zum Entschlüsseln von schutzwürdigen Daten. | WEECHAT_PASSPHRASE | Die Passphrase zum Entschlüsseln von schutzwürdigen Daten.
| WEECHAT_EXTRA_LIBDIR | Ein zusätzliches Verzeichnis um Erweiterungen zu installieren (vom "plugins" Verzeichnis in dieses Verzeichnis). | WEECHAT_EXTRA_LIBDIR | Ein zusätzliches Verzeichnis um Erweiterungen zu installieren (vom "plugins" Verzeichnis in dieses Verzeichnis).
|=== |===
@@ -3822,7 +3822,7 @@ WeeChat unterstützt folgende https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
* <<irc_ircv3_batch,batch>> * <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>> * <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>> * <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>> * <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>> * <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>> * <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>> * <<irc_ircv3_invite_notify,invite-notify>>
@@ -3869,7 +3869,7 @@ Spezifikation: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^
Diese Fähigkeit ermöglicht es dem Server, einen Account als Nachrichten-Tag an Befehle zu hängen, Diese Fähigkeit ermöglicht es dem Server, einen Account als Nachrichten-Tag an Befehle zu hängen,
die an den Client gesendet werden. + die an den Client gesendet werden. +
WeeChat analysiert dieses Tag und speichert es in der Nachricht, aber es wird nicht verwendet oder WeeChat analysiert dieses Tag und speichert es in der Nachricht, aber es wird nicht verwendet oder
angezeigt. Mit dem <<command_weechat_filter,/filter>> Befehl kann man diese Nachrichten explizit filtern, angezeigt. Mit dem <<command_filter,/filter>> Befehl kann man diese Nachrichten explizit filtern,
in dem die Accounts nutzt. in dem die Accounts nutzt.
Beispiel einer empfangenen IRC-Rohnachricht: Beispiel einer empfangenen IRC-Rohnachricht:
+4 -6
View File
@@ -2165,7 +2165,7 @@ Arguments:
Return value: Return value:
* array of strings, NULL if problem (must be freed by calling * array of strings, NULL if problem (must be freed by calling
<<_string_free_split_command,string_free_split_command>> after use) <<_free_split_command,free_split_command>> after use)
C example: C example:
@@ -4803,7 +4803,7 @@ This function is not available in scripting API.
==== util_strftimeval ==== util_strftimeval
_WeeChat ≥ 4.2.0, updated in 4.3.0, 4.7.0._ _WeeChat ≥ 4.2.0, updated in 4.3.0._
Format date and time like function `strftime` in C library, using `struct timeval` Format date and time like function `strftime` in C library, using `struct timeval`
as input, and supporting extra specifiers. as input, and supporting extra specifiers.
@@ -4820,8 +4820,6 @@ Arguments:
* _string_: buffer where the formatted string is stored * _string_: buffer where the formatted string is stored
* _max_: string size * _max_: string size
* _format_: format, the same as _strftime_ function, with these extra specifiers: * _format_: format, the same as _strftime_ function, with these extra specifiers:
** `%@`: return the date expressed in Coordinated Universal Time (UTC)
instead of date relative to the user's specified timezone _(WeeChat ≥ 4.7.0)_
** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits ** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits
(for example `%.3` for milliseconds) (for example `%.3` for milliseconds)
** `%f`: alias of `%.6` ** `%f`: alias of `%.6`
@@ -4838,8 +4836,8 @@ C example:
char time[256]; char time[256];
struct timeval tv; struct timeval tv;
gettimeofday (&tv, NULL); gettimeofday (&tv, NULL);
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv); weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
/* result: 2023-12-26T18:10:04.460509Z */ /* result: 2023-12-26T18:10:04.460509 */
---- ----
[NOTE] [NOTE]
+3 -3
View File
@@ -621,7 +621,7 @@ Some environment variables are used by WeeChat if they are defined:
[width="100%",cols="1m,6",options="header"] [width="100%",cols="1m,6",options="header"]
|=== |===
| Name | Description | Name | Description
| WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, etc.). Same behavior as <<build,CMake option>> `WEECHAT_HOME`. | WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, etc.). Same behavior as <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE | The passphrase used to decrypt secured data. | WEECHAT_PASSPHRASE | The passphrase used to decrypt secured data.
| WEECHAT_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path). | WEECHAT_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path).
|=== |===
@@ -3760,7 +3760,7 @@ WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
* <<irc_ircv3_batch,batch>> * <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>> * <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>> * <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>> * <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>> * <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>> * <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>> * <<irc_ircv3_invite_notify,invite-notify>>
@@ -3808,7 +3808,7 @@ Specification: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^
This capability allows the server to send account as message tag to commands This capability allows the server to send account as message tag to commands
sent to the client. + sent to the client. +
WeeChat parses this tag and saves it in the message, but it is not used or WeeChat parses this tag and saves it in the message, but it is not used or
displayed. It can be used in <<command_weechat_filter,/filter>> command to filter displayed. It can be used in <<command_filter,/filter>> command to filter
messages matching specific accounts. messages matching specific accounts.
Example of raw IRC message received: Example of raw IRC message received:
+4 -6
View File
@@ -2205,7 +2205,7 @@ Paramètres :
Valeur de retour : Valeur de retour :
* tableau de chaînes, NULL en cas de problème (doit être supprimé par un appel à * tableau de chaînes, NULL en cas de problème (doit être supprimé par un appel à
<<_string_free_split_command,string_free_split_command>> après utilisation) <<_free_split_command,free_split_command>> après utilisation)
Exemple en C : Exemple en C :
@@ -4882,7 +4882,7 @@ Cette fonction n'est pas disponible dans l'API script.
==== util_strftimeval ==== util_strftimeval
_WeeChat ≥ 4.2.0, mis à jour dans la 4.3.0, 4.7.0._ _WeeChat ≥ 4.2.0, mis à jour dans la 4.3.0._
Formatter la date et l'heure comme la fonction `strftime` de la bibliothèque C, Formatter la date et l'heure comme la fonction `strftime` de la bibliothèque C,
en utilisant un `struct timeval` en entrée et en supportant des caractères de en utilisant un `struct timeval` en entrée et en supportant des caractères de
@@ -4901,8 +4901,6 @@ Paramètres :
* _max_ : taille de la chaîne * _max_ : taille de la chaîne
* _format_ : format, le même que celui de la fonction _strftime_, avec des * _format_ : format, le même que celui de la fonction _strftime_, avec des
caractères de conversion supplémentaires : caractères de conversion supplémentaires :
** `%@`: retourner la date exprimée en Temps Universel Coordonné (UTC)
au lieu de la date relative au fuseau horaire de l'utilisateur _(WeeChat ≥ 4.7.0)_
** `%.N` où `N` est entre 1 and 6: microsecondes remplies avec des zéros sur ** `%.N` où `N` est entre 1 and 6: microsecondes remplies avec des zéros sur
N chiffres (par exemple `%.3` pour les millisecondes) N chiffres (par exemple `%.3` pour les millisecondes)
** `%f` : alias de `%.6` ** `%f` : alias de `%.6`
@@ -4919,8 +4917,8 @@ Exemple en C :
char time[256]; char time[256];
struct timeval tv; struct timeval tv;
gettimeofday (&tv, NULL); gettimeofday (&tv, NULL);
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv); weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
/* résultat : 2023-12-26T18:10:04.460509Z */ /* résultat : 2023-12-26T18:10:04.460509 */
---- ----
[NOTE] [NOTE]
+3 -3
View File
@@ -624,7 +624,7 @@ Des variables d'environnement sont utilisées par WeeChat si elles sont définie
[width="100%",cols="1m,6",options="header"] [width="100%",cols="1m,6",options="header"]
|=== |===
| Nom | Description | Nom | Description
| WEECHAT_HOME | Le répertoire "maison" de WeeChat (avec les fichiers de configuration, logs, scripts, etc.). Même comportement que <<build,l'option CMake>> `WEECHAT_HOME`. | WEECHAT_HOME | Le répertoire "maison" de WeeChat (avec les fichiers de configuration, logs, scripts, etc.). Même comportement que <<compile_with_cmake,l'option CMake>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE | La phrase secrète utilisée pour déchiffrer les données sécurisées. | WEECHAT_PASSPHRASE | La phrase secrète utilisée pour déchiffrer les données sécurisées.
| WEECHAT_EXTRA_LIBDIR | Un répertoire supplémentaire pour charger les extensions (depuis le répertoire "plugins" sous ce chemin). | WEECHAT_EXTRA_LIBDIR | Un répertoire supplémentaire pour charger les extensions (depuis le répertoire "plugins" sous ce chemin).
|=== |===
@@ -3869,7 +3869,7 @@ WeeChat supporte les https://ircv3.net/irc/[extensions IRCv3 ^↗^^] suivantes
* <<irc_ircv3_batch,batch>> * <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>> * <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>> * <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>> * <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>> * <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>> * <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>> * <<irc_ircv3_invite_notify,invite-notify>>
@@ -3917,7 +3917,7 @@ Spécification : https://ircv3.net/specs/extensions/account-tag[account-tag ^
Cette capacité autorise le serveur à envoyer le compte comme étiquette de message Cette capacité autorise le serveur à envoyer le compte comme étiquette de message
dans les commandes envoyées au client. + dans les commandes envoyées au client. +
WeeChat extrait cette étiquette et la sauve dans le message, mais elle n'est pas WeeChat extrait cette étiquette et la sauve dans le message, mais elle n'est pas
utilisée ni affichée. Elle peut être utilisée dans la commande <<command_weechat_filter,/filter>> utilisée ni affichée. Elle peut être utilisée dans la commande <<command_filter,/filter>>
pour filtrer les messages correspondants à des comptes spécifiques. pour filtrer les messages correspondants à des comptes spécifiques.
Exemple de message IRC brut reçu : Exemple de message IRC brut reçu :
+4 -6
View File
@@ -2297,7 +2297,7 @@ Argomenti:
Valore restituito: Valore restituito:
* array di stringhe, NULL in caso di problemi (deve essere liberata chiamando * array di stringhe, NULL in caso di problemi (deve essere liberata chiamando
<<_string_free_split_command,string_free_split_command>> dopo l'uso) <<_free_split_command,free_split_command>> dopo l'uso)
Esempio in C: Esempio in C:
@@ -5023,7 +5023,7 @@ Questa funzione non è disponibile nelle API per lo scripting.
// TRANSLATION MISSING // TRANSLATION MISSING
==== util_strftimeval ==== util_strftimeval
_WeeChat ≥ 4.2.0, updated in 4.3.0, 4.7.0._ _WeeChat ≥ 4.2.0, updated in 4.3.0._
Format date and time like function `strftime` in C library, using `struct timeval` Format date and time like function `strftime` in C library, using `struct timeval`
as input, and supporting extra specifiers. as input, and supporting extra specifiers.
@@ -5040,8 +5040,6 @@ Arguments:
* _string_: buffer where the formatted string is stored * _string_: buffer where the formatted string is stored
* _max_: string size * _max_: string size
* _format_: format, the same as _strftime_ function, with these extra specifiers: * _format_: format, the same as _strftime_ function, with these extra specifiers:
** `%@`: return the date expressed in Coordinated Universal Time (UTC)
instead of date relative to the user's specified timezone _(WeeChat ≥ 4.7.0)_
** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits ** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits
(for example `%.3` for milliseconds) (for example `%.3` for milliseconds)
** `%f`: alias of `%.6` ** `%f`: alias of `%.6`
@@ -5058,8 +5056,8 @@ C example:
char time[256]; char time[256];
struct timeval tv; struct timeval tv;
gettimeofday (&tv, NULL); gettimeofday (&tv, NULL);
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv); weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
/* result: 2023-12-26T18:10:04.460509Z */ /* result: 2023-12-26T18:10:04.460509 */
---- ----
[NOTE] [NOTE]
+3 -3
View File
@@ -686,7 +686,7 @@ Some environment variables are used by WeeChat if they are defined:
[width="100%",cols="1m,6",options="header"] [width="100%",cols="1m,6",options="header"]
|=== |===
| Name | Description | Name | Description
| WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, ...). Same behavior as <<build,CMake option>> `WEECHAT_HOME`. | WEECHAT_HOME | The WeeChat home (with configuration files, logs, scripts, ...). Same behavior as <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE | The passphrase used to decrypt secured data. | WEECHAT_PASSPHRASE | The passphrase used to decrypt secured data.
| WEECHAT_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path). | WEECHAT_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path).
|=== |===
@@ -4110,7 +4110,7 @@ WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
* <<irc_ircv3_batch,batch>> * <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>> * <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>> * <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>> * <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>> * <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>> * <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>> * <<irc_ircv3_invite_notify,invite-notify>>
@@ -4158,7 +4158,7 @@ Specification: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^
This capability allows the server to send account as message tag to commands This capability allows the server to send account as message tag to commands
sent to the client. + sent to the client. +
WeeChat parses this tag and saves it in the message, but it is not used or WeeChat parses this tag and saves it in the message, but it is not used or
displayed. It can be used in <<command_weechat_filter,/filter>> command to filter displayed. It can be used in <<command_filter,/filter>> command to filter
messages matching specific accounts. messages matching specific accounts.
Example of raw IRC message received: Example of raw IRC message received:
+4 -6
View File
@@ -2232,7 +2232,7 @@ char **weechat_string_split_command (const char *command, char separator);
戻り値: 戻り値:
* 文字列の配列、分割に失敗した場合は NULL (使用後には必ず * 文字列の配列、分割に失敗した場合は NULL (使用後には必ず
<<_string_free_split_command,string_free_split_command>> を呼び出して領域を開放してください) <<_free_split_command,free_split_command>> を呼び出して領域を開放してください)
C 言語での使用例: C 言語での使用例:
@@ -4937,7 +4937,7 @@ weechat_printf (NULL, "date: %s",
// TRANSLATION MISSING // TRANSLATION MISSING
==== util_strftimeval ==== util_strftimeval
_WeeChat ≥ 4.2.0, updated in 4.3.0, 4.7.0._ _WeeChat ≥ 4.2.0, updated in 4.3.0._
Format date and time like function `strftime` in C library, using `struct timeval` Format date and time like function `strftime` in C library, using `struct timeval`
as input, and supporting extra specifiers. as input, and supporting extra specifiers.
@@ -4954,8 +4954,6 @@ Arguments:
* _string_: buffer where the formatted string is stored * _string_: buffer where the formatted string is stored
* _max_: string size * _max_: string size
* _format_: format, the same as _strftime_ function, with these extra specifiers: * _format_: format, the same as _strftime_ function, with these extra specifiers:
** `%@`: return the date expressed in Coordinated Universal Time (UTC)
instead of date relative to the user's specified timezone _(WeeChat ≥ 4.7.0)_
** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits ** `%.N` where `N` is between 1 and 6: zero-padded microseconds on N digits
(for example `%.3` for milliseconds) (for example `%.3` for milliseconds)
** `%f`: alias of `%.6` ** `%f`: alias of `%.6`
@@ -4972,8 +4970,8 @@ C example:
char time[256]; char time[256];
struct timeval tv; struct timeval tv;
gettimeofday (&tv, NULL); gettimeofday (&tv, NULL);
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv); weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
/* result: 2023-12-26T18:10:04.460509Z */ /* result: 2023-12-26T18:10:04.460509 */
---- ----
[NOTE] [NOTE]
+3 -3
View File
@@ -659,7 +659,7 @@ include::includes/cmdline_options.ja.adoc[tag=debug]
|=== |===
| 変数名 | 説明 | 変数名 | 説明
// TRANSLATION MISSING // TRANSLATION MISSING
| WEECHAT_HOME | WeeChat ホームディレクトリ (ここには設定ファイル、ログ、スクリプトなどがあります) Same behavior as <<build,CMake option>> `WEECHAT_HOME`. | WEECHAT_HOME | WeeChat ホームディレクトリ (ここには設定ファイル、ログ、スクリプトなどがあります) Same behavior as <<compile_with_cmake,CMake option>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE | 暗号化データを復号化するためのパスフレーズ | WEECHAT_PASSPHRASE | 暗号化データを復号化するためのパスフレーズ
| WEECHAT_EXTRA_LIBDIR | プラグインをロードするための追加ディレクトリパス (設定したパス内の "plugins" ディレクトリからロードします) | WEECHAT_EXTRA_LIBDIR | プラグインをロードするための追加ディレクトリパス (設定したパス内の "plugins" ディレクトリからロードします)
|=== |===
@@ -3982,7 +3982,7 @@ WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
* <<irc_ircv3_cap_notify,cap-notify>> * <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_batch,batch>> * <<irc_ircv3_batch,batch>>
* <<irc_ircv3_chghost,chghost>> * <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>> * <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>> * <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>> * <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>> * <<irc_ircv3_invite_notify,invite-notify>>
@@ -4030,7 +4030,7 @@ Specification: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^
This capability allows the server to send account as message tag to commands This capability allows the server to send account as message tag to commands
sent to the client. + sent to the client. +
WeeChat parses this tag and saves it in the message, but it is not used or WeeChat parses this tag and saves it in the message, but it is not used or
displayed. It can be used in <<command_weechat_filter,/filter>> command to filter displayed. It can be used in <<command_filter,/filter>> command to filter
messages matching specific accounts. messages matching specific accounts.
Example of raw IRC message received: Example of raw IRC message received:
+3 -3
View File
@@ -620,7 +620,7 @@ Niektóre zmienne śwodowiskowe są używane przez WeeChat o ile zostały zdefin
[width="100%",cols="1m,6",options="header"] [width="100%",cols="1m,6",options="header"]
|=== |===
| Nazwa | Opis | Nazwa | Opis
| WEECHAT_HOME | Katalog domowy WeeChat (z plikami konfiguracyjnymi, logami, skryptami, ...). Działa tak samo jak <<build,opcja CMake>> `WEECHAT_HOME`. | WEECHAT_HOME | Katalog domowy WeeChat (z plikami konfiguracyjnymi, logami, skryptami, ...). Działa tak samo jak <<compile_with_cmake,opcja CMake>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE | Hasło używane do odszyfrowania zabezpieczonych danych. | WEECHAT_PASSPHRASE | Hasło używane do odszyfrowania zabezpieczonych danych.
| WEECHAT_EXTRA_LIBDIR | Dodatkowy katalog do ładowania wtyczek (z katalogu "plugins" znajdującego się pod tą ścieżką). | WEECHAT_EXTRA_LIBDIR | Dodatkowy katalog do ładowania wtyczek (z katalogu "plugins" znajdującego się pod tą ścieżką).
|=== |===
@@ -3785,7 +3785,7 @@ WeeChat wspiera następujące https://ircv3.net/irc/[rozszerzenia IRCv3 ^↗^^]
* <<irc_ircv3_batch,batch>> * <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>> * <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>> * <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>> * <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>> * <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>> * <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>> * <<irc_ircv3_invite_notify,invite-notify>>
@@ -3833,7 +3833,7 @@ Specyfikacja: https://ircv3.net/specs/extensions/account-tag[account-tag ^↗^^
Ta właściwość pozwala serwerowi na wysyłanie komend konta jako tagów wiadomości Ta właściwość pozwala serwerowi na wysyłanie komend konta jako tagów wiadomości
do komend wysyłanych do klienta. + do komend wysyłanych do klienta. +
WeeChat parsuje te tagi i zapisuje je w wiadomości ale nie jest on używany ani WeeChat parsuje te tagi i zapisuje je w wiadomości ale nie jest on używany ani
wyświetlany. Można ich użyć w komendzie <<command_weechat_filter,/filter>> do filtrowania wyświetlany. Można ich użyć w komendzie <<command_filter,/filter>> do filtrowania
wiadmości pasujących do konkretnych kont: wiadmości pasujących do konkretnych kont:
Przykład otrzymanej nieprzetworzonej wiadomości: Przykład otrzymanej nieprzetworzonej wiadomości:
+58 -29
View File
@@ -91,23 +91,33 @@ qweechat::
|       typing/ | Typing додатак. |       typing/ | Typing додатак.
|       xfer/ | Xfer додатак (IRC DCC фајл/разговор). |       xfer/ | Xfer додатак (IRC DCC фајл/разговор).
| tests/ | Тестови. | tests/ | Тестови.
|    fuzz/ | Fuzz тестирање. // TRANSLATION MISSING
| core/ | Fuzz тестирање функција језгра. |    fuzz/ | Fuzz testing.
// TRANSLATION MISSING
| core/ | Fuzz testing for core functions.
|    unit/ | Unit тестови. |    unit/ | Unit тестови.
|       core/ | Unit тестови за функције језгра. |       core/ | Unit тестови за функције језгра.
|       hook/ | Unit тестову за функције куке. // TRANSLATION MISSING
|       hook/ | Unit tests for hook functions.
|       gui/ | Unit тестови за функције интерфејса. |       gui/ | Unit тестови за функције интерфејса.
|       curses/ | Unit тестови за функције Curses интерфејса. // TRANSLATION MISSING
|       curses/ | Unit tests for Curses interface functions.
|    scripts/ | Тестови за API скриптовања. |    scripts/ | Тестови за API скриптовања.
|       python/ | Python скрипте за генерисање и покретање тестова за API скриптовања. |       python/ | Python скрипте за генерисање и покретање тестова за API скриптовања.
|       plugins/ | Unit тестови за додатке. |       plugins/ | Unit тестови за додатке.
|          alias/ | Unit тестови за alias додатак. // TRANSLATION MISSING
|          alias/ | Unit tests for alias plugin.
|          irc/ | Unit тестови за IRC додатак. |          irc/ | Unit тестови за IRC додатак.
|          logger/ | Unit тестови за logger додатак. // TRANSLATION MISSING
|          relay/ | Unit тестови за relay додатак. |          logger/ | Unit tests for logger plugin.
|          trigger/ | Unit тестови за trigger додатак. // TRANSLATION MISSING
|          typing/ | Unit тестови за typing додатак. |          relay/ | Unit tests for relay plugin.
|          xfer/ | Unit тестови за xfer додатак. // TRANSLATION MISSING
|          trigger/ | Unit tests for trigger plugin.
// TRANSLATION MISSING
|          typing/ | Unit tests for typing plugin.
// TRANSLATION MISSING
|          xfer/ | Unit tests for xfer plugin.
| doc/ | Документација. | doc/ | Документација.
| po/ | Фајлови превода (gettext). | po/ | Фајлови превода (gettext).
| debian/ | Debian паковање. | debian/ | Debian паковање.
@@ -416,15 +426,24 @@ WeeChat „језгро” се налази у следећим директо
|=== |===
| Путања/фајл | Опис | Путања/фајл | Опис
| tests/ | Корен тестова. | tests/ | Корен тестова.
|    fuzz/ | Корен fuzz тестирања. // TRANSLATION MISSING
| ossfuzz.sh | Скрипта изградње за https://github.com/google/oss-fuzz[OSS-Fuzz ^↗^^]. |    fuzz/ | Root of fuzz testing.
|       core/ | Корен fuzz тестирања за језгро. // TRANSLATION MISSING
|       calc-fuzzer.c | Fuzz тестирање: калкулација израза. | ossfuzz.sh | Build script for https://github.com/google/oss-fuzz[OSS-Fuzz ^↗^^].
|       crypto-fuzzer.c | Fuzz тестирање: криптографске функције. // TRANSLATION MISSING
|       secure-fuzzer.c | Fuzz тестирање: обезбеђени подаци. |       core/ | Root of fuzz testing for core.
|       string-fuzzer.c | Fuzz тестирање: стрингови. // TRANSLATION MISSING
|       utf8-fuzzer.c | Fuzz тестирање: UTF-8. |       calc-fuzzer.c | Fuzz testing: калкулација израза.
|       util-fuzzer.c | Fuzz тестирање: услужне функције. // TRANSLATION MISSING
|       crypto-fuzzer.c | Fuzz testing: криптографске функције.
// TRANSLATION MISSING
|       secure-fuzzer.c | Fuzz testing: secured data.
// TRANSLATION MISSING
|       string-fuzzer.c | Fuzz testing: стрингови.
// TRANSLATION MISSING
|       utf8-fuzzer.c | Fuzz testing: UTF-8.
// TRANSLATION MISSING
|       util-fuzzer.c | Fuzz testing: utility functions.
|    unit/ | Корен unit тестова. |    unit/ | Корен unit тестова.
|    tests.cpp | Програм који се користи за извршавање свих тестова. |    tests.cpp | Програм који се користи за извршавање свих тестова.
|    tests-record.cpp | Бележење и претрага у приказаним порукама. |    tests-record.cpp | Бележење и претрага у приказаним порукама.
@@ -471,10 +490,13 @@ WeeChat „језгро” се налази у следећим директо
|             test-hook-timer.cpp | Тестови: куке „timer”. |             test-hook-timer.cpp | Тестови: куке „timer”.
|             test-hook-url.cpp | Тестови: куке „url”. |             test-hook-url.cpp | Тестови: куке „url”.
|       gui/ | Корен unit тестова интерфејса. |       gui/ | Корен unit тестова интерфејса.
|          test-gui-bar-item-custom.cpp | Тестови: функције ставки прилагођене траке. // TRANSLATION MISSING
|          test-gui-bar-item.cpp | Тестови: функције ставки траке. |          test-gui-bar-item-custom.cpp | Tests: custom bar item functions.
// TRANSLATION MISSING
|          test-gui-bar-item.cpp | Tests: bar item functions.
|          test-gui-bar-window.cpp | Тестови: функције прозора траке. |          test-gui-bar-window.cpp | Тестови: функције прозора траке.
|          test-gui-bar.cpp | Тестови: функције траке. // TRANSLATION MISSING
|          test-gui-bar.cpp | Tests: bar functions.
|          test-gui-buffer.cpp | Тестови: бафер функције. |          test-gui-buffer.cpp | Тестови: бафер функције.
|          test-gui-chat.cpp | Тестови: чет функције. |          test-gui-chat.cpp | Тестови: чет функције.
|          test-gui-color.cpp | Тестови: боје. |          test-gui-color.cpp | Тестови: боје.
@@ -497,8 +519,10 @@ WeeChat „језгро” се налази у следећим директо
|       test-plugin-config.cpp | Тестови: функције конфигурације додатка. |       test-plugin-config.cpp | Тестови: функције конфигурације додатка.
|       test-plugin-api-info.cpp | Тестови: инфо функције API додатака. |       test-plugin-api-info.cpp | Тестови: инфо функције API додатака.
|       test-plugins.cpp | Тестови: plugins. |       test-plugins.cpp | Тестови: plugins.
|          alias/ | Корен unit тестова за alias додатак. // TRANSLATION MISSING
|             test-alias.cpp | Тестови: алијаси. |          alias/ | Root of unit tests for alias plugin.
// TRANSLATION MISSING
|             test-alias.cpp | Tests: aliases.
|          irc/ | Корен unit тестова IRC додатка. |          irc/ | Корен unit тестова IRC додатка.
|             test-irc-batch.cpp | Тестови: IRC пакетни догађаји. |             test-irc-batch.cpp | Тестови: IRC пакетни догађаји.
|             test-irc-buffer.cpp | Тестови: IRC бафери. |             test-irc-buffer.cpp | Тестови: IRC бафери.
@@ -532,9 +556,12 @@ WeeChat „језгро” се налази у следећим директо
|                test-relay-api.cpp | Тестови: Релеј „api” протокол: опште функције. |                test-relay-api.cpp | Тестови: Релеј „api” протокол: опште функције.
|                test-relay-api-msg.cpp | Тестови: Релеј „api” протокол: поруке. |                test-relay-api-msg.cpp | Тестови: Релеј „api” протокол: поруке.
|                test-relay-api-protocol.cpp | Тестови: Релеј „api” протокол: протокол. |                test-relay-api-protocol.cpp | Тестови: Релеј „api” протокол: протокол.
|             remote/ | Тестови: Релеј „api” протокол: удаљене функције. // TRANSLATION MISSING
|             test-relay-remote-event.cpp | Тестови: Релеј „api” протокол: удаљени догађаји. |             remote/ | Tests: Relay "api" protocol: remote functions.
|             test-relay-remote-network.cpp | Тестови: Релеј „api” протокол: удаљена мрежа. // TRANSLATION MISSING
|             test-relay-remote-event.cpp | Tests: Relay "api" protocol: remote events.
// TRANSLATION MISSING
|             test-relay-remote-network.cpp | Tests: Relay "api" protocol: remote network.
|             irc/ | Корен unit тестова за Релеј „irc” протокол. |             irc/ | Корен unit тестова за Релеј „irc” протокол.
|                test-relay-irc.cpp | Тестови: Релеј „irc” протокол. |                test-relay-irc.cpp | Тестови: Релеј „irc” протокол.
|          trigger/ | Корен unit тестова за окидач додатак. |          trigger/ | Корен unit тестова за окидач додатак.
@@ -1235,11 +1262,13 @@ server->hook_timer_sasl = weechat_hook_timer (timeout * 1000,
| tests/fuzz | tests/fuzz
| tests/fuzz/* | tests/fuzz/*
| Fuzz тестирање // TRANSLATION MISSING
| Fuzz testing
| tests/unit | tests/unit
| tests/unit/* | tests/unit/*
| Unit тестови // TRANSLATION MISSING
| Unit tests
| doc | doc
| doc/* | doc/*
+12 -13
View File
@@ -2086,7 +2086,7 @@ char **weechat_string_split_command (const char *command, char separator);
Повратна вредност: Повратна вредност:
* низ стрингова, NULL у случају проблема (након употребе мора да се ослободи позивом <<_string_free_split_command,string_free_split_command>>) * низ стрингова, NULL у случају проблема (након употребе мора да се ослободи позивом <<_free_split_command,free_split_command>>)
C пример: C пример:
@@ -4484,11 +4484,12 @@ if (weechat_file_compress ("/tmp/test.txt", "/tmp/test.txt.zst", "zstd", 50))
[NOTE] [NOTE]
Ова функција није доступна у API скриптовања. Ова функција није доступна у API скриптовања.
// TRANSLATION MISSING
==== file_compare ==== file_compare
_WeeChat ≥ 4.7.0._ _WeeChat ≥ 4.7.0._
Пореди садржаје два фајла. Compare the content of two files.
Прототип: Прототип:
@@ -4499,14 +4500,14 @@ int weechat_file_compare (const char *filename1, const char *filename2);
Аргументи: Аргументи:
* _filename1_: први фајл за поређење * _filename1_: first file to compare
* _filename2_: други фајл за поређење * _filename2_: second file to compare
Повратна вредност: Повратна вредност:
* 0: оба фајла имају исти садржај * 0: both files have same content
* 1: садржај се разликује * 1: content is different
* 2: грешка (фајл није пронађен или грешка при читању) * 2: error (file not found or read error)
C пример: C пример:
@@ -4514,7 +4515,7 @@ C пример:
---- ----
if (weechat_file_compare ("/tmp/test.txt", "/tmp/test2.txt") == 0) if (weechat_file_compare ("/tmp/test.txt", "/tmp/test2.txt") == 0)
{ {
/* исти садржај */ /* same content */
} }
---- ----
@@ -4662,7 +4663,7 @@ weechat_printf (NULL, "date: %s",
==== util_strftimeval ==== util_strftimeval
_WeeChat ≥ 4.2.0, ажурирано у 4.3.0, 4.7.0._ _WeeChat ≥ 4.2.0, ажурирано у 4.3.0._
Форматира датум и време као функција `strftime` из C библиотеке, користећи `struct timeval` Форматира датум и време као функција `strftime` из C библиотеке, користећи `struct timeval`
као улаз уз подршку за додатне спецификаторе. као улаз уз подршку за додатне спецификаторе.
@@ -4679,8 +4680,6 @@ int weechat_util_strftimeval (char *string, int max, const char *format, struct
* _string_: бафер у који се смешта форматирани стринг * _string_: бафер у који се смешта форматирани стринг
* _max_: величина стринга * _max_: величина стринга
* _format_: формат, исто као за _strftime_ функцију, са следећим додатним спецификаторима: * _format_: формат, исто као за _strftime_ функцију, са следећим додатним спецификаторима:
** `%@`: враћа датум изражен у Coordinated Universal Time (UTC) уместо као датум
релативан у односу на временску зону коју је задао корисник _(WeeChat ≥ 4.7.0)_
** `%.N` где је `N` између 1 и 6: микросекунде допуњене нулама на N цифара ** `%.N` где је `N` између 1 и 6: микросекунде допуњене нулама на N цифара
(на пример `%.3` за милисекунде) (на пример `%.3` за милисекунде)
** `%f`: алијас за `%.6` ** `%f`: алијас за `%.6`
@@ -4697,8 +4696,8 @@ C пример:
char time[256]; char time[256];
struct timeval tv; struct timeval tv;
gettimeofday (&tv, NULL); gettimeofday (&tv, NULL);
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv); weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
/* резултат: 2023-12-26T18:10:04.460509Z */ /* резултат: 2023-12-26T18:10:04.460509 */
---- ----
[NOTE] [NOTE]
+7 -5
View File
@@ -595,7 +595,7 @@ include::includes/cmdline_options.sr.adoc[tag=debug]
[width="100%", cols="1m,6", options="header"] [width="100%", cols="1m,6", options="header"]
|=== |===
| Име | Опис | Име | Опис
| WEECHAT_HOME | WeeChat почетни директоријум (са конфигурационим фајловима, логовима, скриптама, итд.). Исто понашање као <<build,CMake опција>> `WEECHAT_HOME`. | WEECHAT_HOME | WeeChat почетни директоријум (са конфигурационим фајловима, логовима, скриптама, итд.). Исто понашање као <<compile_with_cmake,CMake опција>> `WEECHAT_HOME`.
| WEECHAT_PASSPHRASE | Тајна реченица која се користи за дешифровање обезбеђених података. | WEECHAT_PASSPHRASE | Тајна реченица која се користи за дешифровање обезбеђених података.
| WEECHAT_EXTRA_LIBDIR | Додатни директоријум из кога се учитавају додаци (из „plugins” директоријума на овој путањи). | WEECHAT_EXTRA_LIBDIR | Додатни директоријум из кога се учитавају додаци (из „plugins” директоријума на овој путањи).
|=== |===
@@ -1002,7 +1002,8 @@ WeeChat командна линија (на дну прозора) вам омо
kbd:[yyyyyy] | Текст у боји `xxxxxx` и позадина `yyyyyy` (RGB као хексадецимални број). kbd:[yyyyyy] | Текст у боји `xxxxxx` и позадина `yyyyyy` (RGB као хексадецимални број).
| kbd:[Ctrl+c], kbd:[i] | Текст у курзиву. | kbd:[Ctrl+c], kbd:[i] | Текст у курзиву.
| kbd:[Ctrl+c], kbd:[o] | Искључивање боје и атрибута. | kbd:[Ctrl+c], kbd:[o] | Искључивање боје и атрибута.
| kbd:[Ctrl+c], kbd:[s] | Прецртани текст (у ncurses интерфејсу се приказује као полусветао јер се не подржава прецртавање). // TRANSLATION MISSING
| kbd:[Ctrl+c], kbd:[s] | Strikethrough text (displayed as half bright in ncurses interface because strikethrough is not supported).
| kbd:[Ctrl+c], kbd:[v] | Обрнути видео (боје текста и позадине се замењују једна са другом). | kbd:[Ctrl+c], kbd:[v] | Обрнути видео (боје текста и позадине се замењују једна са другом).
| kbd:[Ctrl+c], kbd:[_] | Подвучени текст. | kbd:[Ctrl+c], kbd:[_] | Подвучени текст.
|=== |===
@@ -1548,7 +1549,8 @@ WeeChat нуди доста подразумеваних тастерских п
| kbd:[Ctrl+c], kbd:[d] | Уметање кода за обојени текст (RGB боја, као хексадецимални број). | `+/input insert \x04+` | kbd:[Ctrl+c], kbd:[d] | Уметање кода за обојени текст (RGB боја, као хексадецимални број). | `+/input insert \x04+`
| kbd:[Ctrl+c], kbd:[i] | Уметање кода за текст у курзиву. | `+/input insert \x1D+` | kbd:[Ctrl+c], kbd:[i] | Уметање кода за текст у курзиву. | `+/input insert \x1D+`
| kbd:[Ctrl+c], kbd:[o] | Уметање кода за ресет боје. | `+/input insert \x0F+` | kbd:[Ctrl+c], kbd:[o] | Уметање кода за ресет боје. | `+/input insert \x0F+`
| kbd:[Ctrl+c], kbd:[s] | Уметање кода за прецртани текст. | `+/input insert \x1E+` // TRANSLATION MISSING
| kbd:[Ctrl+c], kbd:[s] | Insert code for strikethrough text. | `+/input insert \x1E+`
| kbd:[Ctrl+c], kbd:[v] | Уметање кода за обрнуту боју. | `+/input insert \x16+` | kbd:[Ctrl+c], kbd:[v] | Уметање кода за обрнуту боју. | `+/input insert \x16+`
| kbd:[Ctrl+c], kbd:[_] | Уметање кода за подвучени текст. | `+/input insert \x1F+` | kbd:[Ctrl+c], kbd:[_] | Уметање кода за подвучени текст. | `+/input insert \x1F+`
|=== |===
@@ -3554,7 +3556,7 @@ WeeChat подржава следећа https://ircv3.net/irc/[IRCv3 проши
* <<irc_ircv3_batch,batch>> * <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>> * <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>> * <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>> * <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>> * <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>> * <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>> * <<irc_ircv3_invite_notify,invite-notify>>
@@ -3600,7 +3602,7 @@ WeeChat такве поруке приказује ако је опција
Ова могућност оспособљава сервер да шаље налог као ознаку поруке у командама које шаље клијенту. + Ова могућност оспособљава сервер да шаље налог као ознаку поруке у командама које шаље клијенту. +
WeeChat парсира ову ознаку у чува је у поруци, али се она не користи нити приказује. Може да се WeeChat парсира ову ознаку у чува је у поруци, али се она не користи нити приказује. Може да се
користи у <<command_weechat_filter,/filter>> команди за филтрирање порука које се подударају са користи у <<command_filter,/filter>> команди за филтрирање порука које се подударају са
одређеним налозима. одређеним налозима.
Пример примљене сирове IRC поруке: Пример примљене сирове IRC поруке:
+2 -1
View File
@@ -81,7 +81,8 @@ foreach(pofile ${PO_FILES})
add_custom_command( add_custom_command(
OUTPUT "${mofile}" OUTPUT "${mofile}"
COMMAND "${MSGMERGE_EXECUTABLE}" ARGS --quiet -o "${CMAKE_CURRENT_BINARY_DIR}/${pofile}" "${CMAKE_CURRENT_SOURCE_DIR}/${pofile}" ${POT_FILE_PATH} COMMAND "${MSGMERGE_EXECUTABLE}" ARGS --quiet -o "${CMAKE_CURRENT_BINARY_DIR}/${pofile}" "${CMAKE_CURRENT_SOURCE_DIR}/${pofile}" ${POT_FILE_PATH}
COMMAND "${MSGFMT_EXECUTABLE}" ARGS -c --statistics --verbose -o "${mofile}" "${CMAKE_CURRENT_BINARY_DIR}/${pofile}" COMMAND "${MSGFMT_EXECUTABLE}" ARGS -o "${mofile}" "${CMAKE_CURRENT_BINARY_DIR}/${pofile}"
COMMAND "${MSGFMT_EXECUTABLE}" ARGS -c --statistics --verbose --output-file=/dev/null "${CMAKE_CURRENT_BINARY_DIR}/${pofile}"
DEPENDS "${POT_FILE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/${pofile}" DEPENDS "${POT_FILE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/${pofile}"
COMMENT "Compiling ${polang}.po" COMMENT "Compiling ${polang}.po"
) )
+4 -6
View File
@@ -23,7 +23,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:24+0200\n" "PO-Revision-Date: 2025-05-04 09:24+0200\n"
"Last-Translator: Ondřej Súkup <mimi.vx@gmail.com>\n" "Last-Translator: Ondřej Súkup <mimi.vx@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -5440,10 +5440,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "upozornit uživatele pokud nastane částečné doplnění" msgstr "upozornit uživatele pokud nastane částečné doplnění"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6379,13 +6375,15 @@ msgstr "Myš je vypnuta"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', velikost: %dx%d" msgstr " TERM='%s', velikost: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "" msgstr ""
#, fuzzy #, fuzzy, c-format
msgid "fork error" msgid "fork error"
msgstr "chyba" msgstr "chyba"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
+7 -7
View File
@@ -28,7 +28,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-05 09:24+0200\n" "PO-Revision-Date: 2025-05-05 09:24+0200\n"
"Last-Translator: Nils Görs <weechatter@arcor.de>\n" "Last-Translator: Nils Görs <weechatter@arcor.de>\n"
"Language-Team: German <kde-i18n-de@kde.org>\n" "Language-Team: German <kde-i18n-de@kde.org>\n"
@@ -6199,10 +6199,6 @@ msgid "send alert (BEL) when a partial completion occurs"
msgstr "" msgstr ""
"erzeugt eine Mitteilung (BEL) wenn eine teilweise Vervollständigung auftritt" "erzeugt eine Mitteilung (BEL) wenn eine teilweise Vervollständigung auftritt"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -7232,12 +7228,15 @@ msgstr "Maus ist inaktiv"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', Größe: %dx%d" msgstr " TERM='%s', Größe: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "WeeChat wird im Hintergrund ausgeführt..." msgstr "WeeChat wird im Hintergrund ausgeführt..."
#, c-format
msgid "fork error" msgid "fork error"
msgstr "Fork-Fehler" msgstr "Fork-Fehler"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
@@ -7838,8 +7837,8 @@ msgstr ""
msgid " - ${number_zero2}: like ${number2} but the number is zero-padded" msgid " - ${number_zero2}: like ${number2} but the number is zero-padded"
msgstr "" msgstr ""
" - ${number_zero2}: wie ${number2}, aber die Zahl wird mit Nullen " " - ${number_zero2}: wie ${number2}, aber die Zahl wird mit Nullen"
"aufgefüllt" " aufgefüllt"
msgid "" msgid ""
" - ${number_displayed}: \"1\" if the number is displayed, otherwise \"0\"" " - ${number_displayed}: \"1\" if the number is displayed, otherwise \"0\""
@@ -18964,3 +18963,4 @@ msgstr ""
"%s%s Datei \"%s\" zum Fortsetzen der Übertragung wird nicht akzeptiert " "%s%s Datei \"%s\" zum Fortsetzen der Übertragung wird nicht akzeptiert "
"(Port: %d, Startposition: %llu): xfer nicht gefunden oder nicht bereit für " "(Port: %d, Startposition: %llu): xfer nicht gefunden oder nicht bereit für "
"Transfer" "Transfer"
+6 -8
View File
@@ -24,7 +24,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Santiago Forero <santiago@forero.xyz>\n" "Last-Translator: Santiago Forero <santiago@forero.xyz>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -170,7 +170,7 @@ msgid ""
"%sRenumbering is allowed only if option weechat.look.buffer_auto_renumber is " "%sRenumbering is allowed only if option weechat.look.buffer_auto_renumber is "
"off" "off"
msgstr "" msgstr ""
"%sEl renombrado es permitido solo si la opción " "%sEl renombrado es permitido solo sila opción "
"weechat.look.buffer_auto_renumber está desactivada (off)" "weechat.look.buffer_auto_renumber está desactivada (off)"
#, c-format #, c-format
@@ -846,7 +846,7 @@ msgstr "%sError: opción \"%s\" no encontrada"
#, fuzzy #, fuzzy
#| msgid "Option changed: " #| msgid "Option changed: "
msgid "Option unchanged: " msgid "Option unchanged: "
msgstr "Opción sin cambios: " msgstr "Opción cambiada: "
msgid "Option changed: " msgid "Option changed: "
msgstr "Opción cambiada: " msgstr "Opción cambiada: "
@@ -5577,10 +5577,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "alertar al usuario cuando ocurre un completado parcial" msgstr "alertar al usuario cuando ocurre un completado parcial"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6563,13 +6559,15 @@ msgstr "Ratón desactivado"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', tamaño: %dx%d" msgstr " TERM='%s', tamaño: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "" msgstr ""
#, fuzzy #, fuzzy, c-format
msgid "fork error" msgid "fork error"
msgstr "error" msgstr "error"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
+5 -8
View File
@@ -23,8 +23,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-06-30 09:34+0200\n" "PO-Revision-Date: 2025-05-04 09:24+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n" "Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: fr\n" "Language: fr\n"
@@ -6068,12 +6068,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "envoyer une alerte (BEL) lorsqu'une complétion partielle survient" msgstr "envoyer une alerte (BEL) lorsqu'une complétion partielle survient"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
"étendre automatiquement le mot après une complétion partielle lors d'une "
"nouvelle complétion"
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -7095,12 +7089,15 @@ msgstr "La souris est désactivée"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', taille : %dx%d" msgstr " TERM='%s', taille : %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "Lancement de WeeChat en tâche de fond..." msgstr "Lancement de WeeChat en tâche de fond..."
#, c-format
msgid "fork error" msgid "fork error"
msgstr "erreur de fork" msgstr "erreur de fork"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
+4 -6
View File
@@ -22,7 +22,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n" "Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -5144,10 +5144,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "" msgstr ""
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6041,13 +6037,15 @@ msgstr "Nincs aliasz definiálva.\n"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr "" msgstr ""
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "" msgstr ""
#, fuzzy #, fuzzy, c-format
msgid "fork error" msgid "fork error"
msgstr "%sSzerver: %s%s\n" msgstr "%sSzerver: %s%s\n"
#, c-format
msgid "OK" msgid "OK"
msgstr "Rendben" msgstr "Rendben"
+4 -6
View File
@@ -22,7 +22,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n" "Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -5560,10 +5560,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "avvisa l'utente quando si verifica un completamento parziale" msgstr "avvisa l'utente quando si verifica un completamento parziale"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6501,13 +6497,15 @@ msgstr "Mouse disabilitato"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', dimensione %dx%d" msgstr " TERM='%s', dimensione %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "" msgstr ""
#, fuzzy #, fuzzy, c-format
msgid "fork error" msgid "fork error"
msgstr "errore" msgstr "errore"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
+4 -5
View File
@@ -22,7 +22,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n" "Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
"Language-Team: Japanese <https://github.com/l/weechat/tree/master/" "Language-Team: Japanese <https://github.com/l/weechat/tree/master/"
@@ -5740,10 +5740,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "補完候補が複数あった場合に警告 (BEL) を送信" msgstr "補完候補が複数あった場合に警告 (BEL) を送信"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6716,12 +6712,15 @@ msgstr "マウスを無効化しました"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s'、サイズ: %dx%d" msgstr " TERM='%s'、サイズ: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "WeeChat をバックグラウンドで実行中..." msgstr "WeeChat をバックグラウンドで実行中..."
#, c-format
msgid "fork error" msgid "fork error"
msgstr "フォークエラー" msgstr "フォークエラー"
#, c-format
msgid "OK" msgid "OK"
msgstr "成功" msgstr "成功"
+4 -5
View File
@@ -24,7 +24,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Krzysztof Korościk <soltys@soltys.info>\n" "Last-Translator: Krzysztof Korościk <soltys@soltys.info>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -6037,10 +6037,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "wyślij alarm (BEL), kiedy nastąpi częściowe dopełnienie" msgstr "wyślij alarm (BEL), kiedy nastąpi częściowe dopełnienie"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -7084,12 +7080,15 @@ msgstr "Obsługa myszy wyłączona"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', rozmiar: %dx%d" msgstr " TERM='%s', rozmiar: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "Uruchamianie WeeChat w tle..." msgstr "Uruchamianie WeeChat w tle..."
#, c-format
msgid "fork error" msgid "fork error"
msgstr "nie udało się utworzyć procesu" msgstr "nie udało się utworzyć procesu"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
+4 -6
View File
@@ -22,7 +22,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n" "Last-Translator: Vasco Almeida <vascomalmeida@sapo.pt>\n"
"Language-Team: Portuguese <>\n" "Language-Team: Portuguese <>\n"
@@ -5778,10 +5778,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "alertar o utilizador ao completar parcialmente" msgstr "alertar o utilizador ao completar parcialmente"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6758,13 +6754,15 @@ msgstr "O rato está desativado"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', tamanho: %dx%d" msgstr " TERM='%s', tamanho: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "" msgstr ""
#, fuzzy #, fuzzy, c-format
msgid "fork error" msgid "fork error"
msgstr "erro" msgstr "erro"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
+4 -6
View File
@@ -23,7 +23,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Érico Nogueira <ericonr@disroot.org>\n" "Last-Translator: Érico Nogueira <ericonr@disroot.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -5481,10 +5481,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "alertar usuário quando uma completação parcial ocorre" msgstr "alertar usuário quando uma completação parcial ocorre"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6408,13 +6404,15 @@ msgstr "Mouse está desabilitado"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', tamanho: %dx%d" msgstr " TERM='%s', tamanho: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "" msgstr ""
#, fuzzy #, fuzzy, c-format
msgid "fork error" msgid "fork error"
msgstr "%s%s: erro: %s" msgstr "%s%s: erro: %s"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
+4 -6
View File
@@ -23,7 +23,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-05-04 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n" "Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -5178,10 +5178,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "" msgstr ""
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6079,13 +6075,15 @@ msgstr "Сокращения не заданы.\n"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr "" msgstr ""
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "" msgstr ""
#, fuzzy #, fuzzy, c-format
msgid "fork error" msgid "fork error"
msgstr "%sСервер: %s%s\n" msgstr "%sСервер: %s%s\n"
#, c-format
msgid "OK" msgid "OK"
msgstr "OK" msgstr "OK"
+7 -9
View File
@@ -22,8 +22,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-07-09 15:48+0400\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n" "Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: sr\n" "Language: sr\n"
@@ -5861,11 +5861,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "шаље упозорење (BEL) када се догоди делимично довршавање" msgstr "шаље упозорење (BEL) када се догоди делимично довршавање"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
"када се поново довршава, аутоматски развија реч након делимичног довршавања"
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6870,12 +6865,15 @@ msgstr "Миш је искључен"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM=%s, величина: %dx%d" msgstr " TERM=%s, величина: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "WeeChat се извршава у позадини..." msgstr "WeeChat се извршава у позадини..."
#, c-format
msgid "fork error" msgid "fork error"
msgstr "грешка при рачвању" msgstr "грешка при рачвању"
#, c-format
msgid "OK" msgid "OK"
msgstr "ОК" msgstr "ОК"
@@ -7440,10 +7438,10 @@ msgstr ""
"бафера" "бафера"
msgid " - ${number_zero}: like ${number} but the number is zero-padded" msgid " - ${number_zero}: like ${number} but the number is zero-padded"
msgstr " - ${number_zero}: као ${number} али се број допуњава нулама" msgstr ""
msgid " - ${number_zero2}: like ${number2} but the number is zero-padded" msgid " - ${number_zero2}: like ${number2} but the number is zero-padded"
msgstr " - ${number_zero2}: као ${number2} али се број допуњава нулама" msgstr ""
msgid "" msgid ""
" - ${number_displayed}: \"1\" if the number is displayed, otherwise \"0\"" " - ${number_displayed}: \"1\" if the number is displayed, otherwise \"0\""
+269 -176
View File
@@ -1,6 +1,6 @@
# #
# SPDX-FileCopyrightText: 2013 Hasan Kiran <sunder67@hotmail.com> # SPDX-FileCopyrightText: 2013 Hasan Kiran <sunder67@hotmail.com>
# SPDX-FileCopyrightText: 2020-2025 Emir SARI <emir_sari@icloud.com> # SPDX-FileCopyrightText: 2020-2024 Emir SARI <emir_sari@icloud.com>
# #
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
# #
@@ -23,8 +23,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2025-07-06 09:25+0200\n" "PO-Revision-Date: 2025-05-04 09:25+0200\n"
"Last-Translator: Emir SARI <emir_sari@icloud.com>\n" "Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: tr\n" "Language: tr\n"
@@ -246,7 +246,7 @@ msgstr "%sDeğerlendirilecek ifadede hata"
#, c-format #, c-format
msgid " %s%s%s: buffer: %s%s%s / tags: %s / regex: %s" msgid " %s%s%s: buffer: %s%s%s / tags: %s / regex: %s"
msgstr " %s%s%s arabellek: %s%s%s / künyeler: %s / düzenli ifade: %s" msgstr " %s%s%s arabellek: %s%s%s / etiketler: %s / düzenli ifade: %s"
msgid "Message filtering enabled" msgid "Message filtering enabled"
msgstr "İleti süzme etkin" msgstr "İleti süzme etkin"
@@ -270,7 +270,7 @@ msgstr "\"%s\" süzgeci devre dışı"
#, c-format #, c-format
msgid "%sYou must specify at least tags or regex for filter" msgid "%sYou must specify at least tags or regex for filter"
msgstr "%sSüzgeç için en azından künyeler veya düzenli ifade belirtmelisiniz" msgstr "%sSüzgeç için en azından etiketler veya düzenli ifade belirtmelisiniz"
#, c-format #, c-format
msgid "Filter \"%s\" updated:" msgid "Filter \"%s\" updated:"
@@ -354,7 +354,7 @@ msgid "color"
msgstr "renk" msgstr "renk"
msgid "enum" msgid "enum"
msgstr "numaralandırma" msgstr "enümerasyon"
#. TRANSLATORS: please do not translate "(null)" #. TRANSLATORS: please do not translate "(null)"
msgid "undefined value allowed (null)" msgid "undefined value allowed (null)"
@@ -534,9 +534,10 @@ msgstr "Fare etkin"
msgid "Mouse disabled" msgid "Mouse disabled"
msgstr "Fare devre dışı" msgstr "Fare devre dışı"
#, c-format #, fuzzy, c-format
#| msgid "%sInvalid number: \"%s\""
msgid "%sInvalid color: \"%s\"" msgid "%sInvalid color: \"%s\""
msgstr "%sGeçersiz renk: \"%s\"" msgstr "%sGeçersiz numara: \"%s\""
#, c-format #, c-format
msgid "%sUnable to open file \"%s\"" msgid "%sUnable to open file \"%s\""
@@ -1018,6 +1019,10 @@ msgid "> raw[window]: inside windows, with optional conditions (see below)"
msgstr "" msgstr ""
"> raw[window]: pencereler içeride, isteğe bağlı koşullarla (aşağıya bakın)" "> raw[window]: pencereler içeride, isteğe bağlı koşullarla (aşağıya bakın)"
#, fuzzy
#| msgid ""
#| "conditions: the conditions to display the bar (without conditions, the "
#| "bar is always displayed:"
msgid "" msgid ""
"conditions: the conditions to display the bar (without conditions, the bar " "conditions: the conditions to display the bar (without conditions, the bar "
"is always displayed):" "is always displayed):"
@@ -1460,53 +1465,59 @@ msgid "debug functions"
msgstr "hata ayıklama işlevleri" msgstr "hata ayıklama işlevleri"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated #. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
#, fuzzy
#| msgid ""
#| "list || set <plugin> <level> || dump [<plugin>] || hooks [<plugin_mask> "
#| "[<hook_type>...]] || buffer|certs|color|dirs|infolists|key|libs|memory|"
#| "tags|term|url|windows || callbacks <duration>[<unit>] || mouse|cursor "
#| "[verbose] || hdata [free] || time <command> || unicode <string>"
msgid "" msgid ""
"list || set <plugin> <level> || dump [<plugin>] || hooks [<plugin_mask> " "list || set <plugin> <level> || dump [<plugin>] || hooks [<plugin_mask> "
"[<hook_type>...]] || buffer|certs|color|dirs|infolists|key|libs|memory|tags|" "[<hook_type>...]] || buffer|certs|color|dirs|infolists|key|libs|memory|tags|"
"term|url|windows || callbacks <duration>[<unit>] || mouse|cursor [verbose] " "term|url|windows || callbacks <duration>[<unit>] || mouse|cursor [verbose] "
"|| hdata [free] || time <command> || unicode <string> || whitespace" "|| hdata [free] || time <command> || unicode <string> || whitespace"
msgstr "" msgstr ""
"list || set <eklenti> <düzey> || dump [<eklenti>] || hooks [<eklenti_maskesi> " "list || set <eklenti> <düzey> || dump [<eklenti>] || hooks "
"[<kanca_türü>...]] || buffer|certs|color|dirs|infolists|key|libs|memory|tags|" "[<eklenti_maskesi> [<kanca_türü>...]] || buffer|certs|color|dirs|infolists|"
"term|url|windows || callbacks <süre>[<birim>] || mouse|cursor [verbose] " "key|libs|memory|tags|term|url|windows || callbacks <süre>[<birim>] || mouse|"
"|| hdata [free] || time <komut> || unicode <dizi> || whitespace" "cursor [verbose] || hdata [free] || time <komut> || unicode <dizi>"
msgid "raw[list]: list plugins with debug levels" msgid "raw[list]: list plugins with debug levels"
msgstr "raw[list]: Eklentileri hata ayıklama düzeyleriyle listele" msgstr "raw[list]: eklentileri hata ayıklama düzeyleriyle listele"
msgid "raw[set]: set debug level for plugin" msgid "raw[set]: set debug level for plugin"
msgstr "raw[set]: Eklenti için olan hata ayıklama düzeyini listele" msgstr "raw[set]: eklenti için olan hata ayıklama düzeyini listele"
msgid "plugin: name of plugin (\"core\" for WeeChat core)" msgid "plugin: name of plugin (\"core\" for WeeChat core)"
msgstr "eklenti: Eklentinin adı (çekirdek WeeChat için \"core\")" msgstr "eklenti: eklentinin adı (çekirdek WeeChat için \"core\")"
msgid "level: debug level for plugin (0 = disable debug)" msgid "level: debug level for plugin (0 = disable debug)"
msgstr "düzey: Eklenti için hata ayıklama düzeyi (0 = hata ayıklamayı kapat)" msgstr "düzey: eklenti için hata ayıklama düzeyi (0 = hata ayıklamayı kapat)"
msgid "" msgid ""
"raw[dump]: save memory dump in WeeChat log file (same dump is written when " "raw[dump]: save memory dump in WeeChat log file (same dump is written when "
"WeeChat crashes)" "WeeChat crashes)"
msgstr "" msgstr ""
"raw[dump]: Bellek dökümünü WeeChat günlük dosyasına kaydet (aynı döküm " "raw[dump]: bellek dökümünü WeeChat günlük dosyasına kaydet (aynı döküm "
"WeeChat çöktüğünde de yazılır)" "WeeChat çöktüğünde de yazılır)"
msgid "" msgid ""
"raw[hooks]: display infos about hooks (with a plugin: display detailed info " "raw[hooks]: display infos about hooks (with a plugin: display detailed info "
"about hooks created by the plugin)" "about hooks created by the plugin)"
msgstr "" msgstr ""
"raw[hooks]: Kancalar üzerine bilgi görüntüle (eklentiyle: eklenti tarafından " "raw[hooks]: kancalar üzerine bilgi görüntüle (eklentiyle: eklenti tarafından "
"oluşturulan kancalar hakkında ayrıntılı bilgi görüntüle)" "oluşturulan kancalar hakkında ayrıntılı bilgi görüntüle)"
msgid "plugin_mask: plugin mask, \"*\" for all plugins" msgid "plugin_mask: plugin mask, \"*\" for all plugins"
msgstr "eklenti_maskesi: Eklenti maskesi, tüm eklentiler için \"*\"" msgstr "eklenti_maskesi: eklenti maskesi, tüm eklentiler için \"*\""
msgid "hook_type: hook type" msgid "hook_type: hook type"
msgstr "kanca_türü: Kanca türü" msgstr "kanca_türü: kanca türü"
msgid "" msgid ""
"raw[buffer]: dump buffer content with hexadecimal values in WeeChat log file" "raw[buffer]: dump buffer content with hexadecimal values in WeeChat log file"
msgstr "" msgstr ""
"raw[buffer]: Arabellek içeriğini onaltılık değerlerle WeeChat günlük " "raw[buffer]: arabellek içeriğini onaltılık değerlerle WeeChat günlük "
"dosyasına dök" "dosyasına dök"
msgid "" msgid ""
@@ -1514,96 +1525,89 @@ msgid ""
"\"duration\" in the WeeChat log file (0 = disable), where optional unit is " "\"duration\" in the WeeChat log file (0 = disable), where optional unit is "
"one of:" "one of:"
msgstr "" msgstr ""
"raw[callbacks]: \"Süre\"den daha fazla süren kanca ve çubuk ögesi geri " "raw[callbacks]: \"süre\"den daha fazla süren kanca ve çubuk ögesi geri "
"çağrılarını WeeChat günlük dosyasına yaz (0 = devre dışı bırak); isteğe " "çağrılarını WeeChat günlük dosyasına yaz (0 = devre dışı bırak); isteğe "
"bağlı birim şunlardan biridir:" "bağlı birim şunlardan biridir:"
msgid "> raw[us]: microseconds (default)" msgid "> raw[us]: microseconds (default)"
msgstr "> raw[us]: Mikrosaniye (öntanımlı)" msgstr "> raw[us]: mikrosaniye (öntanımlı)"
msgid "> raw[ms]: milliseconds" msgid "> raw[ms]: milliseconds"
msgstr "> raw[ms] Milisaniye" msgstr "> raw[ms] milisaniye"
msgid "> raw[s]: seconds" msgid "> raw[s]: seconds"
msgstr "> raw[s]: Saniye" msgstr "> raw[s]: saniye"
msgid "> raw[m]: minutes" msgid "> raw[m]: minutes"
msgstr "> raw[m]: Dakika" msgstr "> raw[m]: dakika"
msgid "> raw[h]: hours" msgid "> raw[h]: hours"
msgstr "> raw[h]: Saat" msgstr "> raw[h]: saat"
msgid "raw[certs]: display number of loaded trusted certificate authorities" msgid "raw[certs]: display number of loaded trusted certificate authorities"
msgstr "" msgstr ""
"raw[certs]: Yüklü güvenilen sertifika otoritelerinin sayısını görüntüle" "raw[certs]: yüklü güvenilen sertifika otoritelerinin sayısını görüntüle"
msgid "raw[color]: display infos about current color pairs" msgid "raw[color]: display infos about current color pairs"
msgstr "raw[color]: Geçerli renk çiftleri üzerine bilgi görüntüle" msgstr "raw[color]: geçerli renk çiftleri üzerine bilgi görüntüle"
msgid "raw[cursor]: toggle debug for cursor mode" msgid "raw[cursor]: toggle debug for cursor mode"
msgstr "raw[cursor]: İmleç kipi için hata ayıklama kipini aç/kapat" msgstr "raw[cursor]: imleç kipi için hata ayıklama kipini aç/kapat"
msgid "raw[dirs]: display directories" msgid "raw[dirs]: display directories"
msgstr "raw[dirs]: Dizinleri görüntüle" msgstr "raw[dirs]: dizinleri görüntüle"
msgid "" msgid ""
"raw[hdata]: display infos about hdata (with free: remove all hdata in memory)" "raw[hdata]: display infos about hdata (with free: remove all hdata in memory)"
msgstr "raw[hdata]: hdata üzerine bilgi görüntüle" msgstr "raw[hdata]: hdata üzerine bilgi görüntüle"
msgid "raw[infolists]: display infos about infolists" msgid "raw[infolists]: display infos about infolists"
msgstr "raw[infolists]: Bilgi listeleri hakkında bilgi görüntüle" msgstr "raw[infolists]: bilgi listeleri hakkında bilgi görüntüle"
msgid "" msgid ""
"raw[key]: enable keyboard and mouse debug: display raw codes, expanded key " "raw[key]: enable keyboard and mouse debug: display raw codes, expanded key "
"name and associated command (\"q\" to quit this mode)" "name and associated command (\"q\" to quit this mode)"
msgstr "" msgstr ""
"raw[key]: Klavye ve fare hata ayıklamasını etkinleştir: Ham kodları, "
"genişletilmiş düğme adını ve ilişkin komutu görüntüle (bu kipten çıkmak için "
"\"q\" düğmesine basın)"
msgid "raw[libs]: display infos about external libraries used" msgid "raw[libs]: display infos about external libraries used"
msgstr "raw[libs]: Kullanılan dış kitaplıklar hakkında bilgi görüntüle" msgstr ""
msgid "raw[memory]: display infos about memory usage" msgid "raw[memory]: display infos about memory usage"
msgstr "raw[memory]: Bellek kullanımı hakkında bilgi görüntüle" msgstr ""
msgid "raw[mouse]: toggle debug for mouse" msgid "raw[mouse]: toggle debug for mouse"
msgstr "raw[mouse]: Fare için hata ayıklamayı etkinleştir" msgstr ""
msgid "raw[tags]: display tags for lines" msgid "raw[tags]: display tags for lines"
msgstr "raw[tags]: Satırlar için künyeleri görüntüle" msgstr ""
msgid "raw[term]: display infos about terminal" msgid "raw[term]: display infos about terminal"
msgstr "raw[term]: Uçbirim hakkında bilgi görüntüle" msgstr ""
msgid "raw[url]: toggle debug for calls to hook_url (display output hashtable)" msgid "raw[url]: toggle debug for calls to hook_url (display output hashtable)"
msgstr "raw[url]: hook_url'sine olan çağrılar için hata ayıklamayı aç/kapat " msgstr ""
"(çıktı sağlama tablosunu görüntüle)"
msgid "raw[windows]: display windows tree" msgid "raw[windows]: display windows tree"
msgstr "raw[windows]: Pencere ağacını görüntüle" msgstr ""
msgid "" msgid ""
"raw[time]: measure time to execute a command or to send text to the current " "raw[time]: measure time to execute a command or to send text to the current "
"buffer" "buffer"
msgstr "raw[time]: Geçerli arabelleğe metin göndermek veya üzerinde komut " msgstr ""
"yürütmek için gereken zamanı ölç"
#, fuzzy
#| msgid "condition(s) to display the bar item (evaluated, see /help eval)"
msgid "" msgid ""
"raw[unicode]: display information about string and unicode chars (evaluated, " "raw[unicode]: display information about string and unicode chars (evaluated, "
"see /help eval)" "see /help eval)"
msgstr "" msgstr ""
"raw[unicode]: Dizi ve unicode karakterler hakkında bilgi görüntüle " "çubuk ögesini görüntülemek için koşul(lar) (değerlendirilir, bkz. /help eval)"
"(değerlendirilir, bkz. /help eval)"
msgid "" msgid ""
"raw[whitespace]: toggle whitespace mode: make spaces and tabulations visible " "raw[whitespace]: toggle whitespace mode: make spaces and tabulations visible "
"in buffers and bars (see options weechat.look.whitespace_char and " "in buffers and bars (see options weechat.look.whitespace_char and "
"weechat.look.tab_whitespace_char)" "weechat.look.tab_whitespace_char)"
msgstr "" msgstr ""
"raw[whitespace]: Boşluk kipini aç/kapat: Arabelleklerde ve çubuklarda "
"boşlukları ve sekmelendirmeleri görünür yap (weechat.look.whitespace_char ve "
"weechat.look.tab_whitespace_char seçeneklerine bakın)"
msgid "evaluate expression" msgid "evaluate expression"
msgstr "ifadeyi değerlendir" msgstr "ifadeyi değerlendir"
@@ -1615,43 +1619,47 @@ msgid ""
msgstr "[-n|-s] [-d] <ifade> || [-n] [-d] -c <ifade1> <işleç> <ifade2>" msgstr "[-n|-s] [-d] <ifade> || [-n] [-d] -c <ifade1> <işleç> <ifade2>"
msgid "raw[-n]: display result without sending it to buffer (debug mode)" 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)" msgstr ""
#, fuzzy
#| msgid ""
#| "command(s) to run if conditions are OK, after regex replacements (many "
#| "commands can be separated by semicolons)"
msgid "" msgid ""
"raw[-s]: split expression before evaluating it (many commands can be " "raw[-s]: split expression before evaluating it (many commands can be "
"separated by semicolons)" "separated by semicolons)"
msgstr "" msgstr ""
"raw[-s]: İfadeyi değerlendirmeden önce böl (birden çok komut noktalı virgülle " "düzenli ifade değiştirmelerinden sonra koşullar sağlanırsa çalıştırılacak "
"ayrılabilir)" "komutlar (birden çok komut noktalı virgül ile ayrılabilir)"
msgid "" msgid ""
"raw[-d]: display debug output after evaluation (with two -d: more verbose " "raw[-d]: display debug output after evaluation (with two -d: more verbose "
"debug)" "debug)"
msgstr "" msgstr ""
"raw[-d]: Değerlendirme sonrası hata ayıklama çıktısını görüntüle (iki -d ile: "
"Daha ayrıntılı hata ayıklama bilgisi)"
msgid "" msgid ""
"raw[-c]: evaluate as condition: use operators and parentheses, return a " "raw[-c]: evaluate as condition: use operators and parentheses, return a "
"boolean value (\"0\" or \"1\")" "boolean value (\"0\" or \"1\")"
msgstr "" msgstr ""
"raw[-c]: Koşul olarak değerlendir: İşleçler ve parantezler kullan, bir Boole "
"değeri döndür (\"0\" veya \"1\")"
msgid "" msgid ""
"expression: expression to evaluate, variables with format ${variable} are " "expression: expression to evaluate, variables with format ${variable} are "
"replaced (see below)" "replaced (see below)"
msgstr "ifade: Değerlendirilecek ifade, ${variable} biçimindeki değişkenler " msgstr ""
"değerlendirilir (aşağıya bakın)"
#, fuzzy
#| msgid ""
#| "path to a socket file (path is evaluated, see function "
#| "string_eval_path_home in plugin API reference)"
msgid "operator: a logical or comparison operator (see below)" msgid "operator: a logical or comparison operator (see below)"
msgstr "işleç: bir mantıksal veya karşılaştırma işleci (aşağıya bakın)" msgstr ""
"soket dosyasına giden yol (yol değerlendirilir, eklenti API başvurusunda "
"string_eval_path_home işlevine bakın)"
msgid "" msgid ""
"An expression is considered as \"true\" if it is not NULL, not empty, and " "An expression is considered as \"true\" if it is not NULL, not empty, and "
"different from \"0\"." "different from \"0\"."
msgstr "Bir ifade; NULL veya boş değilse ve \"0\"dan farklıysa \"true\" olarak " msgstr ""
"değerlendirilir."
msgid "" msgid ""
"The comparison is made using floating point numbers if the two expressions " "The comparison is made using floating point numbers if the two expressions "
@@ -1684,29 +1692,41 @@ msgstr ""
msgid " - ${name}: the user-defined variable" msgid " - ${name}: the user-defined variable"
msgstr "" msgstr ""
#, fuzzy
#| msgid "WeeChat config directory"
msgid " - ${weechat_config_dir}: WeeChat config directory" msgid " - ${weechat_config_dir}: WeeChat config directory"
msgstr " - ${weechat_config_dir}: WeeChat yapılandırma dizini" msgstr "WeeChat yapılandırma dizini"
#, fuzzy
#| msgid "WeeChat data directory"
msgid " - ${weechat_data_dir}: WeeChat data directory" msgid " - ${weechat_data_dir}: WeeChat data directory"
msgstr " - ${weechat_data_dir}: WeeChat veri dizini" msgstr "WeeChat veri dizini"
#, fuzzy
#| msgid "WeeChat data directory"
msgid " - ${weechat_state_dir}: WeeChat state directory" msgid " - ${weechat_state_dir}: WeeChat state directory"
msgstr " - ${weechat_state_dir}: WeeChat durum dizini" msgstr "WeeChat veri dizini"
#, fuzzy
#| msgid "WeeChat cache directory"
msgid " - ${weechat_cache_dir}: WeeChat cache directory" msgid " - ${weechat_cache_dir}: WeeChat cache directory"
msgstr " - ${weechat_cache_dir}: WeeChat önbellek dizini" msgstr "WeeChat önbellek dizini"
#, fuzzy
#| msgid "WeeChat runtime directory"
msgid " - ${weechat_runtime_dir}: WeeChat runtime directory" msgid " - ${weechat_runtime_dir}: WeeChat runtime directory"
msgstr " - ${weechat_runtime_dir}: WeeChat çalışma zamanı dizini" msgstr "WeeChat çalışma zamanı dizini"
msgid " - ${eval:string}: the evaluated string" msgid " - ${eval:string}: the evaluated string"
msgstr " - ${eval:string}: Değerlendirilen dizi" msgstr ""
#, fuzzy
#| msgid "toggle value of a config option"
msgid " - ${eval_cond:string}: the evaluated condition" msgid " - ${eval_cond:string}: the evaluated condition"
msgstr " - ${eval_cond:string}: Değerlendirilen koşul" msgstr "bir yapılandırma seçeneğinin değerini aç/kapat"
msgid " - ${esc:string} or ${\\string}: the string with escaped chars" msgid " - ${esc:string} or ${\\string}: the string with escaped chars"
msgstr " - ${esc:string} veya ${\\string}: Kaçırılan karakterli dizi" msgstr ""
msgid "" msgid ""
" - ${chars:range}: the string with a range of chars, \"range\" is one of: " " - ${chars:range}: the string with a range of chars, \"range\" is one of: "
@@ -1813,8 +1833,10 @@ msgstr ""
msgid " - ${date} or ${date:format}: current date/time" msgid " - ${date} or ${date:format}: current date/time"
msgstr "" msgstr ""
#, fuzzy
#| msgid "value of an environment variable"
msgid " - ${env:NAME}: the environment variable" msgid " - ${env:NAME}: the environment variable"
msgstr " - ${env:NAME}: Çevre değişkeni" msgstr "bir çevre değişkeninin değeri"
msgid "" msgid ""
" - ${if:condition?value_if_true:value_if_false}: the result of ternary " " - ${if:condition?value_if_true:value_if_false}: the result of ternary "
@@ -1849,11 +1871,15 @@ msgstr ""
msgid " - ${sec.data.xxx}: the value of the secured data \"xxx\"" msgid " - ${sec.data.xxx}: the value of the secured data \"xxx\""
msgstr "" msgstr ""
#, fuzzy
#| msgid "toggle value of a config option"
msgid " - ${file.section.option}: the value of the config option" msgid " - ${file.section.option}: the value of the config option"
msgstr " - ${file.section.option}: Yapılandırma seçeneğinin değeri" msgstr "bir yapılandırma seçeneğinin değerini aç/kapat"
#, fuzzy
#| msgid "No local variable defined for buffer \"%s\""
msgid " - ${name}: the local variable in buffer" msgid " - ${name}: the local variable in buffer"
msgstr " - ${name}: Arabellekteki yerel değişken" msgstr "\"%s\" arabelleği için bir yerel değişken tanımlanmamış"
msgid "" msgid ""
" - the hdata name/variable (the value is automatically converted to " " - the hdata name/variable (the value is automatically converted to "
@@ -1919,95 +1945,109 @@ msgid " || boolean \"or\""
msgstr "" msgstr ""
msgid "Comparison operators (by order of priority):" msgid "Comparison operators (by order of priority):"
msgstr "Karşılaştırma işleçleri (öncelik sırasına göre):" msgstr ""
msgid " =~ is matching POSIX extended regex" msgid " =~ is matching POSIX extended regex"
msgstr " =~ eşleşen POSIX genişletilmiş düzenli ifadesi" msgstr ""
msgid " !~ is NOT matching POSIX extended regex" msgid " !~ is NOT matching POSIX extended regex"
msgstr " !~ eşleşen POSIX genişletilmiş düzenli ifadesi DEĞİL" msgstr ""
#, fuzzy
#| msgid "alias name (wildcard \"*\" is allowed) (optional)"
msgid " ==* is matching mask, case-sensitive (wildcard \"*\" is allowed)" msgid " ==* is matching mask, case-sensitive (wildcard \"*\" is allowed)"
msgstr " ==* eşleşen maske, BÜYÜK/küçük harf duyarlı (\"*\" jokerine izin " msgstr "arma adı (\"*\" jokerine izin verilir (isteğe bağlı)"
"verilir)"
#, fuzzy
#| msgid "alias name (wildcard \"*\" is allowed) (optional)"
msgid " !!* is NOT matching mask, case-sensitive (wildcard \"*\" is allowed)" msgid " !!* is NOT matching mask, case-sensitive (wildcard \"*\" is allowed)"
msgstr " !!* eşleşen maske DEĞİL, BÜYÜK/küçük harf duyarlı (\"*\" jokerine " msgstr "arma adı (\"*\" jokerine izin verilir (isteğe bağlı)"
"izin verilir)"
#, fuzzy
#| msgid "alias name (wildcard \"*\" is allowed) (optional)"
msgid " =* is matching mask, case-insensitive (wildcard \"*\" is allowed)" msgid " =* is matching mask, case-insensitive (wildcard \"*\" is allowed)"
msgstr " =* eşleşen maske, BÜYÜK/küçük harf duyarsız (\"*\" jokerine izin " msgstr "arma adı (\"*\" jokerine izin verilir (isteğe bağlı)"
"verilir)"
#, fuzzy
#| msgid "alias name (wildcard \"*\" is allowed) (optional)"
msgid "" msgid ""
" !* is NOT matching mask, case-insensitive (wildcard \"*\" is allowed)" " !* is NOT matching mask, case-insensitive (wildcard \"*\" is allowed)"
msgstr "" msgstr "arma adı (\"*\" jokerine izin verilir (isteğe bağlı)"
" !* eşleşen maske DEGİL, BÜYÜK/küçük harf duyarsız (\"*\" jokerine izin "
"verilir)"
msgid " ==- is included, case-sensitive" msgid " ==- is included, case-sensitive"
msgstr " ==- içerilir, BÜYÜK/küçük harf duyarlı" msgstr ""
msgid " !!- is NOT included, case-sensitive" msgid " !!- is NOT included, case-sensitive"
msgstr " !!- içerilmez, BÜYÜK/küçük harf duyarlı" msgstr ""
msgid " =- is included, case-insensitive" msgid " =- is included, case-insensitive"
msgstr " =- içerilir, BÜYÜK/küçük harf duyarsız" msgstr ""
msgid " !- is NOT included, case-insensitive" msgid " !- is NOT included, case-insensitive"
msgstr " !- içerilmez, BÜYÜK/küçük harf duyarsız" msgstr ""
msgid " == equal" msgid " == equal"
msgstr " == eşit" msgstr ""
msgid " != not equal" msgid " != not equal"
msgstr " != eşit değil" msgstr ""
msgid " <= less or equal" msgid " <= less or equal"
msgstr " <= küçüktür veya eşit" msgstr ""
#, fuzzy
#| msgid " file: %s"
msgid " < less" msgid " < less"
msgstr " < küçüktür" msgstr " dosya: %s"
msgid " >= greater or equal" msgid " >= greater or equal"
msgstr " >= büyüktür veya eşit" msgstr ""
msgid " > greater" msgid " > greater"
msgstr " > büyüktür" msgstr ""
msgid "Examples (simple strings):" msgid "Examples (simple strings):"
msgstr "Örnekler (basit diziler):" msgstr ""
msgid "Examples (conditions):" msgid "Examples (conditions):"
msgstr "Örnekler (koşullar):" msgstr ""
msgid "" msgid ""
"filter messages in buffers, to hide/show them according to tags or regex" "filter messages in buffers, to hide/show them according to tags or regex"
msgstr "" msgstr ""
"arabelleklerdeki iletileri künyelere veya düzenli ifadelere göre gizlemek/" "arabelleklerdeki iletileri etiketlere veya düzenli ifadelere göre gizlemek/"
"göstermek için süz" "göstermek için süz"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated #. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
#, fuzzy
#| msgid ""
#| "list || enable|disable|toggle [<name>|@] || add|addreplace <name> "
#| "<buffer>[,<buffer>...] <tags> <regex> || rename <name> <new_name> || "
#| "recreate <name> || del <name>|-all [<name>...]"
msgid "" msgid ""
"list || enable|disable|toggle [<name>|<mask>|@...] || add|addreplace <name> " "list || enable|disable|toggle [<name>|<mask>|@...] || add|addreplace <name> "
"<buffer>[,<buffer>...] <tags> <regex> || rename <name> <new_name> || " "<buffer>[,<buffer>...] <tags> <regex> || rename <name> <new_name> || "
"recreate <name> || del <name>|<mask>..." "recreate <name> || del <name>|<mask>..."
msgstr "" msgstr ""
"list || enable|disable|toggle [<ad>|<maske>|@...] || add|addreplace <ad> " "list || enable|disable|toggle [<ad>|@] || add|addreplace <ad> <arabellek>[,"
"<arabellek>[,<arabellek>...] <künyeler> <düzenli_ifade> || rename <ad> " "<arabellek>...] <etiketler> <düzenli_ifade> || rename <ad> <yeni_ad> || "
"<yeni_ad> || recreate <ad> || del <ad>|<maske>..." "recreate <ad> || del <ad>|-all [<ad>...]"
#, fuzzy
#| msgid "list of filters"
msgid "raw[list]: list all filters" msgid "raw[list]: list all filters"
msgstr "raw[list]: Tüm süzgeçleri listele" msgstr "süzgeçlerin listesi"
msgid "raw[enable]: enable filters (filters are enabled by default)" msgid "raw[enable]: enable filters (filters are enabled by default)"
msgstr "raw[enable]: Süzgeçleri etkinleştir (süzgeçler öntanımlı olarak etkin)" msgstr ""
#, fuzzy
#| msgid "names of filters"
msgid "raw[disable]: disable filters" msgid "raw[disable]: disable filters"
msgstr "raw[disable]: Süzgeçleri devre dışı bırak" msgstr "süzgeçlerin adları"
msgid "raw[toggle]: toggle filters" msgid "raw[toggle]: toggle filters"
msgstr "raw[toggle]: Süzgeçleri aç/kapat" msgstr ""
msgid "" msgid ""
"mask: name where wildcard \"*\" is allowed (\"@\" = enable/disable all " "mask: name where wildcard \"*\" is allowed (\"@\" = enable/disable all "
@@ -2020,11 +2060,15 @@ msgstr ""
msgid "raw[addreplace]: add or replace an existing filter" msgid "raw[addreplace]: add or replace an existing filter"
msgstr "" msgstr ""
#, fuzzy
#| msgid "names of filters"
msgid "name: filter name" msgid "name: filter name"
msgstr "ad: Süzgeç adı" msgstr "süzgeçlerin adları"
#, fuzzy
#| msgid "names of filters"
msgid "raw[rename]: rename a filter" msgid "raw[rename]: rename a filter"
msgstr "raw[rename]: Bir süzgeci yeniden adlandır" msgstr "süzgeçlerin adları"
msgid "raw[recreate]: set input with the command used to edit the filter" msgid "raw[recreate]: set input with the command used to edit the filter"
msgstr "" msgstr ""
@@ -2040,14 +2084,18 @@ msgid ""
"\"irc.server.libera\")" "\"irc.server.libera\")"
msgstr "" msgstr ""
#, fuzzy
#| msgid "manage buffers"
msgid "> - \"*\" means all buffers" msgid "> - \"*\" means all buffers"
msgstr "> - \"*\" tüm arabellekler anlamına gelir" msgstr "arabellekleri yönet"
msgid "> - a name starting with \"!\" is excluded" msgid "> - a name starting with \"!\" is excluded"
msgstr "> - \"!\" ile başlayan bir ad dışlanır" msgstr ""
#, fuzzy
#| msgid "bar name (wildcard \"*\" is allowed) (optional)"
msgid "> - wildcard \"*\" is allowed" msgid "> - wildcard \"*\" is allowed"
msgstr "> - \"*\" jokerine izin verilir" msgstr "çubuk adı (\"*\" jokerine izin verilir (isteğe bağlı)"
msgid "" msgid ""
"tags: comma separated list of tags (for example " "tags: comma separated list of tags (for example "
@@ -2063,8 +2111,12 @@ msgid ""
"> - if tag starts with \"!\", then it is excluded and must NOT be in message" "> - if tag starts with \"!\", then it is excluded and must NOT be in message"
msgstr "" msgstr ""
#, fuzzy
#| msgid "POSIX extended regular expression to search ANSI escape codes"
msgid "regex: POSIX extended regular expression to search in line:" msgid "regex: POSIX extended regular expression to search in line:"
msgstr "düzenli_ifade: Satırda aranacak POSIX genişletilmiş düzenli ifadesi:" msgstr ""
"ANSI kaçış kodlarını aramak için kullanılan POSIX genişletilmiş düzenli "
"ifadeleri"
msgid "" msgid ""
"> - use \"\\t\" to separate prefix from message, special chars like \"|\" " "> - use \"\\t\" to separate prefix from message, special chars like \"|\" "
@@ -2102,15 +2154,19 @@ msgstr ""
msgid "To see tags for lines in buffers: /debug tags" msgid "To see tags for lines in buffers: /debug tags"
msgstr "" msgstr ""
#, fuzzy
#| msgid "execute a command on all buffers"
msgid " use IRC smart filter on all buffers:" msgid " use IRC smart filter on all buffers:"
msgstr " tüm arabelleklerde IRC akıllı arabelleğini kullan:" msgstr "tüm arabelleklerde bir komut yürüt"
msgid "" msgid ""
" use IRC smart filter on all buffers except those with \"#weechat\" in name:" " use IRC smart filter on all buffers except those with \"#weechat\" in name:"
msgstr "" msgstr ""
#, fuzzy
#| msgid "display host in part/quit messages"
msgid " filter all IRC join/part/quit messages:" msgid " filter all IRC join/part/quit messages:"
msgstr " tüm IRC katıl/ayrıl/çık iletilerini süz:" msgstr "ayrılma/çıkma iletilerinde makineyi görüntüle"
msgid " filter nicks displayed when joining channels or with /names:" msgid " filter nicks displayed when joining channels or with /names:"
msgstr "" msgstr ""
@@ -2132,8 +2188,10 @@ msgid "display help about commands and options"
msgstr "komutlar ve seçenekler hakkında yardım göster" msgstr "komutlar ve seçenekler hakkında yardım göster"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated #. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
#, fuzzy
#| msgid "-list|-listfull [<plugin> [<plugin>...]] || <command> || <option>"
msgid "-list|-listfull [<plugin>...]] || <command> || <option>" msgid "-list|-listfull [<plugin>...]] || <command> || <option>"
msgstr "-list|-listfull [<eklenti>...]] || <komut> || <seçenek>" msgstr "-list|-listfull [<eklenti> [<eklenti>...]] || <komut> || <seçenek>"
msgid "" msgid ""
"raw[-list]: list commands, by plugin (without argument, this list is " "raw[-list]: list commands, by plugin (without argument, this list is "
@@ -2144,13 +2202,17 @@ msgid "raw[-listfull]: list commands with description, by plugin"
msgstr "" msgstr ""
msgid "plugin: list commands for this plugin" msgid "plugin: list commands for this plugin"
msgstr "eklenti: Bu eklenti için olan komutları listele" msgstr ""
#, fuzzy
#| msgid "functions for command line"
msgid "command: a command name" msgid "command: a command name"
msgstr "komut: Bir komut adı" msgstr "komut satırı için fonksiyonlar"
#, fuzzy
#| msgid "option: extra option, for some servers"
msgid "option: an option name (use /set to see list)" msgid "option: an option name (use /set to see list)"
msgstr "seçenek: Bir seçenek adı (listeyi görmek için /set kullanın)" msgstr "seçenek: bazı sunucular için ek seçenek"
msgid "show buffer command history" msgid "show buffer command history"
msgstr "arabellek komut geçmişini göster" msgstr "arabellek komut geçmişini göster"
@@ -2160,10 +2222,16 @@ msgid "clear || <value>"
msgstr "clear || <değer>" msgstr "clear || <değer>"
msgid "raw[clear]: clear history" msgid "raw[clear]: clear history"
msgstr "raw[clear]: Geçmişi temizle" msgstr ""
#, fuzzy
#| msgid ""
#| "clear: clear history\n"
#| "value: number of history entries to show"
msgid "value: number of history entries to show" msgid "value: number of history entries to show"
msgstr "değer: Gösterilecek geçmiş girdileri sayısı" msgstr ""
"clear: geçmişi temizle\n"
"değer: gösterilecek geçmiş girdileri sayısı"
msgid "manage hotlist" msgid "manage hotlist"
msgstr "sıcak listeyi yönet" msgstr "sıcak listeyi yönet"
@@ -2223,14 +2291,18 @@ msgstr ""
msgid "> raw[search_text_here]: search text in buffer at current position" msgid "> raw[search_text_here]: search text in buffer at current position"
msgstr "" msgstr ""
#, fuzzy
#| msgid "check words during text search in buffer"
msgid "> raw[search_text]: search text in buffer" msgid "> raw[search_text]: search text in buffer"
msgstr "> raw[search_text]: Arabellekte metin ara" msgstr "arabellekte metin arama sırasında sözcükleri denetle"
#, fuzzy
#| msgid "check words during text search in buffer"
msgid "> raw[search_history]: search text in command line history" msgid "> raw[search_history]: search text in command line history"
msgstr "> raw[search_history]: Komut satırı geçmişinde metin ara" msgstr "arabellekte metin arama sırasında sözcükleri denetle"
msgid "> raw[search_switch_case]: switch exact case for search" msgid "> raw[search_switch_case]: switch exact case for search"
msgstr "> raw[search_switch_case]: Arama için tam biçimi değiştir" msgstr ""
msgid "" msgid ""
"> raw[search_switch_regex]: switch search type: string/regular expression" "> raw[search_switch_regex]: switch search type: string/regular expression"
@@ -2384,38 +2456,51 @@ msgid "manage custom bar items"
msgstr "özel çubuk ögelerini yönet" msgstr "özel çubuk ögelerini yönet"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated #. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
#, fuzzy
#| msgid ""
#| "list || add|addreplace <name> \"<conditions>\" \"<content>\" || rename "
#| "<name> <new_name> || refresh <name> [<name>...] || recreate <name> || del "
#| "<name>|-all"
msgid "" msgid ""
"list || add|addreplace <name> \"<conditions>\" \"<content>\" || rename " "list || add|addreplace <name> \"<conditions>\" \"<content>\" || rename "
"<name> <new_name> || refresh <name>|<mask>... || recreate <name> || del " "<name> <new_name> || refresh <name>|<mask>... || recreate <name> || del "
"<name>|<mask>..." "<name>|<mask>..."
msgstr "" msgstr ""
"list || add|addreplace <ad> \"<koşullar>\" \"<içerik>\" || rename " "list || add|addreplace <ad> \"<koşullar>\" \"<içerik>\" || rename <ad> "
"<ad> <yeni_ad> || refresh <ad>|<maske>... || recreate <ad> || del " "<yeni_ad> || refresh <ad> [<ad>...] || recreate <ad> || del <ad>|-all"
"<ad>|<maske>..."
#, fuzzy
#| msgid "names of custom bar items"
msgid "raw[list]: list all custom bar items" msgid "raw[list]: list all custom bar items"
msgstr "raw[list]: Tüm özel çubuk ögelerini listele" msgstr "özel çubuk ögelerinin adları"
#, fuzzy
#| msgid "manage custom bar items"
msgid "raw[add]: add a custom bar item" msgid "raw[add]: add a custom bar item"
msgstr "raw[add]: Bir özel çubuk ögesi ekle" msgstr "özel çubuk ögelerini yönet"
msgid "raw[addreplace]: add or replace an existing custom bar item" msgid "raw[addreplace]: add or replace an existing custom bar item"
msgstr "raw[addreplace]: Var olan bir özel çubuk ögesi ekle veya değiştir" msgstr ""
#, fuzzy
#| msgid "names of custom bar items"
msgid "name: custom bar item name" msgid "name: custom bar item name"
msgstr "ad: Özel çubuk ögesi adı" msgstr "özel çubuk ögelerinin adları"
msgid "" msgid ""
"conditions: evaluated conditions to display the bar item (for example to " "conditions: evaluated conditions to display the bar item (for example to "
"display the bar item only in specific buffers)" "display the bar item only in specific buffers)"
msgstr "koşullar: Çubuk ögesini görüntülemek için değerlendirilmiş koşullar " msgstr ""
"(örneğin, çubuk ögesini yalnızca belirli arabelleklerde görüntülemek için)"
#, fuzzy
#| msgid "content of bar item (evaluated, see /help eval)"
msgid "content: content (evaluated, see /help eval)" msgid "content: content (evaluated, see /help eval)"
msgstr "içerik: İçerik (değerlendirilir, bkz. /help eval)" msgstr "çubuk ögesinin içeriği (değerlendirilir, bkz. /help eval)"
#, fuzzy
#| msgid "names of custom bar items"
msgid "raw[rename]: rename a custom bar item" msgid "raw[rename]: rename a custom bar item"
msgstr "raw[rename]: Bir özel çubuk ögesini yeniden adlandır" msgstr "özel çubuk ögelerinin adları"
msgid "" msgid ""
"raw[refresh]: update content of item in all bars where the item is " "raw[refresh]: update content of item in all bars where the item is "
@@ -2426,15 +2511,19 @@ msgid ""
"raw[recreate]: set input with the command used to edit the custom bar item" "raw[recreate]: set input with the command used to edit the custom bar item"
msgstr "" msgstr ""
#, fuzzy
#| msgid "names of custom bar items"
msgid "raw[del]: delete custom bar items" msgid "raw[del]: delete custom bar items"
msgstr "raw[del]: Özel çubuk ögesini sil" msgstr "özel çubuk ögelerinin adları"
msgid "" msgid ""
" add item with terminal size, displayed only in buffers with number = 1:" " add item with terminal size, displayed only in buffers with number = 1:"
msgstr "" msgstr ""
#, fuzzy
#| msgid "bar item with list of buffers"
msgid " add item with buffer info:" msgid " add item with buffer info:"
msgstr " arabellek bilgisiyle öge ekle:" msgstr "arabellek listesini içeren çubuk ögesi"
msgid "" msgid ""
" add item with date/time using format \"Dec 25, 12:34 +0100\", refreshed " " add item with date/time using format \"Dec 25, 12:34 +0100\", refreshed "
@@ -2459,17 +2548,22 @@ msgid "bind/unbind keys"
msgstr "düğmeleri bağıntıla/bağı çöz" msgstr "düğmeleri bağıntıla/bağı çöz"
#. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated #. TRANSLATORS: only text between angle brackets (eg: "<name>") may be translated
#, fuzzy
#| msgid ""
#| "list|listdefault|listdiff [<context>] || bind <key> [<command> [<args>]] "
#| "|| bindctxt <context> <key> [<command> [<args>]] || unbind <key> || "
#| "unbindctxt <context> <key> || reset <key> || resetctxt <context> <key> || "
#| "resetall -yes [<context>] || missing [<context>]"
msgid "" msgid ""
"[list|listdefault|listdiff] [<context>] || bind <key> [<command> [<args>]] " "[list|listdefault|listdiff] [<context>] || bind <key> [<command> [<args>]] "
"|| bindctxt <context> <key> [<command> [<args>]] || unbind <key> || " "|| bindctxt <context> <key> [<command> [<args>]] || unbind <key> || "
"unbindctxt <context> <key> || reset <key> || resetctxt <context> <key> || " "unbindctxt <context> <key> || reset <key> || resetctxt <context> <key> || "
"resetall -yes [<context>] || missing [<context>] || legacy <key>..." "resetall -yes [<context>] || missing [<context>] || legacy <key>..."
msgstr "" msgstr ""
"[list|listdefault|listdiff] [<içerik>] || bind <düğme> [<komut> " "list|listdefault|listdiff [<bağlam>] || bind <düğme> [<komut> "
"[<argümanlar>]] || bindctxt <içerik> <düğme> [<komut> [<argümanlar>]] || " "[<argümanlar>]] || bindctxt <bağlam> <düğme> [<komut> [<argümanlar>]] || "
"unbind <düğme> || unbindctxt <içerik> <düğme> || reset <düğme> || " "unbind <düğme> || unbindctxt <bağlam> <düğme> || reset <düğme> || resetctxt "
"resetctxt <içerik> <düğme> || resetall -yes [<içerik>] || missing [<içerik>] " "<bağlam> <düğme> || resetall -yes [<bağlam>] || missing [<bağlam>]"
"|| legacy <düğme>..."
msgid "raw[list]: list all current keys" msgid "raw[list]: list all current keys"
msgstr "" msgstr ""
@@ -2890,7 +2984,7 @@ msgid ""
"error|-join|-network|-quit] [<text>] || -stdout|-stderr [<text>] || -beep" "error|-join|-network|-quit] [<text>] || -stdout|-stderr [<text>] || -beep"
msgstr "" msgstr ""
"[-buffer <sayı>|<ad>] [-newbuffer <ad>] [-free] [-switch] [-core|-current] [-" "[-buffer <sayı>|<ad>] [-newbuffer <ad>] [-free] [-switch] [-core|-current] [-"
"y <satır>] [-escape] [-date <tarih>] [-tags <künyeler>] [-action|-error|-" "y <satır>] [-escape] [-date <tarih>] [-tags <etiketler>] [-action|-error|-"
"join|-network|-quit] [<metin>] || -stdout|-stderr [<metin>] || -beep" "join|-network|-quit] [<metin>] || -stdout|-stderr [<metin>] || -beep"
msgid "" msgid ""
@@ -4714,9 +4808,9 @@ msgid ""
"messages from nick \"FlashCode\", \"irc_notice+nick_toto*\" for notices from " "messages from nick \"FlashCode\", \"irc_notice+nick_toto*\" for notices from "
"a nick starting with \"toto\"" "a nick starting with \"toto\""
msgstr "" msgstr ""
"vurgulanacak künyelerin virgülle ayrılmış listesi; BÜYÜK/küçük harf " "vurgulanacak etiketlerin virgülle ayrılmış listesi; BÜYÜK/küçük harf "
"duyarsız karşılaştırma; her bir künyede \"*\" jokerine izin verilir; " "duyarsız karşılaştırma; her bir etikette \"*\" jokerine izin verilir; "
"künyeler arasında mantıksal \"and\" yapmak için künyeleri \"+\" ile " "etiketler arasında mantıksal \"and\" yapmak için etiketleri \"+\" ile "
"ayırabilirsiniz; örnekler: \"GazMan\" takma adından iletiler için " "ayırabilirsiniz; örnekler: \"GazMan\" takma adından iletiler için "
"\"nick_gazman\", \"toto\" ile başlayan bir takma addan gelecek bildirimler " "\"nick_gazman\", \"toto\" ile başlayan bir takma addan gelecek bildirimler "
"için \"irc_notice+nick_toto\"" "için \"irc_notice+nick_toto\""
@@ -5432,7 +5526,7 @@ msgstr "\"failed\" durumu metin rengi"
msgid "text color for tags after messages (displayed with command /debug tags)" msgid "text color for tags after messages (displayed with command /debug tags)"
msgstr "" msgstr ""
"iletilerden sonraki künye metin rengi (/debug tags komutu ile görüntülenir)" "iletilerden sonraki etiket metin rengi (/debug tags komutu ile görüntülenir)"
msgid "text color for marker on lines where text sought is found" msgid "text color for marker on lines where text sought is found"
msgstr "aranan metnin bulunduğu satır imleyicisi metin rengi" msgstr "aranan metnin bulunduğu satır imleyicisi metin rengi"
@@ -5640,10 +5734,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "kısmi bir tamamlama gerçekleştiğinde uyarı (BEL) gönder" msgstr "kısmi bir tamamlama gerçekleştiğinde uyarı (BEL) gönder"
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -6667,12 +6757,15 @@ msgstr "Fare devre dışı"
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr " TERM='%s', boyut: %dx%d" msgstr " TERM='%s', boyut: %dx%d"
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "WeeChat arka planda çalışıyor..." msgstr "WeeChat arka planda çalışıyor..."
#, c-format
msgid "fork error" msgid "fork error"
msgstr "çatal hatası" msgstr "çatal hatası"
#, c-format
msgid "OK" msgid "OK"
msgstr "TAMAM" msgstr "TAMAM"
@@ -11968,11 +12061,11 @@ msgid ""
"\" can be used to make a logical \"and\" between tags; wildcard \"*\" is " "\" can be used to make a logical \"and\" between tags; wildcard \"*\" is "
"allowed in tags; an empty value allows highlight on any tag" "allowed in tags; an empty value allows highlight on any tag"
msgstr "" msgstr ""
"vurgulamayı irc arabelleklerindeki bu künyelere sınırla (kullanıcı " "vurgulamayı irc arabelleklerindeki bu etiketlere sınırla (kullanıcı "
"iletilerinde vurgulama olup sunucu iletilerinde olmaması için); künyeler " "iletilerinde vurgulama olup sunucu iletilerinde olmaması için); etiketler "
"bir virgülle ayrılmalıdır ve \"+\" künyeler arasında mantıksal bir \"and\" " "bir virgülle ayrılmalıdır ve \"+\" etiketler arasında mantıksal bir \"and\" "
"yapmak için kullanılabilir; künyelerde \"*\" jokerine izin verilir; boş bir " "yapmak için kullanılabilir; etiketlerde \"*\" jokerine izin verilir; boş bir "
"değer herhangi bir künyede vurgulamaya izin verir" "değer herhangi bir etikette vurgulamaya izin verir"
msgid "" msgid ""
"add tag \"irc_ignored\" in ignored messages instead of removing them; that " "add tag \"irc_ignored\" in ignored messages instead of removing them; that "
@@ -12149,7 +12242,7 @@ msgid ""
"comma separated list of tags used in a welcome notices redirected to a " "comma separated list of tags used in a welcome notices redirected to a "
"channel, for example: \"notify_private\"" "channel, for example: \"notify_private\""
msgstr "" msgstr ""
"bir kanala yeniden yönlendirilen hoş geldiniz ihbarlarındaki künyelerin " "bir kanala yeniden yönlendirilen hoş geldiniz ihbarlarındaki etiketlerin "
"virgülle ayrılmış listesi; örneğin: \"notify_private\"" "virgülle ayrılmış listesi; örneğin: \"notify_private\""
msgid "" msgid ""
@@ -12158,7 +12251,7 @@ msgid ""
"\"notify_message\", \"notify_private\" or \"notify_highlight\"" "\"notify_message\", \"notify_private\" or \"notify_highlight\""
msgstr "" msgstr ""
"bir takma ad sunucuya katıldığında veya çıktığında bildir tarafından " "bir takma ad sunucuya katıldığında veya çıktığında bildir tarafından "
"iletilerde kullanılan künyelerin virgülle ayrılmış listesi (komut ison'u " "iletilerde kullanılan etiketlerin virgülle ayrılmış listesi (komut ison'u "
"veya monitörünün sonucu); örneğin: \"notify_message\", \"notify_private\" " "veya monitörünün sonucu); örneğin: \"notify_message\", \"notify_private\" "
"veya \"notify_highlight\"" "veya \"notify_highlight\""
@@ -12168,7 +12261,7 @@ msgid ""
"\"notify_message\", \"notify_private\" or \"notify_highlight\"" "\"notify_message\", \"notify_private\" or \"notify_highlight\""
msgstr "" msgstr ""
"bir takma ad uzakta durumu değiştiğinde bildir tarafından iletilerde " "bir takma ad uzakta durumu değiştiğinde bildir tarafından iletilerde "
"kullanılan künyelerin virgülle ayrılmış listesi (komut whois'inin sonucu); " "kullanılan etiketlerin virgülle ayrılmış listesi (komut whois'inin sonucu); "
"örneğin: \"notify_message\", \"notify_private\" veya \"notify_highlight\"" "örneğin: \"notify_message\", \"notify_private\" veya \"notify_highlight\""
msgid "" msgid ""
@@ -12185,7 +12278,7 @@ msgid ""
"comma separated list of tags used in private messages, for example: " "comma separated list of tags used in private messages, for example: "
"\"notify_message\", \"notify_private\" or \"notify_highlight\"" "\"notify_message\", \"notify_private\" or \"notify_highlight\""
msgstr "" msgstr ""
"özel iletilerde kullanılan künyelerin virgülle ayrılmış listesi; örneğin: " "özel iletilerde kullanılan etiketlerin virgülle ayrılmış listesi; örneğin: "
"\"notify_message\", \"notify_private\" veya \"notify_highlight\"" "\"notify_message\", \"notify_private\" veya \"notify_highlight\""
msgid "" msgid ""
@@ -12226,7 +12319,7 @@ msgid ""
"see /help filter)" "see /help filter)"
msgstr "" msgstr ""
"eğer bir süredir konuşma yoksa katılma/ayrılma/çıkma/takma ad iletilerini " "eğer bir süredir konuşma yoksa katılma/ayrılma/çıkma/takma ad iletilerini "
"belirli bir takma ad için süz (\"irc_smart_filter\" künyesi üzerinde bir " "belirli bir takma ad için süz (\"irc_smart_filter\" etiketi üzerinde bir "
"süzgeç oluşturmalısınız, bkz. /help filter)" "süzgeç oluşturmalısınız, bkz. /help filter)"
#. TRANSLATORS: please do not translate "account" #. TRANSLATORS: please do not translate "account"
@@ -12255,7 +12348,7 @@ msgid ""
"join is unmasked, as well as nick changes after this join (0 = disable: " "join is unmasked, as well as nick changes after this join (0 = disable: "
"never unmask a join)" "never unmask a join)"
msgstr "" msgstr ""
"\"irc_smart_filter\" künyesi tarafından süzülen bir katılma iletisinin " "\"irc_smart_filter\" etiketi tarafından süzülen bir katılma iletisinin "
"maskesini kaldırma gecikmesi (dakika): eğer bir takma ad en çok N dakika " "maskesini kaldırma gecikmesi (dakika): eğer bir takma ad en çok N dakika "
"önce katıldıysa ve kanalda bir şey söylediyse (ileti, ihbar veya konu " "önce katıldıysa ve kanalda bir şey söylediyse (ileti, ihbar veya konu "
"güncellemesi) katılma maskesi ve bu katılma sonrasındaki takma ad " "güncellemesi) katılma maskesi ve bu katılma sonrasındaki takma ad "
@@ -12701,8 +12794,8 @@ msgid ""
"\"channel\" was not found), \"pos_text\": index of \"text\" message (\"-1\" " "\"channel\" was not found), \"pos_text\": index of \"text\" message (\"-1\" "
"if \"text\" was not found)" "if \"text\" was not found)"
msgstr "" msgstr ""
"\"tags\": künyeler, \"tag_xxx\": künyenin kaçırılmamış değeri \"xxx\" " "\"tags\": etiketler, \"tag_xxx\": etiketin kaçırılmamış değeri \"xxx\" "
"(künye başına bir anahtar), \"message_without_tags\": künyesiz ileti, " "(etiket başına bir anahtar), \"message_without_tags\": etiketsiz ileti, "
"\"nick\": takma ad, \"user\": kullanıcı adı, \"host\": makine, \"command\": " "\"nick\": takma ad, \"user\": kullanıcı adı, \"host\": makine, \"command\": "
"komut, \"channel\": kanal, \"arguments\": argümanlar (kanalı içerir), " "komut, \"channel\": kanal, \"arguments\": argümanlar (kanalı içerir), "
"\"text\": metin (örneğin: kullanıcı iletisi), \"param1\" ... \"paramN\": " "\"text\": metin (örneğin: kullanıcı iletisi), \"param1\" ... \"paramN\": "
@@ -16072,10 +16165,10 @@ msgid ""
"channel (supported tags: \"irc_join\", \"irc_part\", \"irc_quit\", " "channel (supported tags: \"irc_join\", \"irc_part\", \"irc_quit\", "
"\"irc_nick\", \"irc_privmsg\"), \"*\" = all supported tags" "\"irc_nick\", \"irc_privmsg\"), \"*\" = all supported tags"
msgstr "" msgstr ""
"IRC kanalı başına biriken günlükte görüntülenen ileti künyelerinin virgülle " "IRC kanalı başına biriken günlükte görüntülenen ileti etiketlerinin virgülle "
"ayrılmış listesi: (desteklenen künyeler: \"irc_join\", \"irc_part\", " "ayrılmış listesi: (desteklenen etiketler: \"irc_join\", \"irc_part\", "
"\"irc_quit\", \"irc_nick\", \"irc_privmsg\"), \"*\" = tüm desteklenen " "\"irc_quit\", \"irc_nick\", \"irc_privmsg\"), \"*\" = tüm desteklenen "
"künyeler" "etiketler"
msgid "" msgid ""
"format for time in backlog messages (see man strftime for format) (not used " "format for time in backlog messages (see man strftime for format) (not used "
@@ -16084,7 +16177,7 @@ msgid ""
msgstr "" msgstr ""
"biriken günlük iletilerindeki zaman biçimi (biçim için bkz. man strftime) " "biriken günlük iletilerindeki zaman biçimi (biçim için bkz. man strftime) "
"(\"server_time\" yeteneği sunucu tarafından etkinleştirilmişse kullanılmaz; " "(\"server_time\" yeteneği sunucu tarafından etkinleştirilmişse kullanılmaz; "
"çünkü zaman IRC künyesi olarak gönderilir); boş dizi = biriken günlük " "çünkü zaman irc etiketi olarak gönderilir); boş dizi = biriken günlük "
"iletilerinde zamanı devre dışı bırak" "iletilerinde zamanı devre dışı bırak"
#, fuzzy #, fuzzy
@@ -16552,16 +16645,16 @@ msgid "License"
msgstr "Lisans" msgstr "Lisans"
msgid "Tags" msgid "Tags"
msgstr "Künyeler" msgstr "Etiketler"
msgid "Status" msgid "Status"
msgstr "Durum" msgstr "Durum"
msgid "Date added" msgid "Date added"
msgstr "Eklenen tarih" msgstr "Tarih eklendi"
msgid "Date updated" msgid "Date updated"
msgstr "Güncellenen tarih" msgstr "Tarih güncellendi"
msgid "URL" msgid "URL"
msgstr "URL" msgstr "URL"
@@ -16573,10 +16666,10 @@ msgid "Requires"
msgstr "Gereksinimler" msgstr "Gereksinimler"
msgid "Min WeeChat" msgid "Min WeeChat"
msgstr "WeeChat en az" msgstr "En az WeeChat"
msgid "Max WeeChat" msgid "Max WeeChat"
msgstr "WeeChat en çok" msgstr "En çok WeeChat"
msgid "Script has defined:" msgid "Script has defined:"
msgstr "Betik şunu tanımladı:" msgstr "Betik şunu tanımladı:"
@@ -16781,7 +16874,7 @@ msgid "files in script directories"
msgstr "betik dizinlerindeki dosyalar" msgstr "betik dizinlerindeki dosyalar"
msgid "tags of scripts in repository" msgid "tags of scripts in repository"
msgstr "depodaki betik künyeleri" msgstr "depodaki betik etiketleri"
msgid "" msgid ""
"format of columns displayed in script buffer: following column identifiers " "format of columns displayed in script buffer: following column identifiers "
@@ -16793,7 +16886,7 @@ msgstr ""
"betik arabelleğinde görüntülenen sütunların biçimi: izleyen sütun " "betik arabelleğinde görüntülenen sütunların biçimi: izleyen sütun "
"tanımlayıcıları değerleriyle değiştirilir: %a=yazar, %d=açıklama, %D=eklenme " "tanımlayıcıları değerleriyle değiştirilir: %a=yazar, %d=açıklama, %D=eklenme "
"tarihi, %e=uzantı, %l=dil, %L=lisans, %n=uzantı ile ad, %N=ad, " "tarihi, %e=uzantı, %l=dil, %L=lisans, %n=uzantı ile ad, %N=ad, "
"%r=gereklilikler, %s=durum, %t=künyeler, %u=güncellenme tarihi, %v=sürüm, " "%r=gereklilikler, %s=durum, %t=etiketler, %u=güncellenme tarihi, %v=sürüm, "
"%V=yüklü sürüm, %w=min_weechat, %W=max_weechat)" "%V=yüklü sürüm, %w=min_weechat, %W=max_weechat)"
msgid "colorize output of diff" msgid "colorize output of diff"
@@ -16915,10 +17008,10 @@ msgid "text color for selected line in script buffer"
msgstr "betik arabelleği seçili satır metin rengi" msgstr "betik arabelleği seçili satır metin rengi"
msgid "text color of tags in script buffer" msgid "text color of tags in script buffer"
msgstr "betik arabelleği künye metin rengi" msgstr "betik arabelleği etiket metin rengi"
msgid "text color of tags for selected line in script buffer" msgid "text color of tags for selected line in script buffer"
msgstr "betik arabelleği seçili satır künye metin rengi" msgstr "betik arabelleği seçili satır etiket metin rengi"
msgid "text color of version in script buffer" msgid "text color of version in script buffer"
msgstr "betik arabelleği sürüm metin rengi" msgstr "betik arabelleği sürüm metin rengi"
@@ -18084,7 +18177,7 @@ msgstr "Xfer listesi:"
msgid "" msgid ""
"%3d. %s (%s), file: \"%s\" (local: \"%s\"), %s %s, status: %s%s%s (%llu %%)" "%3d. %s (%s), file: \"%s\" (local: \"%s\"), %s %s, status: %s%s%s (%llu %%)"
msgstr "" msgstr ""
"%3d. %s (%s), dosya: \"%s\" (yerel: \"%s\"), %s %s, durum: %s%s%s (%%%llu)" "%3d. %s (%s), dosya: \"%s\" (yerel: \"%s\"), %s %s, durum: %s%s%s (%llu %%)"
# noqa # noqa
msgid "sent to" msgid "sent to"
+4 -5
View File
@@ -23,7 +23,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WeeChat\n" "Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2025-06-30 09:32+0200\n" "POT-Creation-Date: 2025-05-04 09:21+0200\n"
"PO-Revision-Date: 2014-08-16 10:27+0200\n" "PO-Revision-Date: 2014-08-16 10:27+0200\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n" "Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n" "Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -4804,10 +4804,6 @@ msgstr ""
msgid "send alert (BEL) when a partial completion occurs" msgid "send alert (BEL) when a partial completion occurs"
msgstr "" msgstr ""
msgid ""
"automatically expand word after partial completion when completing again"
msgstr ""
msgid "" msgid ""
"partially complete command names (stop when many commands found begin with " "partially complete command names (stop when many commands found begin with "
"same letters)" "same letters)"
@@ -5626,12 +5622,15 @@ msgstr ""
msgid " TERM='%s', size: %dx%d" msgid " TERM='%s', size: %dx%d"
msgstr "" msgstr ""
#, c-format
msgid "Running WeeChat in background..." msgid "Running WeeChat in background..."
msgstr "" msgstr ""
#, c-format
msgid "fork error" msgid "fork error"
msgstr "" msgstr ""
#, c-format
msgid "OK" msgid "OK"
msgstr "" msgstr ""
-12
View File
@@ -1,12 +0,0 @@
# SPDX-FileCopyrightText: 2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
continue-on-failure = true
[[operations]]
include-path-regex = "/sync/?.*"
enabled = false
[auth]
basic = { username = "plain", password = "${RELAY_PASSWORD}" }
-8
View File
@@ -313,7 +313,6 @@ struct t_config_option *config_completion_nick_first_only = NULL;
struct t_config_option *config_completion_nick_ignore_chars = NULL; struct t_config_option *config_completion_nick_ignore_chars = NULL;
struct t_config_option *config_completion_nick_ignore_words = NULL; struct t_config_option *config_completion_nick_ignore_words = NULL;
struct t_config_option *config_completion_partial_completion_alert = NULL; struct t_config_option *config_completion_partial_completion_alert = NULL;
struct t_config_option *config_completion_partial_completion_auto_expand = NULL;
struct t_config_option *config_completion_partial_completion_command = NULL; struct t_config_option *config_completion_partial_completion_command = NULL;
struct t_config_option *config_completion_partial_completion_command_arg = NULL; struct t_config_option *config_completion_partial_completion_command_arg = NULL;
struct t_config_option *config_completion_partial_completion_count = NULL; struct t_config_option *config_completion_partial_completion_count = NULL;
@@ -5244,13 +5243,6 @@ config_weechat_init_options (void)
N_("send alert (BEL) when a partial completion occurs"), N_("send alert (BEL) when a partial completion occurs"),
NULL, 0, 0, "on", NULL, 0, NULL, 0, 0, "on", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
config_completion_partial_completion_auto_expand = config_file_new_option (
weechat_config_file, weechat_config_section_completion,
"partial_completion_auto_expand", "boolean",
N_("automatically expand word after partial completion when "
"completing again"),
NULL, 0, 0, "on", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
config_completion_partial_completion_command = config_file_new_option ( config_completion_partial_completion_command = config_file_new_option (
weechat_config_file, weechat_config_section_completion, weechat_config_file, weechat_config_section_completion,
"partial_completion_command", "boolean", "partial_completion_command", "boolean",
-1
View File
@@ -362,7 +362,6 @@ extern struct t_config_option *config_completion_nick_first_only;
extern struct t_config_option *config_completion_nick_ignore_chars; extern struct t_config_option *config_completion_nick_ignore_chars;
extern struct t_config_option *config_completion_nick_ignore_words; extern struct t_config_option *config_completion_nick_ignore_words;
extern struct t_config_option *config_completion_partial_completion_alert; extern struct t_config_option *config_completion_partial_completion_alert;
extern struct t_config_option *config_completion_partial_completion_auto_expand;
extern struct t_config_option *config_completion_partial_completion_command; extern struct t_config_option *config_completion_partial_completion_command;
extern struct t_config_option *config_completion_partial_completion_command_arg; extern struct t_config_option *config_completion_partial_completion_command_arg;
extern struct t_config_option *config_completion_partial_completion_count; extern struct t_config_option *config_completion_partial_completion_count;
+6 -10
View File
@@ -36,18 +36,10 @@
/* Bring in htobe64 */ /* Bring in htobe64 */
#ifdef __ANDROID__ #ifdef __ANDROID__
#define _BSD_SOURCE #define _BSD_SOURCE
#define BE_INT64 htobe64
#include <endian.h> #include <endian.h>
#elif defined(__APPLE__) #elif defined(__APPLE__)
#include <libkern/OSByteOrder.h> #include <libkern/OSByteOrder.h>
#define BE_INT64 OSSwapHostToBigInt64 #define htobe64 OSSwapHostToBigInt64
#elif defined(HAVE_HTONLL)
#include <sys/types.h>
#include <netinet/in.h>
#include <inttypes.h>
#define BE_INT64 htonll
#else
#define BE_INT64 htobe64
#endif #endif
#include "weechat.h" #include "weechat.h"
@@ -57,6 +49,10 @@
#include "core-string.h" #include "core-string.h"
#include "../plugins/plugin.h" #include "../plugins/plugin.h"
#ifdef htonll
#define htobe64 htonll
#endif
char *weecrypto_hash_algo_string[] = { char *weecrypto_hash_algo_string[] = {
"crc32", "crc32",
"md5", "md5",
@@ -540,7 +536,7 @@ weecrypto_totp_generate_internal (const char *secret, int length_secret,
int rc, offset, length; int rc, offset, length;
unsigned long bin_code; unsigned long bin_code;
moving_factor_swapped = BE_INT64 (moving_factor); moving_factor_swapped = htobe64 (moving_factor);
rc = weecrypto_hmac (secret, length_secret, rc = weecrypto_hmac (secret, length_secret,
&moving_factor_swapped, sizeof (moving_factor_swapped), &moving_factor_swapped, sizeof (moving_factor_swapped),
GCRY_MD_SHA1, GCRY_MD_SHA1,
-6
View File
@@ -611,12 +611,6 @@ debug_hooks_plugin_types (const char *plugin_mask, const char **hook_types)
(ptr_hook->plugin) ? (ptr_hook->plugin) ?
ptr_hook->plugin->name : PLUGIN_CORE, ptr_hook->plugin->name : PLUGIN_CORE,
-1); -1);
if (ptr_hook->subplugin)
{
string_dyn_concat (result_type, "(", -1);
string_dyn_concat (result_type, ptr_hook->subplugin, -1);
string_dyn_concat (result_type, ")", -1);
}
string_dyn_concat (result_type, ": ", -1); string_dyn_concat (result_type, ": ", -1);
string_dyn_concat (result_type, desc, -1); string_dyn_concat (result_type, desc, -1);
string_dyn_concat (result_type, "\n", -1); string_dyn_concat (result_type, "\n", -1);
+7
View File
@@ -28,6 +28,13 @@
#include "config.h" #include "config.h"
#endif #endif
/* _XPG4_2 is needed on SunOS for macros like CMSG_SPACE */
/* __EXTENSIONS__ is needed on SunOS for constants like NI_MAXHOST */
#ifdef __sun
#define _XPG4_2
#define __EXTENSIONS__
#endif
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdlib.h> #include <stdlib.h>
-2
View File
@@ -666,9 +666,7 @@ struct t_url_option url_options[] =
#endif #endif
URL_DEF_OPTION(PINNEDPUBLICKEY, STRING, NULL), URL_DEF_OPTION(PINNEDPUBLICKEY, STRING, NULL),
URL_DEF_OPTION(SSL_VERIFYSTATUS, LONG, NULL), URL_DEF_OPTION(SSL_VERIFYSTATUS, LONG, NULL),
#if LIBCURL_VERSION_NUM < 0x080F00 /* < 8.15.0 */
URL_DEF_OPTION(SSL_FALSESTART, LONG, NULL), URL_DEF_OPTION(SSL_FALSESTART, LONG, NULL),
#endif
#if LIBCURL_VERSION_NUM >= 0x073400 /* 7.52.0 */ #if LIBCURL_VERSION_NUM >= 0x073400 /* 7.52.0 */
URL_DEF_OPTION(PROXY_CAINFO, STRING, NULL), URL_DEF_OPTION(PROXY_CAINFO, STRING, NULL),
URL_DEF_OPTION(PROXY_CAPATH, STRING, NULL), URL_DEF_OPTION(PROXY_CAPATH, STRING, NULL),
+5 -16
View File
@@ -168,8 +168,6 @@ util_get_time_string (const time_t *date)
/* /*
* Formats date and time like strftime (but with timeval structure as input) * Formats date and time like strftime (but with timeval structure as input)
* and adds extra specifiers: * and adds extra specifiers:
* - "%@": return the date expressed in Coordinated Universal Time (UTC)
* instead of date relative to the user's specified timezone
* - "%.1" to "%.6": first N digits of microseconds, zero-padded * - "%.1" to "%.6": first N digits of microseconds, zero-padded
* - "%f": alias of "%.6" (microseconds, zero-padded to 6 digits) * - "%f": alias of "%.6" (microseconds, zero-padded to 6 digits)
* - "%!": timestamp as integer, in seconds (value of tv->tv_sec) * - "%!": timestamp as integer, in seconds (value of tv->tv_sec)
@@ -180,15 +178,14 @@ util_strftimeval (char *string, int max, const char *format, struct timeval *tv)
{ {
char **format2, str_temp[32]; char **format2, str_temp[32];
const char *ptr_format; const char *ptr_format;
struct tm *date_time; struct tm *local_time;
int length, bytes, local_time; int length, bytes;
long usec; long usec;
if (!string || (max <= 0) || !format || !tv) if (!string || (max <= 0) || !format || !tv)
return 0; return 0;
string[0] = '\0'; string[0] = '\0';
local_time = 1;
if (!format[0]) if (!format[0])
return 0; return 0;
@@ -211,11 +208,6 @@ util_strftimeval (char *string, int max, const char *format, struct timeval *tv)
string_dyn_concat (format2, "%%", -1); string_dyn_concat (format2, "%%", -1);
ptr_format += 2; ptr_format += 2;
} }
else if ((ptr_format[0] == '%') && (ptr_format[1] == '@'))
{
local_time = 0;
ptr_format += 2;
}
else if ((ptr_format[0] == '%') && (ptr_format[1] == '.')) else if ((ptr_format[0] == '%') && (ptr_format[1] == '.'))
{ {
if ((ptr_format[2] >= '1') && (ptr_format[2] <= '6')) if ((ptr_format[2] >= '1') && (ptr_format[2] <= '6'))
@@ -252,17 +244,14 @@ util_strftimeval (char *string, int max, const char *format, struct timeval *tv)
} }
} }
if (local_time) local_time = localtime (&(tv->tv_sec));
date_time = localtime (&(tv->tv_sec)); if (!local_time)
else
date_time = gmtime (&(tv->tv_sec));
if (!date_time)
{ {
string_dyn_free (format2, 1); string_dyn_free (format2, 1);
return 0; return 0;
} }
bytes = strftime (string, max, *format2, date_time); bytes = strftime (string, max, *format2, local_time);
string_dyn_free (format2, 1); string_dyn_free (format2, 1);
-2
View File
@@ -22,8 +22,6 @@
#ifndef WEECHAT_HOOK_URL_H #ifndef WEECHAT_HOOK_URL_H
#define WEECHAT_HOOK_URL_H #define WEECHAT_HOOK_URL_H
#include <pthread.h>
struct t_weechat_plugin; struct t_weechat_plugin;
struct t_infolist_item; struct t_infolist_item;
struct t_hashtable; struct t_hashtable;
+5
View File
@@ -53,6 +53,11 @@ if(ENABLE_ZSTD)
list(APPEND EXTRA_LIBS ${LIBZSTD_LDFLAGS}) list(APPEND EXTRA_LIBS ${LIBZSTD_LDFLAGS})
endif() endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
# link with resolv lib on macOS
list(APPEND EXTRA_LIBS "resolv")
endif()
if(ENABLE_NCURSES) if(ENABLE_NCURSES)
subdirs(normal) subdirs(normal)
endif() endif()
+6 -3
View File
@@ -49,20 +49,23 @@ daemonize (void)
pid_t pid; pid_t pid;
int fd, i; int fd, i;
printf ("%s ", _("Running WeeChat in background...")); printf (_("Running WeeChat in background..."));
printf (" ");
pid = fork (); pid = fork ();
if (pid < 0) if (pid < 0)
{ {
printf ("%s\n", _("fork error")); printf (_("fork error"));
printf ("\n");
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
} }
if (pid > 0) if (pid > 0)
{ {
/* parent process */ /* parent process */
printf ("%s\n", _("OK")); printf (_("OK"));
printf ("\n");
exit (EXIT_SUCCESS); exit (EXIT_SUCCESS);
} }
-1
View File
@@ -33,7 +33,6 @@ set(LIB_GUI_CURSES_SRC
find_package(Ncurses) find_package(Ncurses)
if(NCURSES_FOUND) if(NCURSES_FOUND)
add_definitions(${NCURSES_CFLAGS})
check_include_files(ncursesw/ncurses.h NCURSESW_HEADERS) check_include_files(ncursesw/ncurses.h NCURSESW_HEADERS)
if(NCURSESW_HEADERS) if(NCURSESW_HEADERS)
add_definitions(-DHAVE_NCURSESW_CURSES_H) add_definitions(-DHAVE_NCURSESW_CURSES_H)
+54 -94
View File
@@ -127,8 +127,8 @@ gui_completion_init (struct t_gui_completion *completion,
completion->args = NULL; completion->args = NULL;
completion->direction = 0; completion->direction = 0;
completion->add_space = 1; completion->add_space = 1;
completion->partial_completion = 0; completion->force_partial_completion = 0;
completion->template_partial_completion = 0; completion->reverse_partial_completion = 0;
completion->list = arraylist_new ( completion->list = arraylist_new (
32, 1, 0, 32, 1, 0,
@@ -631,7 +631,7 @@ gui_completion_build_list_template (struct t_gui_completion *completion,
config_hashtable_completion_partial_templates, config_hashtable_completion_partial_templates,
custom_completion)) custom_completion))
{ {
completion->template_partial_completion = 1; completion->reverse_partial_completion = 1;
} }
gui_completion_custom (completion, gui_completion_custom (completion,
custom_completion, custom_completion,
@@ -907,6 +907,8 @@ gui_completion_find_context (struct t_gui_completion *completion,
const char *ptr_command, *ptr_data, *ptr_space, *ptr_newline, *prev_char; const char *ptr_command, *ptr_data, *ptr_space, *ptr_newline, *prev_char;
/* look for context */ /* look for context */
gui_completion_free_data (completion);
gui_completion_init (completion, completion->plugin, completion->buffer);
ptr_command = NULL; ptr_command = NULL;
command_arg = 0; command_arg = 0;
@@ -1239,7 +1241,7 @@ gui_completion_partial_build_list (struct t_gui_completion *completion,
void void
gui_completion_complete (struct t_gui_completion *completion) gui_completion_complete (struct t_gui_completion *completion)
{ {
int length, word_found_seen, other_completion; int length, word_found_seen, other_completion, partial_completion;
int common_prefix_size, index, index2; int common_prefix_size, index, index2;
struct t_gui_completion_word *ptr_completion_word, *ptr_completion_word2; struct t_gui_completion_word *ptr_completion_word, *ptr_completion_word2;
@@ -1247,15 +1249,34 @@ gui_completion_complete (struct t_gui_completion *completion)
word_found_seen = 0; word_found_seen = 0;
other_completion = 0; other_completion = 0;
partial_completion = completion->force_partial_completion;
if (!partial_completion)
{
if (completion->context == GUI_COMPLETION_COMMAND)
{
partial_completion = CONFIG_BOOLEAN(config_completion_partial_completion_command);
}
else if (completion->context == GUI_COMPLETION_COMMAND_ARG)
{
partial_completion = CONFIG_BOOLEAN(config_completion_partial_completion_command_arg);
}
else
partial_completion = CONFIG_BOOLEAN(config_completion_partial_completion_other);
}
if (completion->reverse_partial_completion)
partial_completion ^= 1;
common_prefix_size = 0; common_prefix_size = 0;
if (completion->partial_completion if (partial_completion
&& completion->list && (completion->list->size > 0)) && completion->list && (completion->list->size > 0))
{ {
common_prefix_size = gui_completion_common_prefix_size (completion->list, common_prefix_size = gui_completion_common_prefix_size (completion->list,
NULL); NULL);
} }
if (completion->partial_completion if (partial_completion
&& completion->word_found && completion->word_found
&& (utf8_strlen (completion->word_found) >= common_prefix_size)) && (utf8_strlen (completion->word_found) >= common_prefix_size))
{ {
@@ -1334,7 +1355,7 @@ gui_completion_complete (struct t_gui_completion *completion)
completion->position = 0; completion->position = 0;
/* stop after common prefix, if asked by user */ /* stop after common prefix, if asked by user */
if (completion->partial_completion if (partial_completion
&& ((utf8_strlen (completion->word_found) >= common_prefix_size)) && ((utf8_strlen (completion->word_found) >= common_prefix_size))
&& (other_completion > 0)) && (other_completion > 0))
{ {
@@ -1502,7 +1523,7 @@ gui_completion_search (struct t_gui_completion *completion, const char *data,
int position, int direction) int position, int direction)
{ {
char *old_word_found; char *old_word_found;
int real_position, force_no_partial; int real_position;
if (!completion || !data || (position < 0)) if (!completion || !data || (position < 0))
return 0; return 0;
@@ -1511,75 +1532,14 @@ gui_completion_search (struct t_gui_completion *completion, const char *data,
completion->direction = direction; completion->direction = direction;
force_no_partial = 0;
if ((completion->context != GUI_COMPLETION_NULL)
&& (arraylist_size (completion->partial_list) > 0)
&& CONFIG_BOOLEAN(config_completion_partial_completion_auto_expand))
{
force_no_partial = 1;
arraylist_clear (completion->partial_list);
}
/* if new completion => look for base word */ /* if new completion => look for base word */
if (real_position != completion->position) if (real_position != completion->position)
{ {
free (completion->word_found); free (completion->word_found);
completion->word_found = NULL; completion->word_found = NULL;
completion->word_found_is_nick = 0; completion->word_found_is_nick = 0;
gui_completion_free_data (completion);
gui_completion_init (completion, completion->plugin, completion->buffer);
completion->partial_completion = (direction < 0);
completion->direction = direction;
gui_completion_find_context (completion, data, real_position); gui_completion_find_context (completion, data, real_position);
if (force_no_partial) completion->force_partial_completion = (direction < 0);
{
completion->partial_completion = 0;
completion->direction = 1;
}
else if (completion->template_partial_completion)
{
if (completion->direction < 0)
{
completion->partial_completion = 0;
completion->direction = 1;
}
else
{
completion->partial_completion = 1;
}
}
else
{
switch (completion->context)
{
case GUI_COMPLETION_NULL:
break;
case GUI_COMPLETION_COMMAND:
if (CONFIG_BOOLEAN(config_completion_partial_completion_command))
{
completion->partial_completion ^= 1;
if (completion->direction < 0)
completion->direction = 1;
}
break;
case GUI_COMPLETION_COMMAND_ARG:
if (CONFIG_BOOLEAN(config_completion_partial_completion_command_arg))
{
completion->partial_completion ^= 1;
if (completion->direction < 0)
completion->direction = 1;
}
break;
case GUI_COMPLETION_AUTO:
if (CONFIG_BOOLEAN(config_completion_partial_completion_other))
{
completion->partial_completion ^= 1;
if (completion->direction < 0)
completion->direction = 1;
}
break;
}
}
} }
/* completion */ /* completion */
@@ -1696,8 +1656,8 @@ gui_completion_hdata_completion_cb (const void *pointer, void *data,
HDATA_VAR(struct t_gui_completion, args, STRING, 0, NULL, NULL); HDATA_VAR(struct t_gui_completion, args, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_gui_completion, direction, INTEGER, 0, NULL, NULL); HDATA_VAR(struct t_gui_completion, direction, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_completion, add_space, INTEGER, 0, NULL, NULL); HDATA_VAR(struct t_gui_completion, add_space, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_completion, partial_completion, INTEGER, 0, NULL, NULL); HDATA_VAR(struct t_gui_completion, force_partial_completion, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_completion, template_partial_completion, INTEGER, 0, NULL, NULL); HDATA_VAR(struct t_gui_completion, reverse_partial_completion, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_completion, list, POINTER, 0, NULL, NULL); HDATA_VAR(struct t_gui_completion, list, POINTER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_completion, word_found, STRING, 0, NULL, NULL); HDATA_VAR(struct t_gui_completion, word_found, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_gui_completion, word_found_is_nick, INTEGER, 0, NULL, NULL); HDATA_VAR(struct t_gui_completion, word_found_is_nick, INTEGER, 0, NULL, NULL);
@@ -1771,30 +1731,30 @@ gui_completion_print_log (void)
ptr_completion = ptr_completion->next_completion) ptr_completion = ptr_completion->next_completion)
{ {
log_printf ("[completion (addr:%p)]", ptr_completion); log_printf ("[completion (addr:%p)]", ptr_completion);
log_printf (" plugin. . . . . . . . . . . : %p", ptr_completion->plugin); log_printf (" plugin. . . . . . . . . . : %p", ptr_completion->plugin);
log_printf (" buffer. . . . . . . . . . . : %p ('%s')", log_printf (" buffer. . . . . . . . . . : %p ('%s')",
ptr_completion->buffer, ptr_completion->buffer,
ptr_completion->buffer->full_name); ptr_completion->buffer->full_name);
log_printf (" context . . . . . . . . . . : %d", ptr_completion->context); log_printf (" context . . . . . . . . . : %d", ptr_completion->context);
log_printf (" case_sensitive. . . . . . . : %d", ptr_completion->case_sensitive); log_printf (" case_sensitive. . . . . . : %d", ptr_completion->case_sensitive);
log_printf (" base_command. . . . . . . . : '%s'", ptr_completion->base_command); log_printf (" base_command. . . . . . . : '%s'", ptr_completion->base_command);
log_printf (" base_command_arg_index. . . : %d", ptr_completion->base_command_arg_index); log_printf (" base_command_arg_index. . : %d", ptr_completion->base_command_arg_index);
log_printf (" base_word . . . . . . . . . : '%s'", ptr_completion->base_word); log_printf (" base_word . . . . . . . . : '%s'", ptr_completion->base_word);
log_printf (" base_word_pos . . . . . . . : %d", ptr_completion->base_word_pos); log_printf (" base_word_pos . . . . . . : %d", ptr_completion->base_word_pos);
log_printf (" position. . . . . . . . . . : %d", ptr_completion->position); log_printf (" position. . . . . . . . . : %d", ptr_completion->position);
log_printf (" args. . . . . . . . . . . . : '%s'", ptr_completion->args); log_printf (" args. . . . . . . . . . . : '%s'", ptr_completion->args);
log_printf (" direction . . . . . . . . . : %d", ptr_completion->direction); log_printf (" direction . . . . . . . . : %d", ptr_completion->direction);
log_printf (" add_space . . . . . . . . . : %d", ptr_completion->add_space); log_printf (" add_space . . . . . . . . : %d", ptr_completion->add_space);
log_printf (" partial_completion. . . . . : %d", ptr_completion->partial_completion); log_printf (" force_partial_completion. : %d", ptr_completion->force_partial_completion);
log_printf (" template_partial_completion : %d", ptr_completion->template_partial_completion); log_printf (" reverse_partial_completion: %d", ptr_completion->reverse_partial_completion);
log_printf (" list. . . . . . . . . . . . : %p", ptr_completion->list); log_printf (" list. . . . . . . . . . . : %p", ptr_completion->list);
log_printf (" word_found. . . . . . . . . : '%s'", ptr_completion->word_found); log_printf (" word_found. . . . . . . . : '%s'", ptr_completion->word_found);
log_printf (" word_found_is_nick. . . . . : %d", ptr_completion->word_found_is_nick); log_printf (" word_found_is_nick. . . . : %d", ptr_completion->word_found_is_nick);
log_printf (" position_replace. . . . . . : %d", ptr_completion->position_replace); log_printf (" position_replace. . . . . : %d", ptr_completion->position_replace);
log_printf (" diff_size . . . . . . . . . : %d", ptr_completion->diff_size); log_printf (" diff_size . . . . . . . . : %d", ptr_completion->diff_size);
log_printf (" diff_length . . . . . . . . : %d", ptr_completion->diff_length); log_printf (" diff_length . . . . . . . : %d", ptr_completion->diff_length);
log_printf (" prev_completion . . . . . . : %p", ptr_completion->prev_completion); log_printf (" prev_completion . . . . . : %p", ptr_completion->prev_completion);
log_printf (" next_completion . . . . . . : %p", ptr_completion->next_completion); log_printf (" next_completion . . . . . : %p", ptr_completion->next_completion);
if (ptr_completion->list && (ptr_completion->list->size > 0)) if (ptr_completion->list && (ptr_completion->list->size > 0))
{ {
log_printf (""); log_printf ("");
+2 -2
View File
@@ -56,8 +56,8 @@ struct t_gui_completion
char *args; /* command line args (including base word) */ char *args; /* command line args (including base word) */
int direction; /* +1=search next word, -1=previous word */ int direction; /* +1=search next word, -1=previous word */
int add_space; /* add space after completion? */ int add_space; /* add space after completion? */
int partial_completion; /* partial completion? */ int force_partial_completion; /* force partial completion? */
int template_partial_completion; /* template with partial completion? */ int reverse_partial_completion; /* reverse partial completion? */
/* for command argument completion */ /* for command argument completion */
struct t_arraylist *list; /* data list for completion */ struct t_arraylist *list; /* data list for completion */
+2 -6
View File
@@ -124,12 +124,8 @@ else()
endif() endif()
if(ENABLE_SCRIPTS AND ENABLE_PYTHON) if(ENABLE_SCRIPTS AND ENABLE_PYTHON)
if(CMAKE_VERSION VERSION_LESS "3.18.0") find_package(Python)
find_package(Python 3.0 COMPONENTS Development) if(PYTHON_FOUND)
else()
find_package(Python 3.0 COMPONENTS Development.Embed)
endif()
if(Python_FOUND)
add_subdirectory(python) add_subdirectory(python)
else() else()
message(SEND_ERROR "Python not found") message(SEND_ERROR "Python not found")
-1
View File
@@ -27,7 +27,6 @@ add_library(lua MODULE
set_target_properties(lua PROPERTIES PREFIX "") set_target_properties(lua PROPERTIES PREFIX "")
if(LUA_FOUND) if(LUA_FOUND)
add_definitions(${LUA_CFLAGS})
include_directories(${LUA_INCLUDE_DIRS}) include_directories(${LUA_INCLUDE_DIRS})
target_link_libraries(lua ${LUA_LDFLAGS} weechat_plugins_scripts coverage_config) target_link_libraries(lua ${LUA_LDFLAGS} weechat_plugins_scripts coverage_config)
endif() endif()
+2 -4
View File
@@ -25,10 +25,8 @@ add_library(python MODULE
) )
set_target_properties(python PROPERTIES PREFIX "") set_target_properties(python PROPERTIES PREFIX "")
if(Python_FOUND) if(PYTHON_FOUND)
include_directories(${Python_INCLUDE_DIRS}) target_link_libraries(python PkgConfig::PYTHON weechat_plugins_scripts coverage_config)
add_definitions(${Python_DEFINITIONS})
target_link_libraries(python ${Python_LIBRARIES} weechat_plugins_scripts coverage_config)
endif() endif()
install(TARGETS python LIBRARY DESTINATION "${WEECHAT_LIBDIR}/plugins") install(TARGETS python LIBRARY DESTINATION "${WEECHAT_LIBDIR}/plugins")
+10 -2
View File
@@ -59,11 +59,15 @@
#define MSG_ADD_HDATA_TIME_USEC(__json_name, \ #define MSG_ADD_HDATA_TIME_USEC(__json_name, \
__var_name, __var_name_usec) \ __var_name, __var_name_usec) \
tv.tv_sec = weechat_hdata_time (hdata, pointer, __var_name); \ time_value = weechat_hdata_time (hdata, pointer, __var_name); \
local_time = localtime (&time_value); \
time_value -= local_time->tm_gmtoff; \
local_time = localtime (&time_value); \
tv.tv_sec = mktime (local_time); \
tv.tv_usec = weechat_hdata_integer (hdata, pointer, \ tv.tv_usec = weechat_hdata_integer (hdata, pointer, \
__var_name_usec); \ __var_name_usec); \
weechat_util_strftimeval (str_time, sizeof (str_time), \ weechat_util_strftimeval (str_time, sizeof (str_time), \
"%@%FT%T.%fZ", &tv); \ "%FT%T.%fZ", &tv); \
MSG_ADD_STR_BUF(__json_name, str_time); MSG_ADD_STR_BUF(__json_name, str_time);
#define MSG_ADD_HDATA_STR(__json_name, __var_name) \ #define MSG_ADD_HDATA_STR(__json_name, __var_name) \
@@ -485,7 +489,9 @@ relay_api_msg_line_data_to_json (struct t_gui_line_data *line_data,
const char *ptr_string; const char *ptr_string;
char *string, str_time[256], str_var[64]; char *string, str_time[256], str_var[64];
int i, tags_count; int i, tags_count;
time_t time_value;
struct timeval tv; struct timeval tv;
struct tm *local_time;
hdata = relay_hdata_line_data; hdata = relay_hdata_line_data;
pointer = line_data; pointer = line_data;
@@ -788,7 +794,9 @@ relay_api_msg_hotlist_to_json (struct t_gui_hotlist *hotlist)
struct t_gui_hotlist *pointer; struct t_gui_hotlist *pointer;
struct t_gui_buffer *buffer; struct t_gui_buffer *buffer;
cJSON *json, *json_count; cJSON *json, *json_count;
time_t time_value;
struct timeval tv; struct timeval tv;
struct tm *local_time;
char str_time[256], str_key[32]; char str_time[256], str_key[32];
int i, array_size; int i, array_size;
long long buffer_id; long long buffer_id;
+53 -94
View File
@@ -374,7 +374,7 @@ RELAY_API_PROTOCOL_CALLBACK(options)
relay_api_msg_send_json ( relay_api_msg_send_json (
client, client,
RELAY_HTTP_204_NO_CONTENT, RELAY_HTTP_204_NO_CONTENT,
"Access-Control-Allow-Methods: " RELAY_API_ALLOWED_METHODS "\r\n" "Access-Control-Allow-Methods: GET, POST, PUT, DELETE\r\n"
"Access-Control-Allow-Headers: origin, content-type, accept, authorization", "Access-Control-Allow-Headers: origin, content-type, accept, authorization",
NULL, /* body_type */ NULL, /* body_type */
NULL); /* json_body */ NULL); /* json_body */
@@ -401,13 +401,9 @@ RELAY_API_PROTOCOL_CALLBACK(handshake)
json_body = cJSON_Parse (client->http_req->body); json_body = cJSON_Parse (client->http_req->body);
if (json_body) if (json_body)
{ {
if (!cJSON_IsObject (json_body))
return RELAY_API_PROTOCOL_RC_BAD_REQUEST;
json_algos = cJSON_GetObjectItem (json_body, "password_hash_algo"); json_algos = cJSON_GetObjectItem (json_body, "password_hash_algo");
if (json_algos) if (json_algos)
{ {
if (!cJSON_IsArray (json_algos))
goto invalid_hash_algo;
cJSON_ArrayForEach (json_algo, json_algos) cJSON_ArrayForEach (json_algo, json_algos)
{ {
ptr_algo = (cJSON_IsString (json_algo)) ? ptr_algo = (cJSON_IsString (json_algo)) ?
@@ -415,17 +411,7 @@ RELAY_API_PROTOCOL_CALLBACK(handshake)
if (ptr_algo) if (ptr_algo)
{ {
index_hash_algo = relay_auth_password_hash_algo_search (ptr_algo); index_hash_algo = relay_auth_password_hash_algo_search (ptr_algo);
if (index_hash_algo < 0) if ((index_hash_algo >= 0) && (index_hash_algo > hash_algo_found))
{
relay_api_msg_send_error_json (
client,
RELAY_HTTP_400_BAD_REQUEST, NULL,
"Hash algorithm \"%s\" not found",
ptr_algo);
cJSON_Delete (json_body);
return RELAY_API_PROTOCOL_RC_OK;
}
if (index_hash_algo > hash_algo_found)
{ {
if (weechat_string_match_list ( if (weechat_string_match_list (
relay_auth_password_hash_algo_name[index_hash_algo], relay_auth_password_hash_algo_name[index_hash_algo],
@@ -436,8 +422,6 @@ RELAY_API_PROTOCOL_CALLBACK(handshake)
} }
} }
} }
else
goto invalid_hash_algo;
} }
} }
} }
@@ -476,14 +460,6 @@ RELAY_API_PROTOCOL_CALLBACK(handshake)
cJSON_Delete (json_body); cJSON_Delete (json_body);
return RELAY_API_PROTOCOL_RC_OK; return RELAY_API_PROTOCOL_RC_OK;
invalid_hash_algo:
relay_api_msg_send_error_json (
client,
RELAY_HTTP_400_BAD_REQUEST, NULL,
"Invalid hash algorithm");
cJSON_Delete (json_body);
return RELAY_API_PROTOCOL_RC_OK;
} }
/* /*
@@ -736,55 +712,57 @@ RELAY_API_PROTOCOL_CALLBACK(input)
char str_delay[32]; char str_delay[32];
json_body = cJSON_Parse (client->http_req->body); json_body = cJSON_Parse (client->http_req->body);
if (!json_body || !cJSON_IsObject (json_body)) if (!json_body)
return RELAY_API_PROTOCOL_RC_BAD_REQUEST; return RELAY_API_PROTOCOL_RC_BAD_REQUEST;
/* get buffer either by name or by id */ /* get buffer either by id or by name */
ptr_buffer = NULL; ptr_buffer = NULL;
json_buffer_name = cJSON_GetObjectItem (json_body, "buffer_name"); json_buffer_id = cJSON_GetObjectItem (json_body, "buffer_id");
if (json_buffer_name) if (json_buffer_id)
{ {
if (cJSON_IsString (json_buffer_name)) if (cJSON_IsNumber (json_buffer_id))
{ {
ptr_buffer_name = cJSON_GetStringValue (json_buffer_name); snprintf (str_id, sizeof (str_id),
ptr_buffer = weechat_buffer_search ("==", ptr_buffer_name); "%lld", (long long)cJSON_GetNumberValue (json_buffer_id));
ptr_buffer = weechat_buffer_search ("==id", str_id);
if (!ptr_buffer) if (!ptr_buffer)
{ {
relay_api_msg_send_error_json ( relay_api_msg_send_error_json (
client, client,
RELAY_HTTP_400_BAD_REQUEST, NULL, RELAY_HTTP_400_BAD_REQUEST, NULL,
"Buffer \"%s\" not found", "Buffer \"%lld\" not found",
ptr_buffer_name); (long long)cJSON_GetNumberValue (json_buffer_id));
cJSON_Delete (json_body); cJSON_Delete (json_body);
return RELAY_API_PROTOCOL_RC_OK; return RELAY_API_PROTOCOL_RC_OK;
} }
} }
} }
if (!ptr_buffer) else
{ {
json_buffer_id = cJSON_GetObjectItem (json_body, "buffer_id"); json_buffer_name = cJSON_GetObjectItem (json_body, "buffer_name");
if (json_buffer_id) if (json_buffer_name)
{ {
if (cJSON_IsNumber (json_buffer_id)) if (cJSON_IsString (json_buffer_name))
{ {
snprintf (str_id, sizeof (str_id), ptr_buffer_name = cJSON_GetStringValue (json_buffer_name);
"%lld", (long long)cJSON_GetNumberValue (json_buffer_id)); ptr_buffer = weechat_buffer_search ("==", ptr_buffer_name);
ptr_buffer = weechat_buffer_search ("==id", str_id);
if (!ptr_buffer) if (!ptr_buffer)
{ {
relay_api_msg_send_error_json ( relay_api_msg_send_error_json (
client, client,
RELAY_HTTP_400_BAD_REQUEST, NULL, RELAY_HTTP_400_BAD_REQUEST, NULL,
"Buffer \"%lld\" not found", "Buffer \"%s\" not found",
(long long)cJSON_GetNumberValue (json_buffer_id)); ptr_buffer_name);
cJSON_Delete (json_body); cJSON_Delete (json_body);
return RELAY_API_PROTOCOL_RC_OK; return RELAY_API_PROTOCOL_RC_OK;
} }
} }
} }
else
{
ptr_buffer = weechat_buffer_search_main ();
}
} }
if (!ptr_buffer)
ptr_buffer = weechat_buffer_search_main ();
if (!ptr_buffer) if (!ptr_buffer)
{ {
cJSON_Delete (json_body); cJSON_Delete (json_body);
@@ -863,55 +841,57 @@ RELAY_API_PROTOCOL_CALLBACK(completion)
struct t_gui_buffer *ptr_buffer; struct t_gui_buffer *ptr_buffer;
json_body = cJSON_Parse (client->http_req->body); json_body = cJSON_Parse (client->http_req->body);
if (!json_body || !cJSON_IsObject(json_body)) if (!json_body)
return RELAY_API_PROTOCOL_RC_BAD_REQUEST; return RELAY_API_PROTOCOL_RC_BAD_REQUEST;
/* get buffer either by name or by id */ /* get buffer either by id or by name */
ptr_buffer = NULL; ptr_buffer = NULL;
json_buffer_name = cJSON_GetObjectItem (json_body, "buffer_name"); json_buffer_id = cJSON_GetObjectItem (json_body, "buffer_id");
if (json_buffer_name) if (json_buffer_id)
{ {
if (cJSON_IsString (json_buffer_name)) if (cJSON_IsNumber (json_buffer_id))
{ {
ptr_buffer_name = cJSON_GetStringValue (json_buffer_name); snprintf (str_id, sizeof(str_id),
ptr_buffer = weechat_buffer_search ("==", ptr_buffer_name); "%lld", (long long)cJSON_GetNumberValue (json_buffer_id));
ptr_buffer = weechat_buffer_search ("==id", str_id);
if (!ptr_buffer) if (!ptr_buffer)
{ {
relay_api_msg_send_error_json ( relay_api_msg_send_error_json (
client, client,
RELAY_HTTP_400_BAD_REQUEST, NULL, RELAY_HTTP_400_BAD_REQUEST, NULL,
"Buffer \"%s\" not found", "Buffer \"%lld\" not found",
ptr_buffer_name); (long long)cJSON_GetNumberValue (json_buffer_id));
cJSON_Delete (json_body); cJSON_Delete (json_body);
return RELAY_API_PROTOCOL_RC_OK; return RELAY_API_PROTOCOL_RC_OK;
} }
} }
} }
if (!ptr_buffer) else
{ {
json_buffer_id = cJSON_GetObjectItem (json_body, "buffer_id"); json_buffer_name = cJSON_GetObjectItem (json_body, "buffer_name");
if (json_buffer_id) if (json_buffer_name)
{ {
if (cJSON_IsNumber (json_buffer_id)) if (cJSON_IsString (json_buffer_name))
{ {
snprintf (str_id, sizeof(str_id), ptr_buffer_name = cJSON_GetStringValue (json_buffer_name);
"%lld", (long long)cJSON_GetNumberValue (json_buffer_id)); ptr_buffer = weechat_buffer_search ("==", ptr_buffer_name);
ptr_buffer = weechat_buffer_search ("==id", str_id);
if (!ptr_buffer) if (!ptr_buffer)
{ {
relay_api_msg_send_error_json ( relay_api_msg_send_error_json (
client, client,
RELAY_HTTP_400_BAD_REQUEST, NULL, RELAY_HTTP_400_BAD_REQUEST, NULL,
"Buffer \"%lld\" not found", "Buffer \"%s\" not found",
(long long)cJSON_GetNumberValue (json_buffer_id)); ptr_buffer_name);
cJSON_Delete (json_body); cJSON_Delete (json_body);
return RELAY_API_PROTOCOL_RC_OK; return RELAY_API_PROTOCOL_RC_OK;
} }
} }
} }
else
{
ptr_buffer = weechat_buffer_search_main ();
}
} }
if (!ptr_buffer)
ptr_buffer = weechat_buffer_search_main ();
if (!ptr_buffer) if (!ptr_buffer)
{ {
cJSON_Delete (json_body); cJSON_Delete (json_body);
@@ -1217,7 +1197,7 @@ relay_api_protocol_recv_json (struct t_relay_client *client, const char *json)
void void
relay_api_protocol_recv_http (struct t_relay_client *client) relay_api_protocol_recv_http (struct t_relay_client *client)
{ {
int i, num_args, match_method, match_resource; int i, num_args;
char str_error[1024]; char str_error[1024];
enum t_relay_api_protocol_rc return_code; enum t_relay_api_protocol_rc return_code;
struct t_relay_api_protocol_cb protocol_cb[] = { struct t_relay_api_protocol_cb protocol_cb[] = {
@@ -1258,22 +1238,18 @@ relay_api_protocol_recv_http (struct t_relay_client *client)
|| !client->http_req->path_items[1] || !client->http_req->path_items[1]
|| (strcmp (client->http_req->path_items[0], "api") != 0)) || (strcmp (client->http_req->path_items[0], "api") != 0))
{ {
goto resource_not_found; goto error_not_found;
} }
num_args = client->http_req->num_path_items - 2; num_args = client->http_req->num_path_items - 2;
for (i = 0; protocol_cb[i].resource; i++) for (i = 0; protocol_cb[i].resource; i++)
{ {
match_method = (strcmp (protocol_cb[i].method, client->http_req->method) == 0); if (strcmp (protocol_cb[i].method, client->http_req->method) != 0)
continue;
match_resource = ((strcmp (protocol_cb[i].resource, "*") == 0) if ((strcmp (protocol_cb[i].resource, "*") != 0)
|| (strcmp (protocol_cb[i].resource, client->http_req->path_items[1]) == 0)); && (strcmp (protocol_cb[i].resource, client->http_req->path_items[1]) != 0))
if (!match_method && (strcmp (protocol_cb[i].resource, "*") != 0) && match_resource)
goto error_method_not_allowed;
if (!match_method || !match_resource)
continue; continue;
if (protocol_cb[i].auth_required if (protocol_cb[i].auth_required
@@ -1355,18 +1331,7 @@ relay_api_protocol_recv_http (struct t_relay_client *client)
} }
} }
resource_not_found: goto error_not_found;
if ((strcmp (client->http_req->method, "GET") != 0)
&& (strcmp (client->http_req->method, "POST") != 0)
&& (strcmp (client->http_req->method, "PUT") != 0)
&& (strcmp (client->http_req->method, "DELETE") != 0))
{
goto error_method_not_allowed;
}
else
{
goto error_not_found;
}
error_bad_request: error_bad_request:
relay_api_msg_send_error_json (client, RELAY_HTTP_400_BAD_REQUEST, relay_api_msg_send_error_json (client, RELAY_HTTP_400_BAD_REQUEST,
@@ -1378,12 +1343,6 @@ error_not_found:
NULL, RELAY_HTTP_ERROR_NOT_FOUND); NULL, RELAY_HTTP_ERROR_NOT_FOUND);
goto error; goto error;
error_method_not_allowed:
relay_api_msg_send_error_json (client, RELAY_HTTP_405_METHOD_NOT_ALLOWED,
"Allow: " RELAY_API_ALLOWED_METHODS,
RELAY_HTTP_ERROR_METHOD_NOT_ALLOWED);
goto error;
error_memory: error_memory:
relay_api_msg_send_error_json (client, RELAY_HTTP_503_SERVICE_UNAVAILABLE, relay_api_msg_send_error_json (client, RELAY_HTTP_503_SERVICE_UNAVAILABLE,
NULL, RELAY_HTTP_ERROR_OUT_OF_MEMORY); NULL, RELAY_HTTP_ERROR_OUT_OF_MEMORY);
@@ -22,8 +22,6 @@
#ifndef WEECHAT_PLUGIN_RELAY_API_PROTOCOL_H #ifndef WEECHAT_PLUGIN_RELAY_API_PROTOCOL_H
#define WEECHAT_PLUGIN_RELAY_API_PROTOCOL_H #define WEECHAT_PLUGIN_RELAY_API_PROTOCOL_H
#define RELAY_API_ALLOWED_METHODS "GET, POST, PUT, DELETE"
#define RELAY_API_CB(__command) &relay_api_protocol_cb_##__command #define RELAY_API_CB(__command) &relay_api_protocol_cb_##__command
#define RELAY_API_PROTOCOL_CALLBACK(__command) \ #define RELAY_API_PROTOCOL_CALLBACK(__command) \
enum t_relay_api_protocol_rc \ enum t_relay_api_protocol_rc \
+1 -1
View File
@@ -27,7 +27,7 @@ enum t_relay_status;
#define RELAY_API_VERSION_MAJOR 0 #define RELAY_API_VERSION_MAJOR 0
#define RELAY_API_VERSION_MINOR 4 #define RELAY_API_VERSION_MINOR 4
#define RELAY_API_VERSION_PATCH 1 #define RELAY_API_VERSION_PATCH 0
#define RELAY_API_VERSION_NUMBER \ #define RELAY_API_VERSION_NUMBER \
((RELAY_API_VERSION_MAJOR << 16) \ ((RELAY_API_VERSION_MAJOR << 16) \
+ (RELAY_API_VERSION_MINOR << 8) \ + (RELAY_API_VERSION_MINOR << 8) \
+143 -138
View File
@@ -17,7 +17,7 @@ info:
license: license:
name: CC BY-NC-SA 4.0 name: CC BY-NC-SA 4.0
url: https://creativecommons.org/licenses/by-nc-sa/4.0/ url: https://creativecommons.org/licenses/by-nc-sa/4.0/
version: 0.4.1 version: 0.4.0
externalDocs: externalDocs:
url: https://weechat.org/doc/ url: https://weechat.org/doc/
@@ -50,29 +50,7 @@ paths:
This endpoint does not require authentication. This endpoint does not require authentication.
operationId: handshake operationId: handshake
requestBody: requestBody:
description: Handshake request $ref: '#/components/requestBodies/HandshakeBody'
required: true
content:
application/json:
schema:
type: object
properties:
password_hash_algo:
type: array
items:
type: string
enum:
- plain
- sha256
- sha512
- pbkdf2+sha256
- pbkdf2+sha512
example:
- plain
- sha256
- sha512
- pbkdf2+sha256
- pbkdf2+sha512
responses: responses:
'200': '200':
description: Successful operation description: Successful operation
@@ -80,12 +58,6 @@ paths:
application/json: application/json:
schema: schema:
$ref: '#/components/schemas/Handshake' $ref: '#/components/schemas/Handshake'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503': '503':
description: Out of memory description: Out of memory
content: content:
@@ -202,7 +174,7 @@ paths:
tags: tags:
- buffers - buffers
description: | description: |
Get a single buffer by full name, with optional lines and nicks. Get buffer by full name, with optional lines and nicks.
operationId: getBufferByName operationId: getBufferByName
parameters: parameters:
- $ref: '#/components/parameters/totp' - $ref: '#/components/parameters/totp'
@@ -520,31 +492,7 @@ paths:
parameters: parameters:
- $ref: '#/components/parameters/totp' - $ref: '#/components/parameters/totp'
requestBody: requestBody:
description: Buffer and command to execute $ref: '#/components/requestBodies/InputBody'
required: true
content:
application/json:
schema:
type: object
properties:
buffer_id:
type: integer
format: int64
description: Buffer identifier (≥ 0)
buffer_name:
type: string
description: >-
Buffer full name
example: 'core.weechat'
command:
type: string
description: text or command to send
example: '/print test'
required:
- command
example:
buffer_name: 'core.weechat'
command: '/print test'
responses: responses:
'204': '204':
description: Successful operation description: Successful operation
@@ -568,42 +516,11 @@ paths:
- completion - completion
description: | description: |
Complete user command or text. Complete user command or text.
operationId: completion operationId: input
parameters: parameters:
- $ref: '#/components/parameters/totp' - $ref: '#/components/parameters/totp'
requestBody: requestBody:
description: Buffer and user text/command to complete $ref: '#/components/requestBodies/CompletionBody'
required: true
content:
application/json:
schema:
type: object
properties:
buffer_id:
type: integer
format: int64
description: Buffer identifier (≥ 0)
buffer_name:
type: string
description: >-
Buffer full name
example: 'core.weechat'
command:
type: string
description: user command or text to complete
example: '/hel'
position:
type: integer
format: int32
description: Position in data (≥ 0)
example: 4
required:
- command
- position
example:
buffer_name: 'core.weechat'
command: '/hel'
position: 4
responses: responses:
'200': '200':
description: Successful operation description: Successful operation
@@ -635,16 +552,7 @@ paths:
parameters: parameters:
- $ref: '#/components/parameters/totp' - $ref: '#/components/parameters/totp'
requestBody: requestBody:
description: Custom data that will be returned in the response $ref: '#/components/requestBodies/PingBody'
required: false
content:
application/json:
schema:
type: object
properties:
data:
type: string
example: '1714854355123456'
responses: responses:
'200': '200':
description: Successful operation description: Successful operation
@@ -681,37 +589,7 @@ paths:
parameters: parameters:
- $ref: '#/components/parameters/totp' - $ref: '#/components/parameters/totp'
requestBody: requestBody:
description: Synchronization parameters $ref: '#/components/requestBodies/SyncBody'
required: false
content:
application/json:
schema:
type: object
properties:
sync:
type: boolean
description: Enable synchronization
example: true
nicks:
type: boolean
description: Receive nick updates in buffers
example: true
input:
type: boolean
description: Receive input changes in buffers (content and cursor position)
example: true
colors:
type: string
enum:
- ansi
- weechat
- strip
default: ansi
description: |
How to return strings with color codes:
* `ansi`: return ANSI color codes
* `weechat`: return WeeChat internal color codes
* `strip`: strip colors
responses: responses:
'204': '204':
description: Successful operation description: Successful operation
@@ -754,7 +632,6 @@ components:
type: integer type: integer
format: int64 format: int64
description: Buffer identifier description: Buffer identifier
example: 1709932823238637
bufferName: bufferName:
name: buffer_name name: buffer_name
in: path in: path
@@ -1023,7 +900,7 @@ components:
type: string type: string
format: date-time format: date-time
description: date and time of line description: date and time of line
example: '2023-12-05T19:46:03.847625Z' example: '"2023-12-05T19:46:03.847625Z'
date_printed: date_printed:
type: string type: string
format: date-time format: date-time
@@ -1284,11 +1161,11 @@ components:
type: array type: array
items: items:
type: string type: string
example: example:
- 'query' - 'query'
- 'quiet' - 'quiet'
- 'quit' - 'quit'
- 'quote' - 'quote'
required: required:
- context - context
- base_word - base_word
@@ -1300,10 +1177,138 @@ components:
properties: properties:
data: data:
type: string type: string
example: '1714854355123456' example: 1714854355123456
required: required:
- data - data
requestBodies:
HandshakeBody:
description: Handshake request
required: false
content:
application/json:
schema:
type: object
properties:
password_hash_algo:
type: array
items:
type: string
enum:
- plain
- sha256
- sha512
- pbkdf2+sha256
- pbkdf2+sha512
example:
- plain
- sha256
- sha512
- pbkdf2+sha256
- pbkdf2+sha512
InputBody:
description: Buffer and command to execute
required: true
content:
application/json:
schema:
type: object
properties:
buffer_id:
type: integer
format: int64
description: Buffer identifier (≥ 0)
example: 1709932823238637
buffer_name:
type: string
description: >-
Buffer full name
example: 'irc.libera.#weechat'
command:
type: string
description: text or command to send
example: 'hello, world!'
required:
- command
example:
buffer_id: 1709932823238637
command: 'hello, world!'
CompletionBody:
description: Buffer and user text/command to complete
required: true
content:
application/json:
schema:
type: object
properties:
buffer_id:
type: integer
format: int64
description: Buffer identifier (≥ 0)
example: 1709932823238637
buffer_name:
type: string
description: >-
Buffer full name
example: 'irc.libera.#weechat'
command:
type: string
description: user command or text to complete
example: '/qu'
position:
type: integer
format: int32
description: Position in data (≥ 0)
example: 3
required:
- data
example:
buffer_id: 1709932823238637
command: '/qu'
PingBody:
description: Custom data that will be returned in the response
required: false
content:
application/json:
schema:
type: object
properties:
data:
type: string
example: 1714854355123456
SyncBody:
description: Synchronization parameters
required: false
content:
application/json:
schema:
type: object
properties:
sync:
type: boolean
description: Enable synchronization
example: true
nicks:
type: boolean
description: Receive nick updates in buffers
example: true
input:
type: boolean
description: Receive input changes in buffers (content and cursor position)
example: true
colors:
type: string
enum:
- ansi
- weechat
- strip
default: ansi
description: |
How to return strings with color codes:
* `ansi`: return ANSI color codes
* `weechat`: return WeeChat internal color codes
* `strip`: strip colors
securitySchemes: securitySchemes:
password: password:
type: http type: http
+3 -4
View File
@@ -504,8 +504,7 @@ relay_client_recv_text_buffer (struct t_relay_client *client,
if ((client->websocket == RELAY_CLIENT_WEBSOCKET_INITIALIZING) if ((client->websocket == RELAY_CLIENT_WEBSOCKET_INITIALIZING)
|| (client->recv_data_type == RELAY_CLIENT_DATA_HTTP)) || (client->recv_data_type == RELAY_CLIENT_DATA_HTTP))
{ {
relay_http_recv (client, buffer + index, length_buffer - index); relay_http_recv (client, buffer + index);
break;
} }
else else
{ {
@@ -583,7 +582,7 @@ relay_client_read_websocket_frames (struct t_relay_client *client,
if ((client->websocket == RELAY_CLIENT_WEBSOCKET_INITIALIZING) if ((client->websocket == RELAY_CLIENT_WEBSOCKET_INITIALIZING)
|| (client->recv_data_type == RELAY_CLIENT_DATA_HTTP)) || (client->recv_data_type == RELAY_CLIENT_DATA_HTTP))
{ {
relay_http_recv (client, frames[i].payload, frames[i].payload_size); relay_http_recv (client, frames[i].payload);
} }
else if ((client->recv_data_type == RELAY_CLIENT_DATA_TEXT_LINE) else if ((client->recv_data_type == RELAY_CLIENT_DATA_TEXT_LINE)
|| (client->recv_data_type == RELAY_CLIENT_DATA_TEXT_MULTILINE)) || (client->recv_data_type == RELAY_CLIENT_DATA_TEXT_MULTILINE))
@@ -695,7 +694,7 @@ relay_client_recv_buffer (struct t_relay_client *client,
if ((client->websocket == RELAY_CLIENT_WEBSOCKET_INITIALIZING) if ((client->websocket == RELAY_CLIENT_WEBSOCKET_INITIALIZING)
|| (client->recv_data_type == RELAY_CLIENT_DATA_HTTP)) || (client->recv_data_type == RELAY_CLIENT_DATA_HTTP))
{ {
relay_http_recv (client, buffer, buffer_size); relay_http_recv (client, buffer);
} }
else if ((client->recv_data_type == RELAY_CLIENT_DATA_TEXT_LINE) else if ((client->recv_data_type == RELAY_CLIENT_DATA_TEXT_LINE)
|| (client->recv_data_type == RELAY_CLIENT_DATA_TEXT_MULTILINE)) || (client->recv_data_type == RELAY_CLIENT_DATA_TEXT_MULTILINE))
+4 -9
View File
@@ -935,13 +935,11 @@ relay_http_process_request (struct t_relay_client *client)
*/ */
void void
relay_http_recv (struct t_relay_client *client, const char *data, int size) relay_http_recv (struct t_relay_client *client, const char *data)
{ {
char *new_partial, *pos, **null_char; char *new_partial, *pos;
int length, ws_deflate_allowed; int length, ws_deflate_allowed;
null_char = memchr (data, 0, size);
if (client->partial_message) if (client->partial_message)
{ {
new_partial = realloc (client->partial_message, new_partial = realloc (client->partial_message,
@@ -1005,11 +1003,8 @@ relay_http_recv (struct t_relay_client *client, const char *data, int size)
relay_http_add_to_body (client->http_req, &(client->partial_message)); relay_http_add_to_body (client->http_req, &(client->partial_message));
} }
/* /* process the request if it's ready to be processed (all parsed) */
* process the request if it's ready to be processed (all parsed) if (client->http_req->status == RELAY_HTTP_END)
* or if we received a NULL char in the HTTP message (forbidden)
* */
if ((client->http_req->status == RELAY_HTTP_END) || null_char)
{ {
relay_http_process_request (client); relay_http_process_request (client);
relay_http_request_reinit (client->http_req); relay_http_request_reinit (client->http_req);
+1 -4
View File
@@ -40,7 +40,6 @@ enum t_relay_client_http_status
#define RELAY_HTTP_401_UNAUTHORIZED 401, "Unauthorized" #define RELAY_HTTP_401_UNAUTHORIZED 401, "Unauthorized"
#define RELAY_HTTP_403_FORBIDDEN 403, "Forbidden" #define RELAY_HTTP_403_FORBIDDEN 403, "Forbidden"
#define RELAY_HTTP_404_NOT_FOUND 404, "Not Found" #define RELAY_HTTP_404_NOT_FOUND 404, "Not Found"
#define RELAY_HTTP_405_METHOD_NOT_ALLOWED 405, "Method Not Allowed"
#define RELAY_HTTP_500_INTERNAL_SERVER_ERROR 500, "Internal Server Error" #define RELAY_HTTP_500_INTERNAL_SERVER_ERROR 500, "Internal Server Error"
#define RELAY_HTTP_503_SERVICE_UNAVAILABLE 503, "Service Unavailable" #define RELAY_HTTP_503_SERVICE_UNAVAILABLE 503, "Service Unavailable"
@@ -54,7 +53,6 @@ enum t_relay_client_http_status
#define RELAY_HTTP_ERROR_INVALID_ITERATIONS "Invalid number of iterations" #define RELAY_HTTP_ERROR_INVALID_ITERATIONS "Invalid number of iterations"
#define RELAY_HTTP_ERROR_BAD_REQUEST "Bad request" #define RELAY_HTTP_ERROR_BAD_REQUEST "Bad request"
#define RELAY_HTTP_ERROR_NOT_FOUND "Resource not found" #define RELAY_HTTP_ERROR_NOT_FOUND "Resource not found"
#define RELAY_HTTP_ERROR_METHOD_NOT_ALLOWED "Method Not Allowed"
#define RELAY_HTTP_ERROR_OUT_OF_MEMORY "Out of memory" #define RELAY_HTTP_ERROR_OUT_OF_MEMORY "Out of memory"
struct t_relay_http_request struct t_relay_http_request
@@ -100,8 +98,7 @@ extern long relay_http_get_param_long (struct t_relay_http_request *request,
extern int relay_http_parse_method_path (struct t_relay_http_request *request, extern int relay_http_parse_method_path (struct t_relay_http_request *request,
const char *method_path); const char *method_path);
extern int relay_http_check_auth (struct t_relay_client *client); extern int relay_http_check_auth (struct t_relay_client *client);
extern void relay_http_recv (struct t_relay_client *client, extern void relay_http_recv (struct t_relay_client *client, const char *data);
const char *data, int size);
extern int relay_http_send (struct t_relay_client *client, extern int relay_http_send (struct t_relay_client *client,
int return_code, const char *message, int return_code, const char *message,
const char *headers, const char *headers,
+1 -5
View File
@@ -25,10 +25,6 @@ if(NOT DEFINED ENV{LIB_FUZZING_ENGINE})
set(ENV{LIB_FUZZING_ENGINE} "-fsanitize=address,fuzzer") set(ENV{LIB_FUZZING_ENGINE} "-fsanitize=address,fuzzer")
endif() endif()
if ("$ENV{LIB_FUZZING_ENGINE}" MATCHES "-fsanitize=.*fuzzer")
set(ENV{LIB_FUZZING_ENGINE} "$ENV{LIB_FUZZING_ENGINE};-fsanitize=fuzzer-no-link")
endif()
remove_definitions(-DHAVE_CONFIG_H) remove_definitions(-DHAVE_CONFIG_H)
include_directories( include_directories(
${PROJECT_BINARY_DIR} ${PROJECT_BINARY_DIR}
@@ -102,6 +98,6 @@ set(FUZZ_CORE_TARGETS calc eval crypto secure string utf8 util)
foreach(fuzz_target ${FUZZ_CORE_TARGETS}) foreach(fuzz_target ${FUZZ_CORE_TARGETS})
add_executable(weechat_core_${fuzz_target}_fuzzer core/${fuzz_target}-fuzzer.cc) add_executable(weechat_core_${fuzz_target}_fuzzer core/${fuzz_target}-fuzzer.cc)
target_link_libraries(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_LINK} coverage_config) target_link_libraries(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_LINK} coverage_config)
set_target_properties(weechat_core_${fuzz_target}_fuzzer PROPERTIES LINK_OPTIONS "$ENV{LIB_FUZZING_ENGINE}") set_target_properties(weechat_core_${fuzz_target}_fuzzer PROPERTIES LINK_FLAGS "$ENV{LIB_FUZZING_ENGINE}")
add_dependencies(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_DEPS}) add_dependencies(weechat_core_${fuzz_target}_fuzzer ${FUZZ_TARGET_DEPS})
endforeach() endforeach()
-4
View File
@@ -35,10 +35,6 @@ extern "C" int LLVMFuzzerTestOneInput (const uint8_t *data, size_t size)
{ {
char *str; char *str;
/* ignore huge data */
if (size > 65536)
return 0;
str = (char *)malloc (size + 1); str = (char *)malloc (size + 1);
memcpy (str, data, size); memcpy (str, data, size);
str[size] = '\0'; str[size] = '\0';
+17 -18
View File
@@ -61,10 +61,6 @@ LLVMFuzzerTestOneInput (const uint8_t *data, size_t size)
char *str, hash[1024], *encrypted, *decrypted; char *str, hash[1024], *encrypted, *decrypted;
int length_encrypted, length_decrypted; int length_encrypted, length_decrypted;
/* ignore empty or huge data */
if ((size == 0) || (size > 65536))
return 0;
str = (char *)malloc (size + 1); str = (char *)malloc (size + 1);
memcpy (str, data, size); memcpy (str, data, size);
str[size] = '\0'; str[size] = '\0';
@@ -72,20 +68,23 @@ LLVMFuzzerTestOneInput (const uint8_t *data, size_t size)
if (size >= 8) if (size >= 8)
secure_derive_key (str, str, (unsigned char *)hash, sizeof (hash)); secure_derive_key (str, str, (unsigned char *)hash, sizeof (hash));
encrypted = NULL; if (size > 0)
decrypted = NULL; {
config_file_option_set (secure_config_crypt_salt, "on", 1); encrypted = NULL;
secure_encrypt_data (str, size, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &encrypted, &length_encrypted); decrypted = NULL;
secure_decrypt_data (encrypted, length_encrypted, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &decrypted, &length_decrypted); config_file_option_set (secure_config_crypt_salt, "on", 1);
assert ((size_t)length_decrypted == size); secure_encrypt_data (str, size, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &encrypted, &length_encrypted);
assert (memcmp (decrypted, str, length_decrypted) == 0); secure_decrypt_data (encrypted, length_encrypted, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &decrypted, &length_decrypted);
free (encrypted); assert ((size_t)length_decrypted == size);
free (decrypted); assert (memcmp (decrypted, str, length_decrypted) == 0);
config_file_option_set (secure_config_crypt_salt, "off", 1); free (encrypted);
encrypted = NULL; free (decrypted);
secure_encrypt_data (str, size, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &encrypted, &length_encrypted); config_file_option_set (secure_config_crypt_salt, "off", 1);
free (encrypted); encrypted = NULL;
config_file_option_reset (secure_config_crypt_salt, 1); secure_encrypt_data (str, size, GCRY_MD_SHA512, GCRY_CIPHER_AES256, "test", &encrypted, &length_encrypted);
free (encrypted);
config_file_option_reset (secure_config_crypt_salt, 1);
}
free (str); free (str);
-1
View File
@@ -344,7 +344,6 @@ TEST(CoreCalc, Expression)
WEE_CHECK_CALC("0.0000000008", "1/1234567890"); WEE_CHECK_CALC("0.0000000008", "1/1234567890");
WEE_CHECK_CALC("0.0000000001", "1/12345678901"); WEE_CHECK_CALC("0.0000000001", "1/12345678901");
WEE_CHECK_CALC("0", "1/123456789012"); WEE_CHECK_CALC("0", "1/123456789012");
WEE_CHECK_CALC("1.2222222222", "1+0.22222222222222222222222222222222222");
/* expressions with parentheses */ /* expressions with parentheses */
WEE_CHECK_CALC("6", "((6))"); WEE_CHECK_CALC("6", "((6))");
-5
View File
@@ -187,11 +187,6 @@ TEST(CoreUtil, Strftimeval)
"%H:%M:%S", &tv)); "%H:%M:%S", &tv));
STRCMP_EQUAL("10:29:09", str_time); STRCMP_EQUAL("10:29:09", str_time);
strcpy (str_time, "test");
LONGS_EQUAL(8, util_strftimeval (str_time, sizeof (str_time),
"%@%H:%M:%S", &tv));
STRCMP_EQUAL("10:29:09", str_time);
strcpy (str_time, "test"); strcpy (str_time, "test");
LONGS_EQUAL(19, util_strftimeval (str_time, sizeof (str_time), LONGS_EQUAL(19, util_strftimeval (str_time, sizeof (str_time),
"%Y-%m-%d %H:%M:%S", &tv)); "%Y-%m-%d %H:%M:%S", &tv));
@@ -419,12 +419,12 @@ TEST(RelayApiMsg, LinesToJson)
gmtime_r (&(gui_buffers->own_lines->last_line->prev_line->data->date), &gm_time); gmtime_r (&(gui_buffers->own_lines->last_line->prev_line->data->date), &gm_time);
tv.tv_sec = mktime (&gm_time); tv.tv_sec = mktime (&gm_time);
tv.tv_usec = gui_buffers->own_lines->last_line->prev_line->data->date_usec; tv.tv_usec = gui_buffers->own_lines->last_line->prev_line->data->date_usec;
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv); util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
WEE_CHECK_OBJ_STR(str_date, json_line, "date"); WEE_CHECK_OBJ_STR(str_date, json_line, "date");
gmtime_r (&(gui_buffers->own_lines->last_line->prev_line->data->date_printed), &gm_time); gmtime_r (&(gui_buffers->own_lines->last_line->prev_line->data->date_printed), &gm_time);
tv.tv_sec = mktime (&gm_time); tv.tv_sec = mktime (&gm_time);
tv.tv_usec = gui_buffers->own_lines->last_line->prev_line->data->date_usec_printed; tv.tv_usec = gui_buffers->own_lines->last_line->prev_line->data->date_usec_printed;
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv); util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
WEE_CHECK_OBJ_STR(str_date, json_line, "date_printed"); WEE_CHECK_OBJ_STR(str_date, json_line, "date_printed");
WEE_CHECK_OBJ_BOOL(0, json_line, "highlight"); WEE_CHECK_OBJ_BOOL(0, json_line, "highlight");
WEE_CHECK_OBJ_STR("nick1", json_line, "prefix"); WEE_CHECK_OBJ_STR("nick1", json_line, "prefix");
@@ -455,12 +455,12 @@ TEST(RelayApiMsg, LinesToJson)
gmtime_r (&(gui_buffers->own_lines->last_line->data->date), &gm_time); gmtime_r (&(gui_buffers->own_lines->last_line->data->date), &gm_time);
tv.tv_sec = mktime (&gm_time); tv.tv_sec = mktime (&gm_time);
tv.tv_usec = gui_buffers->own_lines->last_line->data->date_usec; tv.tv_usec = gui_buffers->own_lines->last_line->data->date_usec;
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv); util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
WEE_CHECK_OBJ_STR(str_date, json_line, "date"); WEE_CHECK_OBJ_STR(str_date, json_line, "date");
gmtime_r (&(gui_buffers->own_lines->last_line->data->date_printed), &gm_time); gmtime_r (&(gui_buffers->own_lines->last_line->data->date_printed), &gm_time);
tv.tv_sec = mktime (&gm_time); tv.tv_sec = mktime (&gm_time);
tv.tv_usec = gui_buffers->own_lines->last_line->data->date_usec_printed; tv.tv_usec = gui_buffers->own_lines->last_line->data->date_usec_printed;
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv); util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
WEE_CHECK_OBJ_STR(str_date, json_line, "date_printed"); WEE_CHECK_OBJ_STR(str_date, json_line, "date_printed");
WEE_CHECK_OBJ_BOOL(0, json_line, "highlight"); WEE_CHECK_OBJ_BOOL(0, json_line, "highlight");
WEE_CHECK_OBJ_STR("", json_line, "prefix"); WEE_CHECK_OBJ_STR("", json_line, "prefix");
@@ -626,7 +626,7 @@ TEST(RelayApiMsg, HotlistToJson)
gmtime_r (&time_value, &gm_time); gmtime_r (&time_value, &gm_time);
tv.tv_sec = mktime (&gm_time); tv.tv_sec = mktime (&gm_time);
tv.tv_usec = hdata_integer (relay_hdata_hotlist, gui_hotlist, "time_usec"); tv.tv_usec = hdata_integer (relay_hdata_hotlist, gui_hotlist, "time_usec");
util_strftimeval (str_date, sizeof (str_date), "%@%FT%T.%fZ", &tv); util_strftimeval (str_date, sizeof (str_date), "%FT%T.%fZ", &tv);
WEE_CHECK_OBJ_STR(str_date, json, "date"); WEE_CHECK_OBJ_STR(str_date, json, "date");
WEE_CHECK_OBJ_NUM(gui_buffers->id, json, "buffer_id"); WEE_CHECK_OBJ_NUM(gui_buffers->id, json, "buffer_id");
json_count = cJSON_GetObjectItem (json, "count"); json_count = cJSON_GetObjectItem (json, "count");
@@ -321,23 +321,14 @@ TEST(RelayApiProtocolWithClient, CbHandshake)
/* unknown password hash algorithm */ /* unknown password hash algorithm */
test_client_recv_http ("POST /api/handshake", NULL, test_client_recv_http ("POST /api/handshake", NULL,
"{\"password_hash_algo\": [\"invalid\"]}"); "{\"password_hash_algo\": [\"invalid\"]}");
STRCMP_EQUAL("HTTP/1.1 400 Bad Request\r\n" STRCMP_EQUAL("HTTP/1.1 200 OK\r\n"
"Access-Control-Allow-Origin: *\r\n" "Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n" "Content-Type: application/json; charset=utf-8\r\n"
"Content-Length: 48\r\n" "Content-Length: 74\r\n"
"\r\n" "\r\n"
"{\"error\":\"Hash algorithm \\\"invalid\\\" not found\"}", "{\"password_hash_algo\":null,"
data_sent[0]); "\"password_hash_iterations\":100000,"
"\"totp\":false}",
/* invalid password hash algorithm */
test_client_recv_http ("POST /api/handshake", NULL,
"{\"password_hash_algo\": [{}]}");
STRCMP_EQUAL("HTTP/1.1 400 Bad Request\r\n"
"Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n"
"Content-Length: 34\r\n"
"\r\n"
"{\"error\":\"Invalid hash algorithm\"}",
data_sent[0]); data_sent[0]);
/* two supported hash algorithms */ /* two supported hash algorithms */
@@ -973,7 +964,7 @@ TEST(RelayApiProtocolWithClient, RecvJson)
TEST(RelayApiProtocolWithClient, RecvHttp404) TEST(RelayApiProtocolWithClient, RecvHttp404)
{ {
/* resource not found: error 404 */ /* resource not found: error 404 */
test_client_recv_http ("GET /", NULL, NULL); test_client_recv_http ("GET / HTTP/1.1", NULL, NULL);
STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n" STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n"
"Access-Control-Allow-Origin: *\r\n" "Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n" "Content-Type: application/json; charset=utf-8\r\n"
@@ -983,7 +974,7 @@ TEST(RelayApiProtocolWithClient, RecvHttp404)
data_sent[0]); data_sent[0]);
/* resource not found: error 404 */ /* resource not found: error 404 */
test_client_recv_http ("GET /unknown", NULL, NULL); test_client_recv_http ("GET /unknown HTTP/1.1", NULL, NULL);
STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n" STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n"
"Access-Control-Allow-Origin: *\r\n" "Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n" "Content-Type: application/json; charset=utf-8\r\n"
@@ -993,7 +984,7 @@ TEST(RelayApiProtocolWithClient, RecvHttp404)
data_sent[0]); data_sent[0]);
/* resource not found: error 404 */ /* resource not found: error 404 */
test_client_recv_http ("GET /unknown/abc", NULL, NULL); test_client_recv_http ("GET /unknown/abc HTTP/1.1", NULL, NULL);
STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n" STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n"
"Access-Control-Allow-Origin: *\r\n" "Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n" "Content-Type: application/json; charset=utf-8\r\n"
@@ -1003,7 +994,7 @@ TEST(RelayApiProtocolWithClient, RecvHttp404)
data_sent[0]); data_sent[0]);
/* resource not found: error 404 */ /* resource not found: error 404 */
test_client_recv_http ("GET /api", NULL, NULL); test_client_recv_http ("GET /api HTTP/1.1", NULL, NULL);
STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n" STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n"
"Access-Control-Allow-Origin: *\r\n" "Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n" "Content-Type: application/json; charset=utf-8\r\n"
@@ -1013,7 +1004,7 @@ TEST(RelayApiProtocolWithClient, RecvHttp404)
data_sent[0]); data_sent[0]);
/* resource not found: error 404 */ /* resource not found: error 404 */
test_client_recv_http ("GET /api/unknown", NULL, NULL); test_client_recv_http ("GET /api/unknown HTTP/1.1", NULL, NULL);
STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n" STRCMP_EQUAL("HTTP/1.1 404 Not Found\r\n"
"Access-Control-Allow-Origin: *\r\n" "Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n" "Content-Type: application/json; charset=utf-8\r\n"
@@ -1031,7 +1022,7 @@ TEST(RelayApiProtocolWithClient, RecvHttp404)
TEST(RelayApiProtocolWithClient, RecvHttpMissingPassword) TEST(RelayApiProtocolWithClient, RecvHttpMissingPassword)
{ {
/* unauthorized: missing password */ /* unauthorized: missing password */
test_client_recv_http_raw ("GET /api/version\r\n" test_client_recv_http_raw ("GET /api/version HTTP/1.1\r\n"
"\r\n"); "\r\n");
STRCMP_EQUAL("HTTP/1.1 401 Unauthorized\r\n" STRCMP_EQUAL("HTTP/1.1 401 Unauthorized\r\n"
"Access-Control-Allow-Origin: *\r\n" "Access-Control-Allow-Origin: *\r\n"
@@ -1050,7 +1041,7 @@ TEST(RelayApiProtocolWithClient, RecvHttpMissingPassword)
TEST(RelayApiProtocolWithClient, RecvHttpInvalidPassword) TEST(RelayApiProtocolWithClient, RecvHttpInvalidPassword)
{ {
/* unauthorized: invalid password: "plain:invalid" */ /* unauthorized: invalid password: "plain:invalid" */
test_client_recv_http_raw ("GET /api/version\r\n" test_client_recv_http_raw ("GET /api/version HTTP/1.1\r\n"
"Authorization: Basic cGxhaW46aW52YWxpZA==\r\n" "Authorization: Basic cGxhaW46aW52YWxpZA==\r\n"
"\r\n"); "\r\n");
STRCMP_EQUAL("HTTP/1.1 401 Unauthorized\r\n" STRCMP_EQUAL("HTTP/1.1 401 Unauthorized\r\n"
@@ -1061,44 +1052,3 @@ TEST(RelayApiProtocolWithClient, RecvHttpInvalidPassword)
"{\"error\":\"Invalid password\"}", "{\"error\":\"Invalid password\"}",
data_sent[0]); data_sent[0]);
} }
/*
* Tests functions:
* relay_api_protocol_recv_http (method not allowed)
*/
TEST(RelayApiProtocolWithClient, RecvHttpMethodNotAllowed)
{
/* method not allowed (PATCH) with existing resource (/api/ping) */
test_client_recv_http ("PATCH /api/ping", NULL, "{\"data\": \"abcdef\"}");
STRCMP_EQUAL("HTTP/1.1 405 Method Not Allowed\r\n"
"Allow: GET, POST, PUT, DELETE\r\n"
"Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n"
"Content-Length: 30\r\n"
"\r\n"
"{\"error\":\"Method Not Allowed\"}",
data_sent[0]);
/* method not allowed (PATCH) with unknown resource (/api/unknown) */
test_client_recv_http ("PATCH /api/unknown", NULL, "{\"data\": \"abcdef\"}");
STRCMP_EQUAL("HTTP/1.1 405 Method Not Allowed\r\n"
"Allow: GET, POST, PUT, DELETE\r\n"
"Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n"
"Content-Length: 30\r\n"
"\r\n"
"{\"error\":\"Method Not Allowed\"}",
data_sent[0]);
/* method not allowed (PATCH) with unknown resource (/unknown) */
test_client_recv_http ("PATCH /unknown", NULL, "{\"data\": \"abcdef\"}");
STRCMP_EQUAL("HTTP/1.1 405 Method Not Allowed\r\n"
"Allow: GET, POST, PUT, DELETE\r\n"
"Access-Control-Allow-Origin: *\r\n"
"Content-Type: application/json; charset=utf-8\r\n"
"Content-Length: 30\r\n"
"\r\n"
"{\"error\":\"Method Not Allowed\"}",
data_sent[0]);
}
+89
View File
@@ -0,0 +1,89 @@
#!/bin/sh
#
# SPDX-FileCopyrightText: 2024-2025 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/>.
#
#
# Test WeeChat relay HTTP REST API.
#
# Environment variables that can be used:
#
# RELAY_PASSWORD Password for WeeChat relay
#
set -o errexit
# default values for options from environment variables
default_relay_password="test"
usage ()
{
rc=$1
cat <<-EOF
Syntax: $0 url
url URL of the running WeeChat with relay api (without "/api")
Environment variables used:
RELAY_PASSWORD password for the relay (default: "${default_relay_password}")
Example:
RELAY_PASSWORD="test" $0 http://localhost:9000
EOF
exit "${rc}"
}
error_usage ()
{
echo >&2 "ERROR: $*"
usage 1
}
# ================================== START ==================================
# relay password
[ -z "${RELAY_PASSWORD}" ] && RELAY_PASSWORD="${default_relay_password}"
# check command line arguments
if [ $# -eq 0 ]; then
usage 0
fi
if [ $# -lt 1 ]; then
error_usage "missing arguments"
fi
# command line arguments
url="$1"
schemathesis run \
--checks all \
--show-trace \
--validate-schema=true \
--experimental=openapi-3.1 \
--base-url "${url}/api" \
--auth "plain:${RELAY_PASSWORD}" \
./src/plugins/relay/api/weechat-relay-api.yaml \
;
exit 0
+2 -2
View File
@@ -41,8 +41,8 @@
# devel-number the devel version as hex number ("0x04010000" for "4.1.0-dev") # devel-number the devel version as hex number ("0x04010000" for "4.1.0-dev")
# #
weechat_stable="4.7.0" weechat_stable="4.6.3"
weechat_devel="4.7.0" weechat_devel="4.7.0-dev"
stable_major=$(echo "${weechat_stable}" | cut -d"." -f1) stable_major=$(echo "${weechat_stable}" | cut -d"." -f1)
stable_minor=$(echo "${weechat_stable}" | cut -d"." -f2) stable_minor=$(echo "${weechat_stable}" | cut -d"." -f2)