1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-12 22:24:47 +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
821 changed files with 17878 additions and 33642 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# SPDX-FileCopyrightText: 2024 Emil Velikov <emil.l.velikov@gmail.com>
# SPDX-FileCopyrightText: 2024-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2024-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+1 -1
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2013-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2013-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2019-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2019-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2023-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2023-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2020-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2020-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2023-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2023-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2023-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2023-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
+187 -260
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2020-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2020-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
@@ -11,14 +11,6 @@ on:
- cron: '22 9 * * 2'
env:
CHECK_DEPS_UBUNTU: >-
curl
gettext
hunspell
hunspell-en-us
hunspell-fr
pipx
shellcheck
WEECHAT_DEPS_UBUNTU: >-
asciidoctor
build-essential
@@ -26,6 +18,7 @@ env:
curl
devscripts
equivs
flake8
gem2deb
guile-3.0-dev
lcov
@@ -36,7 +29,7 @@ env:
libcurl4-gnutls-dev
libgcrypt20-dev
libgnutls28-dev
liblua5.4-dev
liblua5.3-dev
libncurses-dev
libperl-dev
libphp-embed
@@ -47,11 +40,14 @@ env:
php-dev
pipx
pkgconf
pylint
python3-bandit
python3-dev
ruby-pygments.rb
shellcheck
tcl8.6-dev
zlib1g-dev
WEECHAT_DEPS_REDHAT: >-
WEECHAT_DEPS_ROCKYLINUX: >-
asciidoctor
aspell-devel
cjson-devel
@@ -102,53 +98,10 @@ env:
sudo
tcl86
zstd
WEECHAT_DEPS_MACOS: >-
asciidoctor
aspell
cjson
guile
lua
pkg-config
ruby
jobs:
checks:
strategy:
matrix:
os:
- ubuntu-24.04
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Install dependencies
run: |
sudo apt-get update -qq
sudo apt-get --yes --no-install-recommends install ${{ env.CHECK_DEPS_UBUNTU }}
pipx install msgcheck ruff
cargo install --version 0.0.11 poexam
- name: Check gettext files (msgcheck)
run: msgcheck po/*.po
- name: Check gettext files (poexam)
run: poexam check --file-stats --rule-stats
- name: Check shell and Python scripts
run: ./tools/check_scripts.sh
- name: Check Python stub file
run: ./tools/generate_python_stub.py | diff src/plugins/python/weechat.pyi -
- name: Check Curl symbols
run: curl --silent --show-error --fail --retry 10 https://raw.githubusercontent.com/curl/curl/master/docs/libcurl/symbols-in-versions | ./tools/check_curl_symbols.py
install:
tests_ubuntu:
strategy:
matrix:
@@ -163,10 +116,6 @@ jobs:
cc: "gcc"
cxx: "g++"
buildargs: "-G Ninja -DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON"
- name: "gcc_release_hardened"
cc: "gcc"
cxx: "g++"
buildargs: "-DENABLE_TESTS=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS=\"-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3\" -DCMAKE_CXX_FLAGS=\"-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3\""
- name: "gcc_no_nls"
cc: "gcc"
cxx: "g++"
@@ -192,12 +141,12 @@ jobs:
cxx: "clang++"
buildargs: "-DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON"
name: "install (${{ matrix.os }}, ${{ matrix.config.name }})"
name: "${{ matrix.os }} (${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- name: Install dependencies
run: |
@@ -205,7 +154,19 @@ jobs:
sudo apt-get --yes --no-install-recommends install ${{ env.WEECHAT_DEPS_UBUNTU }}
# uninstall php imagick as is causes a crash when loading php plugin (see #2009)
sudo apt-get --yes purge php8.3-imagick
pipx install schemathesis
pipx install msgcheck schemathesis
- name: Check gettext files
run: msgcheck po/*.po
- name: Check shell and Python scripts
run: ./tools/check_scripts.sh
- name: Check Python stub file
run: ./tools/generate_python_stub.py | diff src/plugins/python/weechat.pyi -
- name: Check Curl symbols
run: curl --silent --show-error --fail --retry 10 https://raw.githubusercontent.com/curl/curl/master/docs/libcurl/symbols-in-versions | ./tools/check_curl_symbols.py
- name: Build and run tests
env:
@@ -233,13 +194,11 @@ jobs:
weechat-headless \
--dir /tmp/weechat-test-api \
--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' \
--daemon \
;
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_*
- name: Code coverage
@@ -253,198 +212,6 @@ jobs:
lcov --list coverage.info
bash <(curl -s https://codecov.io/bash) -f coverage.info || echo 'Codecov error'
install_fedora:
strategy:
matrix:
os:
- ubuntu-24.04
config:
- name: "gcc"
cc: "gcc"
cxx: "g++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON"
- name: "clang"
cc: "clang"
cxx: "clang++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON"
name: "install (fedora:43, ${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
container:
image: fedora:43
steps:
- uses: actions/checkout@v6
- name: Install dependencies
run: dnf install -y ${{ env.WEECHAT_DEPS_REDHAT }}
- name: Build and run tests
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
run: ./tools/build_test.sh ${{ matrix.config.buildargs }}
- name: Run WeeChat
env:
TERM: xterm-256color
run: |
weechat --help
weechat-curses --help
weechat --version
weechat --build-info
weechat --colors
weechat --license
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
install_rockylinux:
strategy:
matrix:
os:
- ubuntu-24.04
config:
- name: "gcc"
cc: "gcc"
cxx: "g++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON"
- name: "clang"
cc: "clang"
cxx: "clang++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON"
name: "install (rockylinux:9, ${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
container:
image: rockylinux:9
steps:
- uses: actions/checkout@v6
- name: Install dependencies
run: |
dnf install -y epel-release dnf-plugins-core
dnf config-manager --set-enabled crb
# pin a working ruby stream (ruby:4.0 has broken module metadata on Rocky 9.8)
dnf module enable -y ruby:3.3
dnf install -y ${{ env.WEECHAT_DEPS_REDHAT }}
- name: Build and run tests
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
run: ./tools/build_test.sh ${{ matrix.config.buildargs }}
- name: Run WeeChat
env:
TERM: xterm-256color
run: |
weechat --help
weechat-curses --help
weechat --version
weechat --build-info
weechat --colors
weechat --license
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
install_freebsd:
strategy:
matrix:
os:
- ubuntu-24.04
config:
# - name: "gcc"
# cc: "gcc"
# cxx: "g++"
# buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON"
- name: "clang"
cc: "clang"
cxx: "clang++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON"
name: "install (freebsd, ${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- name: Install dependencies, build and run tests, run WeeChat
uses: vmactions/freebsd-vm@v1
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
TERM: xterm-256color
with:
envs: "CC CXX TERM"
usesh: true
prepare: pkg install -y ${{ env.WEECHAT_DEPS_FREEBSD }}
run: |
./tools/build_test.sh ${{ matrix.config.buildargs }}
weechat --help
weechat-curses --help
weechat --version
weechat --build-info
weechat --colors
weechat --license
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
install_macos:
strategy:
matrix:
os:
- macos-14
config:
- name: "gcc"
cc: "gcc"
cxx: "g++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_DOC_INCOMPLETE=ON -DENABLE_PHP=OFF -DENABLE_TESTS=OFF"
- name: "clang"
cc: "clang"
cxx: "clang++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_DOC_INCOMPLETE=ON -DENABLE_PHP=OFF -DENABLE_TESTS=OFF"
name: "install (${{ matrix.os }}, ${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
steps:
- name: Setup Homebrew
id: setup-homebrew
uses: Homebrew/actions/setup-homebrew@main
- name: Install dependencies
run: |
brew update
brew install ${{ env.WEECHAT_DEPS_MACOS }}
- uses: actions/checkout@v6
- name: Build
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
RUN_TESTS: "0"
JOBS: "2"
run: ./tools/build_test.sh ${{ matrix.config.buildargs }}
- name: Run WeeChat
env:
TERM: xterm-256color
run: |
weechat --help
weechat-curses --help
weechat --version
weechat --build-info
weechat --colors
weechat --license
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
build_debian:
strategy:
@@ -452,11 +219,12 @@ jobs:
os:
- ubuntu-24.04
name: "${{ matrix.os }} (build Debian)"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- name: Install dependencies
run: |
@@ -482,13 +250,14 @@ jobs:
weechat --build-info
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
codeql_analysis:
codeql-analysis:
strategy:
matrix:
os:
- ubuntu-24.04
name: "${{ matrix.os }} (CodeQL)"
runs-on: ${{ matrix.os }}
permissions:
@@ -499,7 +268,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
uses: actions/checkout@v4
- name: Install dependencies
run: |
@@ -507,6 +276,7 @@ jobs:
sudo apt-get --yes --no-install-recommends install ${{ env.WEECHAT_DEPS_UBUNTU }}
# uninstall php imagick as is causes a crash when loading php plugin (see #2009)
sudo apt-get --yes purge php8.3-imagick
pipx install msgcheck
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
@@ -520,3 +290,160 @@ jobs:
uses: github/codeql-action/analyze@v3
with:
category: "/language:cpp"
tests_rockylinux:
strategy:
matrix:
os:
- ubuntu-24.04
config:
- name: "gcc"
cc: "gcc"
cxx: "g++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON"
- name: "clang"
cc: "clang"
cxx: "clang++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON"
name: "rockylinux-9 (${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
container:
image: rockylinux:9
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
dnf install -y epel-release
dnf config-manager --set-enabled crb
dnf install -y ${{ env.WEECHAT_DEPS_ROCKYLINUX }}
- name: Build and run tests
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
run: ./tools/build_test.sh ${{ matrix.config.buildargs }}
- name: Run WeeChat
env:
TERM: xterm-256color
run: |
weechat --help
weechat-curses --help
weechat --version
weechat --build-info
weechat --colors
weechat --license
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
tests_freebsd:
strategy:
matrix:
os:
- ubuntu-24.04
config:
# - name: "gcc"
# cc: "gcc"
# cxx: "g++"
# buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON"
- name: "clang"
cc: "clang"
cxx: "clang++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_TESTS=ON -DENABLE_CODE_COVERAGE=ON -DENABLE_FUZZ=ON"
name: "freebsd-14 (${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install dependencies, build and run tests, run WeeChat
uses: vmactions/freebsd-vm@v1
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
TERM: xterm-256color
with:
envs: "CC CXX TERM"
usesh: true
prepare: pkg install -y ${{ env.WEECHAT_DEPS_FREEBSD }}
run: |
./tools/build_test.sh ${{ matrix.config.buildargs }}
weechat --help
weechat-curses --help
weechat --version
weechat --build-info
weechat --colors
weechat --license
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
tests_macos:
strategy:
matrix:
os:
- macos-14
config:
- name: "gcc"
cc: "gcc"
cxx: "g++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_DOC_INCOMPLETE=ON -DENABLE_PHP=OFF -DENABLE_TESTS=OFF"
- name: "clang"
cc: "clang"
cxx: "clang++"
buildargs: "-DENABLE_MAN=ON -DENABLE_DOC=ON -DENABLE_DOC_INCOMPLETE=ON -DENABLE_PHP=OFF -DENABLE_TESTS=OFF"
name: "${{ matrix.os }} (${{ matrix.config.name }})"
runs-on: ${{ matrix.os }}
steps:
- name: Setup Homebrew
id: setup-homebrew
uses: Homebrew/actions/setup-homebrew@master
- name: Install dependencies
run: |
brew update
# temporary fix, see: https://github.com/actions/setup-python/issues/577
rm -f \
/usr/local/bin/2to3 \
/usr/local/bin/idle3 \
/usr/local/bin/pydoc3 \
/usr/local/bin/python3 \
/usr/local/bin/python3-config \
/usr/local/bin/2to3-3.11 \
/usr/local/bin/idle3.11 \
/usr/local/bin/pydoc3.11 \
/usr/local/bin/python3.11 \
/usr/local/bin/python3.11-config \
;
brew install asciidoctor aspell cjson guile lua pkg-config ruby
- uses: actions/checkout@v4
- name: Build
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
RUN_TESTS: "0"
JOBS: "2"
run: ./tools/build_test.sh ${{ matrix.config.buildargs }}
- name: Run WeeChat
env:
TERM: xterm-256color
run: |
weechat --help
weechat-curses --help
weechat --version
weechat --build-info
weechat --colors
weechat --license
weechat --run-command "/debug dirs;/debug libs" --run-command "/quit"
+2 -2
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2025-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
@@ -16,7 +16,7 @@ jobs:
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- name: REUSE Compliance Check
uses: fsfe/reuse-action@v4
+1 -1
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2007-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2007-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2014-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2014-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
-281
View File
@@ -1,281 +0,0 @@
Atheme
Autojoin
Charset
Diffie-Hellman
Esc
FlashCode
GnuTLS
Hashtable
Helleu
IPs
Sébastien
WeeChat
Xfer
abc
ack
acks
addcompletion
addinput
addoff
addraw
addreplace
addreplacecompletion
addword
algo
allchan
allpv
alnum
andrew
ansi
api
args
argsN
aspell
autoconnect
autojoin
autoload
autoloaded
autoreconnect
autorejoin
bg
bindctxt
bitlbee
bkl
blocksize
bool
buflist
cJSON
calc
ccc
charset
charsets
chghost
chmod
cleartext
clientinfo
cmd
codepoint
concat
cond
config
crypted
ctcp
ctrl
ctrl-
ctrl-c
ctrl-h
ctrl-n
ctrl-x
ctrl-y
cutscr
cxx
darkgray
deinit
deldict
deloutq
delvar
dhkey
dirs
dlclose
eg
enum
enums
env
esc
eval
fd
ffff
fg
fifo
flashcode
flashtux
freebsd
fset
fsync
gcrypt
getrlimit
getrusage
gnutls
grayscale
gui
gzip
halfop
halfops
hashtable
hdata
hh
horiz
hostname
hostnames
hotlist
hsignal
http
https
hup
ident
ie
il
inclose
infolist
infolists
infos
installremove
irc
ison
javascript
json
kf
kickban
killall
lengthscr
libera
libgcrypt
libs
lightblue
lightcyan
lightgreen
lightmagenta
lightred
linux
listdefault
listdict
listdiff
listfull
listitems
listrelay
listvar
lua
mallinfo
malloc
mirc
modelist
msg
msgN
msgbuffer
multiline
ncurses
newbuffer
nf
nickbot
nicklist
nickserv
nl
noautoload
nobg
nocl
noflush
nohelp
nojoin
noln
nonblock
nooption
norc
nostdin
nosw
noswitch
notls
num
oc
oerr
oftc
ok
ol
osinfo
outqueue
ovh
paramN
params
perl
permessage-deflate
pgdn
pgup
pid
prev
privmsg
ptr
pv
py
quickstart
rc
realname
recv
reinitializing
reop
resetall
resetctxt
revindex
revscr
rgb
rlimit
rusage
rw-rw-r--
sasl
setauto
setdict
setname
setnew
setrlimit
setvar
signon
skipempty
sockaddr
splith
splitv
stderr
stdin
stdout
strcasecmp
strftime
strftimeval
strlen
sublist
subplugin
sw
sys
tThe
tcl
tg
tls
tlscertkey
toggleautoload
togglecmd
toto
totp
truncature
un
unalias
unban
unbindctxt
undef
unescaped
unhide
unhold
unicode
unix
unmark
unmerge
unzoom
uptime
url
urlserver
usec
userhost-in-names
usr
util
valgrind
versiongit
waitpid
wcswidth
wctype
wcwidth
websocket
websockets
weechat
whois
www
xdigit
xfer
xyz
yy
zlib
zstd
-612
View File
@@ -1,612 +0,0 @@
Atheme
Autojoin
Curl
Curses
Debug
Dec
Diffie-Hellman
Filter
FlashCode
GnuTLS
Guile
Helleu
IPs
Lag
Ping
Protocol
Relay
Remote
Reop
Tab
Trigger
Triggers
Typing
URLs
Wallops
WeeChat
Xfer
account
account-
account-notify
account-tag
ack
acks
add
addcompletion
addinput
addoff
addraw
addreplace
addreplacecompletion
addresse
addword
align
all
allchan
allow
allowed
allpv
alnum
alt
alt-c
alt-k
alt-s
alt-v
alt-z
andrew
ansi
apply
area
args
argsN
aspell
attributes
auth
autoconnect
autojoin
autoload
autorejoin
away
away-notify
backspace
bare
bash
beep
before
beginning
beyond
bg
bin
bind
bindctxt
bitlbee
bkl
blue
bold
bool
boolean
both
bottom
bracketed
brown
buflist
cJSON
calc
callbacks
cap-notify
capabilities
capability
ccc
cert
certs
changed
channel
charset
charsets
check
chghost
chmod
cipher
clear
clientinfo
clipboard
cmd
color
colors
command
commands
complete
completion
concat
cond
confirm
connect
connected
connecting
control
copy
core
count
crypt
ctcp
ctrl
ctrl-
ctrl-c
ctrl-h
ctrl-n
ctrl-x
ctrl-y
curl
current
cursor
cut
cutscr
cxx
d'ignore
d'infolist
daemon
darkgray
days
debug
decode
decrypt
default
define
deinit
del
deldict
delete
deloutq
delvar
desc
describe
dhkey
dict
diff
dim
dir
dirs
disable
discard
disconnect
disconnected
display
displayed
dlclose
doc-gen
down
download
draft
dummy
dump
eat
echo-message
edge
emphasized
empty
enable
enabled
end
enum
error
esc
eval
example
exclude
exec
extended-join
external
exts
fail
failed
fast
fd
ffff
fifo
filter
fingerprint
first
flashcode
flashtux
foo
formatted
free
freebsd
fset
fsync
gcrypt
get
getrlimit
getrusage
ghost
giga-octets
git
glitch
gnutls
grab
group
gzip
halfop
halfops
handshake
hash
hashtable
hdata
he
headless
help
here
hexa
hh
hidden
hide
highest
highlight
highlights
history
hold
hook
hooks
horiz
host
hotlist
hsignal
hup
ident
identify
ids
ignored
inclose
include
indent
infolist
infolistes
infolists
init
install
installremove
int
integer
interval
invite-notify
irc
ison
iterations
javascript
join
json
jump
keep
key
keys
kf
kickban
kill
killall
l'autojoin
l'id
lag
last
layout
leave
left
legacy
length
lengthscr
level
lib
libera
libgcrypt
libs
lightblue
lightcyan
lightgreen
lightmagenta
lightred
limit
line
lines
linux
list
listdefault
listdict
listdiff
listen
listfull
listitems
listrelay
listvar
load
logger
loggers
lower
lowest
ls
lua
mallinfo
malloc
marked
mask
memory
merge
merged
meta
meta-
method
mirc
missing
modified
mouse
move
msg
msgN
msgbuffer
multi-prefix
multiline
my
n-
name
names
ncurses
near
network
newbuffer
newline
next
nf
nick
nickbot
nicklist
nicks
nickserv
no-connect
noautoload
nobg
nocl
noflush
nohelp
nojoin
noln
nonblock
nooption
norc
nosh
nostdin
nosw
noswitch
notify
notls
null
num
number
numeric
object
oerr
of
offline
oftc
ok
ol
ops
osinfo
ovh
paramN
params
parted
pass
passphrase
password
password-store
paste
path
paused
pct
pending
perl
permessage-deflate
pgdn
pgup
pid
ping
pong
pos
prefix
prev
previous
print
priority
private
privmsg
property
ptr
py
quit
quoted
rafraichie
rafraichir
rafraichissement
random
raw
rc
realname
reconnect
recreate
recv
red
redirected
redo
refresh
regex
register
relay
reload
remote
remove
rename
renumber
reorder
rep
repeat
reply
req
reset
resetall
resetctxt
resize
restart
restore
return
rev
revindex
revscr
rgb
right
rlimit
root
ruby
run
run-command
runtime
rusage
rw-rw-r--
réinit
safe
sasl
save
scheme
screen
scroll
search
secure
selected
send
server
server-time
setauto
setdict
setname
setnew
setrlimit
setvar
sh
share
shift
shift-
shift-Tab
size
skipempty
sockaddr
sorted
space
speaking
spell
split
splith
splitv
ss
start
status
stderr
stdin
stdout
str
strcasecmp
strftime
strftimeval
strip
strlen
sucks
suffix
suggest
sum
sw
switch
sys
tLe
tab
target
tcl
term
text
tg
time
timeout
timer
tiny
title
tls
tlscertkey
to
toggle
toggleautoload
togglecmd
topic
totp
trigger
triggers
trim
typing
téra-octets
unalias
unavailable
unban
unbind
unbindctxt
undef
undo
unhide
unicode
unix
unload
unmerge
unread
unset
up
update
upper
url
urlserver
usec
userhost-in-names
username
users
usr
util
valer
valgrind
verbose
verify
versiongit
visited
voice
wait
waiting
waitpid
wallops
wcswidth
wctype
wcwidth
websocket
websockets
weechat
where
white
whitespace
whois
width
window
windows
without
word
words
xdigit
xfer
xxx
xyz
yellow
yes
yy
zero
zlib
zstd
Échap
-24
View File
@@ -1,24 +0,0 @@
# SPDX-FileCopyrightText: 2026 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
[check]
select = [
"checks",
]
ignore = [
"acronyms",
"brackets",
"double-quotes",
"double-words",
"functions",
"html-tags",
"paths",
"unchanged",
"urls",
]
path_words = "."
langs = [
"en_US",
"fr",
]
+1 -2
View File
@@ -1,5 +1,5 @@
<!--
SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
-->
@@ -29,7 +29,6 @@ Alphabetically:
- Asakura
- Bazerka
- Benoit Papillault (benoit)
- Caleb Josue Ruiz Torres
- Chris Hills
- Christian Duerr
- Christian Heinz
+2 -172
View File
@@ -1,183 +1,21 @@
<!--
SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
-->
# WeeChat ChangeLog
## Version 4.10.0 (under dev)
### Changed
- core: add condition on connected relay api clients in default value of option weechat.look.hotlist_add_conditions
- core: add `/mute` in default command for key `Alt`+`=` (toggle filters)
- relay/api: add field "last_read_line_id" in GET /api/buffers
### Added
- core: add `/theme` command with subcommands `list`, `apply`, `reset`, `save`, `rename`, `delete`, `info`, automatic backup of current themable options before apply, and built-in "light" theme
- core: detect terminal background on first start and automatically apply the built-in "light" theme when a light terminal is detected
- core: add `themable` flag on configuration options (auto-set for color options; explicit opt-in for string options containing `${color:...}` references via the `type|themable` syntax)
- core: add option weechat.look.theme (informational, set by `/theme apply`)
- core: add option weechat.look.theme_backup (boolean, default `on`)
- api: add function `theme_register` (available to plugins and to all script languages)
- fset: add filter `t:themable` (matches every themable option regardless of type)
- relay: add option relay.network.unix_socket_permissions ([#2317](https://github.com/weechat/weechat/issues/2317))
### Fixed
- core: fix option weechat.look.color_real_white not applied when color is "white" on 16+ colors terminals ([#1742](https://github.com/weechat/weechat/issues/1742))
- api: fix infinite loop in function string_replace when the search string is empty
- irc: fix tag in message with list of names when joining a channel
- fset: remove error displayed in core buffer when clicking with the mouse below the last option displayed
- irc: limit size of data received from the server to prevent memory exhaustion
- irc: fix out-of-bounds read on incoming DCC command with a quoted filename ending the message ([#2322](https://github.com/weechat/weechat/issues/2322))
- relay: limit size of decompressed websocket frame with permessage-deflate to prevent memory exhaustion ([GHSA-v2v4-45wm-5cr3](https://github.com/weechat/weechat/security/advisories/GHSA-v2v4-45wm-5cr3))
- relay: limit size of received websocket frame and HTTP body to prevent memory exhaustion
- relay: limit size of partial message received while reading an HTTP request to prevent memory exhaustion
- relay: fix timing attack on password authentication ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc))
- relay: fix out-of-bounds read in dump of data ([#2324](https://github.com/weechat/weechat/issues/2324))
- api, relay: fix timing attack on TOTP validation ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc))
- xfer: replace directory separator in remote nick by underscore in download filename to prevent writing the file outside the download directory ([#2321](https://github.com/weechat/weechat/issues/2321))
- xfer: fix out-of-bounds read when receiving empty line in DCC chat ([#2323](https://github.com/weechat/weechat/issues/2323))
## Version 4.9.2 (2026-06-07)
### Fixed
- api: fix infinite loop in function string_replace when the search string is empty
- irc: limit size of data received from the server to prevent memory exhaustion
- irc: fix out-of-bounds read on incoming DCC command with a quoted filename ending the message ([#2322](https://github.com/weechat/weechat/issues/2322))
- relay: limit size of received websocket frame and HTTP body to prevent memory exhaustion
- relay: limit size of partial message received while reading an HTTP request to prevent memory exhaustion
- relay: fix out-of-bounds read in dump of data ([#2324](https://github.com/weechat/weechat/issues/2324))
- xfer: replace directory separator in remote nick by underscore in download filename to prevent writing the file outside the download directory ([#2321](https://github.com/weechat/weechat/issues/2321))
- xfer: fix out-of-bounds read when receiving empty line in DCC chat ([#2323](https://github.com/weechat/weechat/issues/2323))
## Version 4.9.1 (2026-05-31)
### Fixed
- core: fix option weechat.look.color_real_white not applied when color is "white" on 16+ colors terminals ([#1742](https://github.com/weechat/weechat/issues/1742))
- irc: fix tag in message with list of names when joining a channel
- relay: limit size of decompressed websocket frame with permessage-deflate to prevent memory exhaustion ([GHSA-v2v4-45wm-5cr3](https://github.com/weechat/weechat/security/advisories/GHSA-v2v4-45wm-5cr3))
- relay: fix timing attack on password authentication ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc))
- api, relay: fix timing attack on TOTP validation ([GHSA-vhv8-g2r9-cwcc](https://github.com/weechat/weechat/security/advisories/GHSA-vhv8-g2r9-cwcc))
## Version 4.9.0 (2026-03-29)
### Changed
- core: add option `-e` to evaluate all commands before executing them in command `/eval`
- xfer: evaluate option xfer.network.own_ip
### Added
- typing: add option typing.look.item_text ([#2305](https://github.com/weechat/weechat/issues/2305))
### Fixed
- core: fix crash with `/eval` when the current buffer is closed in a command
- core: fix buffer size in function util_parse_time, causing buffer overflow error in unit tests
- irc: fix display of CTCP query sent multiple times to the same user when capability echo-message is enabled ([#2309](https://github.com/weechat/weechat/issues/2309))
- irc: fix unit of server option `anti_flood` from seconds to milliseconds in output of `/server listfull`
- irc: fix creation of irc.msgbuffer option without a server name
- irc: ignore self join if the channel is already joined ([#2291](https://github.com/weechat/weechat/issues/2291))
- relay/api: fix memory leaks in resources "ping" and "sync"
- relay/api: fix memory leak in receive of message from remote WeeChat
## Version 4.8.2 (2026-03-06)
### Fixed
- irc: ignore self join if the channel is already joined ([#2291](https://github.com/weechat/weechat/issues/2291))
- relay/api: fix memory leaks in resources "ping" and "sync"
- relay/api: fix memory leak in receive of message from remote WeeChat
## Version 4.8.1 (2025-12-01)
### Fixed
- core: fix buffer size in function util_parse_time, causing buffer overflow error in unit tests
- irc: fix creation of irc.msgbuffer option without a server name
## Version 4.8.0 (2025-11-30)
_If you are upgrading: please see [UPGRADING.md](UPGRADING.md)._
### Removed
- irc: remove temporary servers and option irc.look.temporary_servers
### Changed
- api: add support of date like ISO 8601 but with spaces and lower `t` and `z` in function util_parse_time ([#886](https://github.com/weechat/weechat/issues/886))
- irc: request and perform SASL authentication when the server advertises SASL support with message "CAP NEW" ([#2277](https://github.com/weechat/weechat/issues/2277))
- irc: send SASL username with mechanism EXTERNAL ([#2270](https://github.com/weechat/weechat/issues/2270))
- logger: change default time format to `%@%F %T.%fZ` (UTC) ([#886](https://github.com/weechat/weechat/issues/886))
- logger: use function util_parse_time to parse date/time in log files ([#886](https://github.com/weechat/weechat/issues/886))
- relay/api: return an error 400 (Bad Request) when URL parameters "colors", "nicks", "lines" and "lines_free" have an invalid value
- relay/api: return an error 401 (Unauthorized) when header "x-weechat-totp" has an invalid value
- xfer: add buffer local variable "server" in DCC CHAT buffers
- core, irc, relay: add tag "tls" in gnutls messages
- irc: add tags "irc_cap" and "log3" in client capability request and SASL not supported messages
- build: require Curl ≥ 7.68.0 ([#2268](https://github.com/weechat/weechat/issues/2268))
- build: require GnuTLS ≥ 3.6.3 ([#2268](https://github.com/weechat/weechat/issues/2268))
- build: require libgcrypt ≥ 1.8.0 ([#2268](https://github.com/weechat/weechat/issues/2268))
- build: require Enchant v2 ([#2268](https://github.com/weechat/weechat/issues/2268))
- build: require Lua ≥ 5.3 ([#2268](https://github.com/weechat/weechat/issues/2268))
### Added
- core: add option weechat.completion.cycle
- core: add hdata for hooks
- api: add functions util_parse_int, util_parse_long and util_parse_longlong
- buflist: add variable `${index_displayed}`
### Fixed
- core: display an error message in case of invalid parameters in commands `/bar`, `/buffer`, `/cursor`, `/print` and `/window`
- api: fix file descriptor leak in hook_url when a timeout occurs or if the hook is removed during the transfer ([#2284](https://github.com/weechat/weechat/issues/2284))
- api: fix parsing of date/times with timezone offset in function util_parse_time
- irc: fix warning on creation of irc.msgbuffer option when the server name contains upper case letters ([#2281](https://github.com/weechat/weechat/issues/2281))
- irc: display a warning for each unknown or invalid server option in commands `/connect` and `/server`
- irc: fix colors in messages 367 (ban mask), 728 (quiet mask) and MODE ([#2286](https://github.com/weechat/weechat/issues/2286))
- irc: fix reset of color when multiple modes are set with command `/mode`
- relay/api: fix crash when an invalid HTTP request is received from a client
- relay/api: return HTTP error 404 instead of 400 when the buffer is not found in resources completion and input
- relay/api: return HTTP error 400 in case of invalid body in resource ping
## Version 4.7.2 (2025-11-23)
### Fixed
- api: fix file descriptor leak in hook_url when a timeout occurs or if the hook is removed during the transfer ([#2284](https://github.com/weechat/weechat/issues/2284))
- irc: fix colors in messages 367 (ban mask), 728 (quiet mask) and MODE ([#2286](https://github.com/weechat/weechat/issues/2286))
- irc: fix reset of color when multiple modes are set with command `/mode`
## Version 4.7.1 (2025-08-16)
### Fixed
- relay/api: fix crash when an invalid HTTP request is received from a client
## Version 4.7.0 (2025-07-19)
_If you are upgrading: please see [UPGRADING.md](UPGRADING.md)._
## Version 4.7.0 (under dev)
### Changed
- **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
- 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
- core: add support of specifier `%@` for UTC time in function util_strftimeval
- api: add function file_compare
- 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)
@@ -196,15 +34,9 @@ _If you are upgrading: please see [UPGRADING.md](UPGRADING.md)._
- 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))
- 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 ([#2251](https://github.com/weechat/weechat/issues/2251))
## Version 4.6.3 (2025-05-11)
_If you are upgrading: please see [UPGRADING.md](UPGRADING.md)._
### Fixed
- core: fix integer overflow with decimal numbers in calculation of expression
@@ -3692,8 +3524,6 @@ _If you are upgrading: please see [UPGRADING.md](UPGRADING.md)._
## Version 0.3.1.1 (2010-01-31)
_If you are upgrading: please see [UPGRADING.md](UPGRADING.md)._
### Bug fixes
- irc: fix crash with SSL connection if option ssl_cert is set ([bug #28752](https://savannah.nongnu.org/bugs/?28752))
+41 -60
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2007-2008 Julien Louis <ptitlouis@sysif.net>
# SPDX-FileCopyrightText: 2008-2009 Emmanuel Bouthenot <kolter@openics.org>
#
@@ -28,7 +28,6 @@ project(weechat C)
# CMake options
set(CMAKE_VERBOSE_MAKEFILE OFF)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_SKIP_RPATH ON)
# compiler options
@@ -53,8 +52,16 @@ else()
set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
endif()
# license
set(LICENSE "GPL3")
# add definitions for version and license
add_definitions(-DWEECHAT_VERSION="${VERSION}" -DWEECHAT_LICENSE="GPL3")
if(COMMAND cmake_policy)
cmake_policy(SET CMP0005 NEW)
add_definitions(-DWEECHAT_VERSION="${VERSION}" -DWEECHAT_LICENSE="${LICENSE}")
else()
add_definitions(-DWEECHAT_VERSION='"${VERSION}"' -DWEECHAT_LICENSE='"${LICENSE}"')
endif()
# package string
set(PKG_STRING "${PROJECT_NAME} ${VERSION}")
@@ -185,6 +192,15 @@ set(WEECHAT_HOME "${WEECHAT_HOME}" CACHE
FORCE)
mark_as_advanced(CLEAR WEECHAT_HOME)
if(COMMAND cmake_policy)
if(POLICY CMP0003)
cmake_policy(SET CMP0003 NEW)
endif()
if(POLICY CMP0017)
cmake_policy(SET CMP0017 NEW)
endif()
endif()
add_definitions(-DHAVE_CONFIG_H)
include(FindPkgConfig)
@@ -192,7 +208,6 @@ include(FindPkgConfig)
include(CheckIncludeFiles)
include(CheckFunctionExists)
include(CheckSymbolExists)
include(CheckLibraryExists)
check_include_files("langinfo.h" HAVE_LANGINFO_CODESET)
check_include_files("sys/resource.h" HAVE_SYS_RESOURCE_H)
@@ -203,86 +218,62 @@ check_symbol_exists("malloc_trim" "malloc.h" HAVE_MALLOC_TRIM)
check_function_exists(mallinfo HAVE_MALLINFO)
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 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
if(ENABLE_LARGEFILE)
add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_LARGE_FILES)
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
pkg_check_modules(LIBGCRYPT REQUIRED libgcrypt>=1.8.0)
pkg_check_modules(LIBGCRYPT REQUIRED libgcrypt)
include_directories(${LIBGCRYPT_INCLUDE_DIRS})
list(APPEND EXTRA_LIBS ${LIBGCRYPT_LDFLAGS})
# Check for GnuTLS
pkg_check_modules(GNUTLS REQUIRED gnutls>=3.6.3)
pkg_check_modules(GNUTLS REQUIRED gnutls>=3.3.0)
include_directories(${GNUTLS_INCLUDE_DIRS})
list(APPEND EXTRA_LIBS ${GNUTLS_LDFLAGS})
# Check for zlib
find_package(ZLIB REQUIRED)
list(APPEND EXTRA_LIBS ${ZLIB_LIBRARY})
# Check for zstd
if(ENABLE_ZSTD)
pkg_check_modules(LIBZSTD REQUIRED libzstd>=1.4.0)
include_directories(${LIBZSTD_INCLUDE_DIRS})
list(APPEND EXTRA_LIBS ${LIBZSTD_LDFLAGS})
pkg_check_modules(LIBZSTD REQUIRED libzstd)
add_definitions(-DHAVE_ZSTD)
endif()
# Check for cJSON
if(ENABLE_CJSON)
pkg_check_modules(LIBCJSON REQUIRED libcjson)
include_directories(${LIBCJSON_INCLUDE_DIRS})
add_definitions(-DHAVE_CJSON)
endif()
# Check for iconv
find_package(Iconv)
if(ICONV_FOUND)
if(ICONV_LIBRARY)
list(APPEND EXTRA_LIBS ${ICONV_LIBRARY})
endif()
add_definitions(-DHAVE_ICONV)
endif()
# Check for CURL
# NOTE: keep version in sync with tools/check_curl_symbols.py
pkg_check_modules(LIBCURL REQUIRED libcurl>=7.68.0)
pkg_check_modules(LIBCURL REQUIRED libcurl>=7.47.0)
include_directories(${LIBCURL_INCLUDE_DIRS})
list(APPEND EXTRA_LIBS ${LIBCURL_LDFLAGS})
list(APPEND EXTRA_LIBS ${CMAKE_DL_LIBS})
find_library(DL_LIBRARY
NAMES dl
PATHS /lib /usr/lib /usr/libexec /usr/local/lib /usr/local/libexec
)
if(DL_LIBRARY)
list(APPEND EXTRA_LIBS ${DL_LIBRARY})
endif()
add_subdirectory(icons)
if(ENABLE_NLS)
find_package(Gettext REQUIRED)
if(LIBINTL_LIBRARY)
list(APPEND EXTRA_LIBS ${LIBINTL_LIBRARY})
endif()
find_package(Intl REQUIRED)
include_directories(${Intl_INCLUDE_DIRS})
list(APPEND EXTRA_LIBS "${Intl_LIBRARIES}")
@@ -291,30 +282,20 @@ else()
add_custom_target(translations COMMAND true)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
find_library(EXECINFO_LIB_PATH execinfo /usr/local/lib)
check_function_exists(backtrace HAVE_BACKTRACE)
list(APPEND EXTRA_LIBS "execinfo")
else()
check_symbol_exists(backtrace "execinfo.h" HAVE_BACKTRACE)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
list(APPEND EXTRA_LIBS "network")
else()
list(APPEND EXTRA_LIBS "pthread")
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
list(APPEND EXTRA_LIBS "socket" "nsl")
endif()
list(APPEND EXTRA_LIBS "m")
add_subdirectory(src)
add_subdirectory(doc)
enable_testing()
if(ENABLE_TESTS)
find_package(CppUTest)
if(CPPUTEST_FOUND)
enable_testing()
else()
message(SEND_ERROR "CppUTest not found")
endif()
else()
enable_testing()
add_test(NAME notests COMMAND true)
endif()
add_subdirectory(tests)
configure_file(config.h.cmake config.h @ONLY)
+3 -2
View File
@@ -1,5 +1,5 @@
<!--
SPDX-FileCopyrightText: 2014-2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-FileCopyrightText: 2014-2025 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
-->
@@ -19,7 +19,8 @@ First, some basic things:
### Security reports
Please **DO NOT** file a GitHub issue for security related problems; see [SECURITY.md](SECURITY.md) instead.
Please **DO NOT** file a GitHub issue for security related problems, but send an
email to [security@weechat.org](mailto:security@weechat.org) instead.
### Required info
+11
View File
@@ -0,0 +1,11 @@
Copyright (c) <year> <owner>.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+8 -6
View File
@@ -1,5 +1,5 @@
<!--
SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
-->
@@ -11,8 +11,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
</p>
[![Mastodon](https://img.shields.io/badge/mastodon-follow-blue.svg)](https://hostux.social/@weechat)
[![Diaspora*](https://img.shields.io/badge/diaspora*-follow-blue.svg)](https://diasp.eu/u/weechat)
[![X](https://img.shields.io/badge/x-follow-blue.svg)](https://x.com/WeeChatClient)
[![Devel blog](https://img.shields.io/badge/devel%20blog-follow-blue.svg)](https://blog.weechat.org/)
[![Slant](https://img.shields.io/badge/slant-recommend-28acad.svg)](https://www.slant.co/topics/1323/~best-irc-clients-for-linux)
[![Donate](https://img.shields.io/badge/help-donate%20%E2%9D%A4-ff69b4.svg)](https://weechat.org/donate/)
[![CI](https://github.com/weechat/weechat/workflows/CI/badge.svg)](https://github.com/weechat/weechat/actions)
@@ -27,11 +29,11 @@ Homepage: [https://weechat.org/](https://weechat.org/)
## Features
- **Modular chat client**: WeeChat has a lightweight core and optional [plugins](https://weechat.org/doc/weechat/user/#plugins). All plugins (including [IRC](https://weechat.org/doc/weechat/user/#irc)) are independent and can be unloaded.
- **Multi-platform**: WeeChat runs on GNU/Linux, *BSD, GNU/Hurd, Haiku, macOS and Windows (WSL and Cygwin).
- **Multi-protocol**: WeeChat is designed to support multiple protocols via plugins, like IRC.
- **Multi-platform**: WeeChat runs on GNU/Linux, *BSD, GNU/Hurd, Haiku, macOS and Windows (Bash/Ubuntu and Cygwin).
- **Multi-protocols**: WeeChat is designed to support multiple protocols by plugins, like IRC.
- **Standards-compliant**: the IRC plugin is compliant with RFCs [1459](https://datatracker.ietf.org/doc/html/rfc1459), [2810](https://datatracker.ietf.org/doc/html/rfc2810), [2811](https://datatracker.ietf.org/doc/html/rfc2811), [2812](https://datatracker.ietf.org/doc/html/rfc2812), [2813](https://datatracker.ietf.org/doc/html/rfc2813) and [7194](https://datatracker.ietf.org/doc/html/rfc7194).
- **Small, fast, and very light**: the core is and should stay as light and fast as possible.
- **Customizable and extensible**: there are a lot of options to customize WeeChat, and it is extensible with C plugins and [scripts](https://weechat.org/scripts/) ([Perl](https://weechat.org/scripts/language/perl/), [Python](https://weechat.org/scripts/language/python/), [Ruby](https://weechat.org/scripts/language/ruby/), [Lua](https://weechat.org/scripts/language/lua/), [Tcl](https://weechat.org/scripts/language/tcl/), [Scheme](https://weechat.org/scripts/language/guile/), [JavaScript](https://weechat.org/scripts/language/javascript/) and [PHP](https://weechat.org/scripts/language/php/)).
- **Customizable and extensible**: there are a lot of options to customize WeeChat, and it is extensible with C plugins and [scripts](https://weechat.org/scripts/) ([Perl](https://weechat.org/scripts/language/perl/), [Python](https://weechat.org/scripts/language/python/), [Ruby](https://weechat.org/scripts/language/ruby), [Lua](https://weechat.org/scripts/language/lua/), [Tcl](https://weechat.org/scripts/language/tcl/), [Scheme](https://weechat.org/scripts/language/guile/), [JavaScript](https://weechat.org/scripts/language/javascript/) and [PHP](https://weechat.org/scripts/language/php/)).
- **Fully documented**: there is comprehensive [documentation](https://weechat.org/doc/weechat/), which is [translated](https://weechat.org/doc/weechat/dev/#translations) into several languages.
- **Developed from scratch**: WeeChat was built from scratch and is not based on any other client.
- **Free software**: WeeChat is released under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html).
@@ -49,12 +51,12 @@ For detailed instructions, please check the [WeeChat user's guide](https://weech
## Semantic versioning
WeeChat follows "practical" semantic versioning; see [CONTRIBUTING.md](CONTRIBUTING.md#semantic-versioning).
WeeChat is following a "practical" semantic versioning, see file [CONTRIBUTING.md](CONTRIBUTING.md#semantic-versioning).
## Copyright
<!-- REUSE-IgnoreStart -->
Copyright © 2003-2026 [Sébastien Helleu](https://github.com/flashcode)
Copyright © 2003-2025 [Sébastien Helleu](https://github.com/flashcode)
This file is part of WeeChat, the extensible chat client.
+2 -10
View File
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2025-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
@@ -17,13 +17,5 @@ path = [
"weechat.pc.in",
]
precedence = "override"
SPDX-FileCopyrightText = "2003-2026 Sébastien Helleu <flashcode@flashtux.org>"
SPDX-License-Identifier = "GPL-3.0-or-later"
[[annotations]]
path = [
".poexam/*.dic",
]
precedence = "override"
SPDX-FileCopyrightText = "2026 Sébastien Helleu <flashcode@flashtux.org>"
SPDX-FileCopyrightText = "2003-2025 Sébastien Helleu <flashcode@flashtux.org>"
SPDX-License-Identifier = "GPL-3.0-or-later"
-26
View File
@@ -1,26 +0,0 @@
<!--
SPDX-FileCopyrightText: 2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
-->
# Security Policy
## Supported versions
Only the latest stable version of WeeChat is supported.
| Version | Supported | Notes |
| -------------- | ------------------ | --------------------------------------------------- |
| Latest stable | :white_check_mark: | Fully supported. |
| Older releases | :x: | Not supported. Contact us in case of specific need. |
However, we may help to backport fixes on older versions, especially when they are used in released distributions with no way to upgrade to the latest stable release (please contact us).
## Reporting a vulnerability
Please report security issues using <https://github.com/weechat/weechat/security/advisories/new>.
Alternatively, if you are not able to use this form, you can send an email to [security@weechat.org](mailto:security@weechat.org) instead.
We will investigate all legitimate reports and do our best to quickly fix the problem.
+1 -53
View File
@@ -1,5 +1,5 @@
<!--
SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
-->
@@ -13,58 +13,6 @@ When upgrading from version X to Y, please read and apply all instructions from
For a list of all changes in each version, please see [CHANGELOG.md](CHANGELOG.md).
## Version 4.10.0
### Command on mouse click in fset buffer
The command executed when clicking in the fset buffer has been updated to prevent
errors on the core buffer when the click is done below the last option.
To reset the key and use the new default command:
```text
/reset weechat.key_mouse.@chat(fset.fset):button1
```
## Version 4.8.0
### IRC temporary servers
The IRC temporary server feature has been removed.
When upgrading from an old version with `/upgrade`, any temporary server is
converted to a standard server, and thus is saved in configuration file `irc.conf`.
Servers can easily be removed with `/server del <name>`.
### IRC SASL EXTERNAL
When server option `sasl_mechanism` is set to `external`, WeeChat now sends the
username defined in option `sasl_username` to the IRC server
(see issue [#2270](https://github.com/weechat/weechat/issues/2270)).
If you use the EXTERNAL mechanism and the username is set, you could either:
- reset `sasl_username` to an empty string, if the username is **not** needed on this server:
`/reset irc.server.xxx.sasl_username`
- set `sasl_username` to your actual username, if the username **is** required on this server:
`/set irc.server.xxx.sasl_username "user"`
### New time format in log files
The time format used in log files now uses UTC and precision of microsecond
by default: option `logger.file.time_format` has new default value: `%@%F %T.%fZ`.
Only the default value for the option has changed, so when upgrading from
an old version, you keep your old format, even if it was the default one used
in previous versions.
To use the new default value, you can reset the option:
```text
/reset logger.file.time_format
```
## Version 4.7.0
### API functions utf8_next_char and utf8_char_size
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2014-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2014-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+51
View File
@@ -0,0 +1,51 @@
# SPDX-FileCopyrightText: 2006 Zack Rusin <zack@kde.org>
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
# - Try to find the Enchant spell checker
# Once done this will define
#
# ENCHANT_FOUND - system has ENCHANT
# ENCHANT_INCLUDE_DIR - the ENCHANT include directory
# ENCHANT_LIBRARIES - Link these to use ENCHANT
# ENCHANT_DEFINITIONS - Compiler switches required for using ENCHANT
if(ENCHANT_INCLUDE_DIR AND ENCHANT_LIBRARIES)
# in cache already
set(ENCHANT_FOUND TRUE)
else()
if(NOT WIN32)
# use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_package(PkgConfig)
pkg_check_modules(PC_ENCHANT enchant)
set(ENCHANT_DEFINITIONS ${PC_ENCHANT_CFLAGS_OTHER})
endif()
find_path(ENCHANT_INCLUDE_DIR
NAMES enchant++.h
HINTS ${PC_ENCHANT_INCLUDEDIR} ${PC_ENCHANT_INCLUDE_DIRS}
PATH_SUFFIXES enchant-2 enchant
)
find_library(ENCHANT_LIBRARIES
NAMES enchant-2 enchant
HINTS ${PC_ENCHANT_LIBDIR}
${PC_ENCHANT_LIBRARY_DIRS}
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ENCHANT DEFAULT_MSG ENCHANT_INCLUDE_DIR ENCHANT_LIBRARIES)
mark_as_advanced(ENCHANT_INCLUDE_DIR ENCHANT_LIBRARIES)
# check if function enchant_get_version() exists
set(CMAKE_REQUIRED_INCLUDES ${ENCHANT_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES ${ENCHANT_LIBRARIES})
check_symbol_exists(enchant_get_version "enchant.h" HAVE_ENCHANT_GET_VERSION)
set(CMAKE_REQUIRED_INCLUDES)
set(CMAKE_REQUIRED_LIBRARIES)
endif()
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2007 Julien Louis <ptitlouis@sysif.net>
# SPDX-FileCopyrightText: 2009 Emmanuel Bouthenot <kolter@openics.org>
#
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2011-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2011-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+2 -2
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
@@ -37,5 +37,5 @@ endif()
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_search_module(LUA lua lua5.4 lua-5.4 lua54 lua5.3 lua-5.3 lua53)
pkg_search_module(LUA lua lua5.4 lua-5.4 lua54 lua5.3 lua-5.3 lua53 lua5.2 lua-5.2 lua52 lua5.1 lua-5.1 lua51 lua-5.0 lua5.0 lua50)
endif()
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+1 -1
View File
@@ -1,6 +1,6 @@
#
# SPDX-FileCopyrightText: 2017 Adam Saponara <as@php.net>
# SPDX-FileCopyrightText: 2017-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2017-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+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 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2015-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2015-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+1 -1
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
+2 -2
View File
@@ -1,5 +1,5 @@
/*
SPDX-FileCopyrightText: 2007-2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-FileCopyrightText: 2007-2025 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
*/
@@ -49,9 +49,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
#cmakedefine HAVE_MALLINFO2
#cmakedefine HAVE_MALLOC_H
#cmakedefine HAVE_MALLOC_TRIM
#cmakedefine HAVE_HTONLL
#cmakedefine HAVE_EAT_NEWLINE_GLITCH
#cmakedefine HAVE_ASPELL_VERSION_STRING
#cmakedefine HAVE_ENCHANT_GET_VERSION
#cmakedefine HAVE_GUILE_GMP_MEMORY_FUNCTIONS
#define CMAKE_BUILD_TYPE "@CMAKE_BUILD_TYPE@"
+3 -2
View File
@@ -1,5 +1,6 @@
Source: weechat-devel
Section: net
Priority: optional
Maintainer: Sébastien Helleu <flashcode@flashtux.org>
Build-Depends:
asciidoctor (>= 1.5.4),
@@ -12,7 +13,7 @@ Build-Depends:
libperl-dev,
python3-dev,
libaspell-dev,
liblua5.4-dev,
liblua5.3-dev,
tcl8.6-dev,
guile-3.0-dev,
php-dev, libphp-embed, libargon2-dev, libsodium-dev,
@@ -23,7 +24,7 @@ Build-Depends:
libzstd-dev,
zlib1g-dev,
libcjson-dev
Standards-Version: 4.7.3
Standards-Version: 4.7.2
Homepage: https://weechat.org/
Vcs-Git: https://salsa.debian.org/kolter/weechat.git
Vcs-Browser: https://salsa.debian.org/kolter/weechat
-30
View File
@@ -1,27 +1,3 @@
weechat (4.8.1-1) unstable; urgency=medium
* New upstream release
* Bump Standards-Version to 4.7.3
* Update debian/copyright file (new year)
* Remove redundant priority optional field from debian/control
-- Emmanuel Bouthenot <kolter@debian.org> Fri, 23 Jan 2026 22:02:31 +0000
weechat (4.7.2-1) unstable; urgency=medium
* New upstream release (Closes: #1119787)
* Update debian/watch to version 5
* Remove useless 'Rules-Requires-Root: no' from debian/control
-- Emmanuel Bouthenot <kolter@debian.org> Sat, 29 Nov 2025 08:53:10 +0000
weechat (4.6.3-1) unstable; urgency=medium
* New upstream release
- fixes multiple security vulnerabilities (Closes: #1104554)
-- Emmanuel Bouthenot <kolter@debian.org> Sat, 17 May 2025 05:49:46 +0000
weechat (4.6.1-1) unstable; urgency=medium
* New upstream release (Closes: #1102450, #1098090)
@@ -49,12 +25,6 @@ weechat (4.4.2-1) unstable; urgency=medium
* New upstream release
- fix crash where exiting (Closes: #1076532)
- fix a minor security issue (Closes: #1081942)
* Fix possible privacy breach with html documentation which includes
stylesheets and fonts (font-awesome) hosted on remote CDN (Cloudflare)
by replacing them during build process by the ones provided in
fonts-font-awesome package (also added as dependency on weechat-doc).
* Refresh weechat-doc with minor changes and add some documentation in
Serbian and Czech.
* Bump Standards-Version to 4.7.0
-- Emmanuel Bouthenot <kolter@debian.org> Sun, 22 Sep 2024 13:08:28 +0000
+3 -2
View File
@@ -1,5 +1,6 @@
Source: weechat
Section: net
Priority: optional
Maintainer: Emmanuel Bouthenot <kolter@debian.org>
Build-Depends:
asciidoctor (>= 1.5.4),
@@ -12,7 +13,7 @@ Build-Depends:
libperl-dev,
python3-dev,
libaspell-dev,
liblua5.4-dev,
liblua5.3-dev,
tcl8.6-dev,
guile-3.0-dev,
php-dev, libphp-embed, libargon2-dev, libsodium-dev,
@@ -23,7 +24,7 @@ Build-Depends:
libzstd-dev,
zlib1g-dev,
libcjson-dev
Standards-Version: 4.7.3
Standards-Version: 4.7.2
Homepage: https://weechat.org/
Vcs-Git: https://salsa.debian.org/kolter/weechat.git
Vcs-Browser: https://salsa.debian.org/kolter/weechat
+1 -1
View File
@@ -4,7 +4,7 @@ Upstream-Contact: Sébastien Helleu <flashcode@flashtux.org>
Source: https://weechat.org/
Files: *
Copyright: 2003-2026, Sébastien Helleu <flashcode@flashtux.org>
Copyright: 2003-2025, Sébastien Helleu <flashcode@flashtux.org>
License: GPL-3+
Files: src/core/core-command.c
+2 -4
View File
@@ -1,4 +1,2 @@
Version: 5
Source: https://weechat.org/download/
Matching-Pattern: /files/src/@PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@
Pgp-Mode: auto
version=4
opts=pgpsigurlmangle=s/$/.asc/ https://weechat.org/download/ /files/src/weechat-(\d.*)\.tar\.xz
+12 -38
View File
@@ -1,5 +1,5 @@
#
# SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
# SPDX-FileCopyrightText: 2009 Emmanuel Bouthenot <kolter@openics.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
@@ -30,40 +30,14 @@ if(ENABLE_MAN OR ENABLE_DOC)
set(SCRIPTING_LANG de en fr it ja pl sr)
set(FAQ_LANG de en es fr it ja pl sr)
set(QUICKSTART_LANG cs de en es fr it ja pl ru sr)
set(RELAY_API_LANG en fr sr)
set(RELAY_API_LANG en fr)
set(RELAY_WEECHAT_LANG en fr ja sr)
set(DEV_LANG en fr ja sr)
find_package(Asciidoctor)
if(ASCIIDOCTOR_FOUND)
# Asciidoctor embeds the light style automatically; the dark stylesheet
# is generated below and scoped via @media in docinfo.html.in.
set(PYGMENTS_LIGHT_STYLE "default")
set(PYGMENTS_DARK_STYLE "monokai")
find_program(PYGMENTIZE_EXECUTABLE pygmentize)
set(PYGMENTS_DARK_CSS "")
if(PYGMENTIZE_EXECUTABLE)
execute_process(
COMMAND "${PYGMENTIZE_EXECUTABLE}" -O "classprefix=tok-" -f html -a "pre.pygments" -S "${PYGMENTS_DARK_STYLE}"
OUTPUT_VARIABLE PYGMENTS_DARK_CSS
RESULT_VARIABLE _pygmentize_result
)
if(NOT _pygmentize_result EQUAL 0)
message(WARNING "Failed to generate pygments CSS for dark theme (style: ${PYGMENTS_DARK_STYLE}); doc will be built without dark theme syntax highlighting")
set(PYGMENTS_DARK_CSS "")
endif()
else()
message(WARNING "pygmentize not found (install python3-pygments); doc will be built without syntax highlighting colors")
endif()
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html.in"
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
@ONLY
)
# common asciidoctor arguments
set(ASCIIDOCTOR_ARGS
-v
-a experimental
-a reproducible
-a "prewrap!"
@@ -71,8 +45,8 @@ if(ENABLE_MAN OR ENABLE_DOC)
-a revnumber="${VERSION}"
-a sectanchors
-a source-highlighter=pygments
-a pygments-style=${PYGMENTS_LIGHT_STYLE}
-a docinfodir="${CMAKE_CURRENT_BINARY_DIR}"
-a pygments-style=native
-a docinfodir="${CMAKE_CURRENT_SOURCE_DIR}"
-a autogendir="${CMAKE_CURRENT_BINARY_DIR}/autogen"
)
@@ -230,7 +204,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_user.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_USER_ARGS} -o "weechat_user.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_user.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_user.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/cmdline_options.${lang}.adoc"
@@ -251,7 +225,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_plugin_api.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_PLUGIN_API_ARGS} -o "weechat_plugin_api.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_plugin_api.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_plugin_api.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
doc-autogen
@@ -275,7 +249,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_scripting.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_SCRIPTING_ARGS} -o "weechat_scripting.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_scripting.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_scripting.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
doc-autogen
@@ -293,7 +267,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_faq.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_FAQ_ARGS} -o "weechat_faq.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_faq.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_faq.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
@@ -308,7 +282,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_quickstart.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_QUICKSTART_ARGS} -o "weechat_quickstart.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_quickstart.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_quickstart.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
@@ -323,7 +297,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_api.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_RELAY_API_ARGS} -o "weechat_relay_api.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_relay_api.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_relay_api.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/relay.${lang}.adoc"
@@ -339,7 +313,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_weechat.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_RELAY_WEECHAT_ARGS} -o "weechat_relay_weechat.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_relay_weechat.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_relay_weechat.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/relay.${lang}.adoc"
@@ -355,7 +329,7 @@ if(ENABLE_MAN OR ENABLE_DOC)
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.${lang}.html"
COMMAND "${ASCIIDOCTOR_EXECUTABLE}" ARGS ${ASCIIDOCTOR_ARGS} ${ASCIIDOCTOR_DEV_ARGS} -o "weechat_dev.${lang}.html" "${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_dev.${lang}.adoc"
DEPENDS
"${CMAKE_CURRENT_BINARY_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/docinfo.html"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/weechat_dev.${lang}.adoc"
"${CMAKE_CURRENT_SOURCE_DIR}/${lang}/includes/attributes-${lang}.adoc"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2005-2011 Jiri Golembiovsky <golemj@gmail.com>
// SPDX-FileCopyrightText: 2015-2017 Ondřej Súkup <mimi.vx@gmail.com>
//
+3 -4
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2005-2011 Jiri Golembiovsky <golemj@gmail.com>
// SPDX-FileCopyrightText: 2015-2017 Ondřej Súkup <mimi.vx@gmail.com>
//
@@ -8,8 +8,7 @@
Pro kompletní dokumentaci nastavení pluginů a jejich volby podívejte se na
https://weechat.org/doc/[WeeChat user's guide].
// TRANSLATION MISSING
With irc plugin, you can connect to a server with an URL like:
S irc pluginem se můžete doččasně připojit na server s URL jako:
irc[6][s]://[[nickname][:password]@]server[:port][/#channel1[,#channel2...]]
@@ -107,7 +106,7 @@ WeeChat je napsán Sébastienem Helleu a přispěvovateli (kompletní seznam je
souboru AUTHORS.md).
// REUSE-IgnoreStart
Copyright (C) 2003-2026 {author}
Copyright (C) 2003-2025 {author}
// REUSE-IgnoreEnd
WeeChat is free software; you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2005-2011 Jiri Golembiovsky <golemj@gmail.com>
// SPDX-FileCopyrightText: 2015-2017 Ondřej Súkup <mimi.vx@gmail.com>
//
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2005-2011 Jiri Golembiovsky <golemj@gmail.com>
// SPDX-FileCopyrightText: 2015-2017 Ondřej Súkup <mimi.vx@gmail.com>
//
+3 -5
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2015-2017 Ondřej Súkup <mimi.vx@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -351,10 +351,8 @@ To remove the split:
[[key_bindings]]
== Předvoblby klávesových zkratek
// TRANSLATION MISSING
WeeChat používá ve výchozím nastavení mnoho klávesových zkratek, Všechny najdete v dokumentaci
(link:weechat_user.en.html#key_bindings[User's guide / Key bindings ^↗^^]),
ale je dobré znát alespoň pár těchto důležitých:
WeeChat používá ve výchozím nastavení mnoho klávesových zkratek, Všechny
najdete v dokumentaci, ale je dobré znát alespoň pár těchto důležitých:
- kbd:[Alt+←] / kbd:[Alt+→] nebo kbd:[F5] / kbd:[F6]: přepnout na předchozí/další bufer
// TRANSLATION MISSING
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2025 Nils Görs <weechatter@arcor.de>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+4 -3
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2025 Nils Görs <weechatter@arcor.de>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -7,7 +7,8 @@
Um eine vollständige Dokumentation der Optionen zu erhalten, siehe
https://weechat.org/doc/[WeeChat user's guide].
Mit der IRC-Erweiterung können Sie sich mit einer URL wie der folgenden mit einem Server verbinden:
Mittels der IRC Erweiterung kann man sich zu einen temporären Server verbinden lassen,
indem man eine URL verwendet:
irc[6][s]://[[nickname][:password]@]server[:port][/#channel1[,#channel2...]]
@@ -105,7 +106,7 @@ WeeChat wird programmiert von Sébastien Helleu und weiteren Beteiligten (eine v
findet man in der AUTHORS.md Datei).
// REUSE-IgnoreStart
Copyright (C) 2003-2026 {author}
Copyright (C) 2003-2025 {author}
// REUSE-IgnoreEnd
WeeChat is free software; you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2010-2025 Nils Görs <weechatter@arcor.de>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2010-2025 Nils Görs <weechatter@arcor.de>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+2 -2
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009 Juergen Descher <jhdl@gmx.net>
// SPDX-FileCopyrightText: 2009-2025 Nils Görs <weechatter@arcor.de>
//
@@ -458,7 +458,7 @@ für weitere Informationen die das Farbmanagement betreffen.
[[search_text]]
=== Wie kann ich in einem Buffer nach einem Text suchen (vergleichbar /lastlog in irssi)?
Die Standardtastenbelegung lautet kbd:[Ctrl+s]
Die Standardtastenbelegung lautet kbd:[Ctrl+r]
(der dazugehörige Befehl: `+/input search_text_here+`).
Um zu Highlight-Nachrichten zu springen:
kbd:[Alt+p] für vorherige, kbd:[Alt+n] für die nächste Nachricht.
+2 -3
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2006 Frank Zacharias <frank_zacharias@web.de>
// SPDX-FileCopyrightText: 2009 Juergen Descher <jhdl@gmx.net>
// SPDX-FileCopyrightText: 2009-2025 Nils Görs <weechatter@arcor.de>
@@ -370,8 +370,7 @@ Um die Teilung des Bildschirms rückgängig zu machen:
== Tastaturbelegung
WeeChat verwendet viele Standardtasten.
Alle Tastenbelegungen sind in der Dokumentation beschrieben
(link:weechat_user.de.html#key_bindings[Benutzerhandbuch / Tastenbelegungen ^↗^^]).
Alle Tastenbelegungen sind in der Dokumentation beschrieben.
Im Folgenden werden die wichtigsten Tastenbelegungen kurz erläutert:
- kbd:[Alt+←] / kbd:[Alt+→] oder kbd:[F5] / kbd:[F6]: Wechsel zum
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2010-2025 Nils Görs <weechatter@arcor.de>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+5 -151
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2010-2025 Nils Görs <weechatter@arcor.de>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -212,7 +212,7 @@ WeeChat optional sind:
| asciidoctor | ≥ 1.5.4
| zum Erstellen der man page und der Dokumentation.
| python3-pygments, ruby-pygments.rb |
| ruby-pygments.rb |
| Build Dokumentation.
| libcpputest-dev | ≥ 3.4
@@ -625,7 +625,7 @@ Einige Umgebungsvariablen werden von WeeChat genutzt, sofern sie definiert wurde
[width="100%",cols="1m,6",options="header"]
|===
| 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_EXTRA_LIBDIR | Ein zusätzliches Verzeichnis um Erweiterungen zu installieren (vom "plugins" Verzeichnis in dieses Verzeichnis).
|===
@@ -2197,152 +2197,6 @@ Um der Vordergrundfarbe des Terminals das Attribut "fett" zuzuordnen:
/set weechat.color.status_time *99999
----
// TRANSLATION MISSING
[[themes]]
=== Themen
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme delete mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
@@ -3968,7 +3822,7 @@ WeeChat unterstützt folgende https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
* <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>>
* <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>>
@@ -4015,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,
die an den Client gesendet werden. +
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.
Beispiel einer empfangenen IRC-Rohnachricht:
+27 -14
View File
@@ -1,5 +1,5 @@
<!--
SPDX-FileCopyrightText: 2016-2026 Sébastien Helleu <flashcode@flashtux.org>
SPDX-FileCopyrightText: 2016-2025 Sébastien Helleu <flashcode@flashtux.org>
SPDX-License-Identifier: GPL-3.0-or-later
-->
@@ -26,6 +26,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
--header-details-color: #aaa;
--border: 1px solid #444;
--code-bg-color: #252525;
--pre-color: #ddd;
--pre-bg-color: #202020;
--pre-code-bg-color: #202020;
--keyseq-color: #777;
--kbd-bg-color: #252525;
--kbd-border: 1px solid #333;
@@ -36,11 +39,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
--icon-caution-color: #bf3400;
--icon-important-color: #f44336;
--mark-bg-color: #007;
--pre-bevel-light: #3e3e3e;
--pre-bevel-dark: #2a2a2a;
--pre-bevel-bg: #1f1f1f;
}
@PYGMENTS_DARK_CSS@
}
@media (not (prefers-color-scheme: dark)), (prefers-color-scheme: light) {
@@ -60,6 +59,9 @@ SPDX-License-Identifier: GPL-3.0-or-later
--border: 1px solid #dddddf;
--code-bg-color: #f7f7f8;
--keyseq-color: #333c;
--pre-color: #353535;
--pre-bg-color: #f7f7f8;
--pre-code-bg-color: #202020;
--kbd-bg-color: #f7f7f7;
--kbd-border: 1px solid #ccc;
--kbd-box-shadow: 0 1px 0 rgba(0, 0, 0, .2), inset 0 0 0 .1em #fff;
@@ -69,9 +71,6 @@ SPDX-License-Identifier: GPL-3.0-or-later
--icon-caution-color: #ff0000;
--icon-important-color: #bf0000;
--mark-bg-color: #9df;
--pre-bevel-light: #e5e5e7;
--pre-bevel-dark: #b4b4b8;
--pre-bevel-bg: #f6f6f7;
}
}
@@ -146,10 +145,6 @@ code, .prettyprint {
pre {
color: var(--pre-color) !important;
border: 1px solid;
border-color: var(--pre-bevel-light) var(--pre-bevel-dark) var(--pre-bevel-dark) var(--pre-bevel-light);
border-radius: 3px;
line-height: 1.25;
}
pre > code {
@@ -167,8 +162,8 @@ kbd {
color: var(--body-color);
}
.literalblock pre, .listingblock > .content > pre:not(.highlight), .listingblock > .content > pre[class="highlight"], .listingblock > .content > pre[class^="highlight "], pre.pygments {
background-color: var(--pre-bg-color, var(--pre-bevel-bg));
.literalblock pre, .listingblock > .content > pre:not(.highlight), .listingblock > .content > pre[class="highlight"], .listingblock > .content > pre[class^="highlight "] {
background-color: var(--pre-bg-color);
color: var(--body-color);
}
@@ -205,6 +200,24 @@ mark {
color: var(--body-color);
}
/* syntax highlighting tuning */
pre.pygments {
color: #ddd !important;
}
pre.pygments .tok-cp {
color: #44cfaf;
}
pre.pygments .tok-nc, pre.pygments .tok-nf {
color: #649fef;
}
pre.pygments .tok-gu, pre.pygments .tok-nc, pre.pygments .tok-nn {
text-decoration: none;
}
/* asciidoctor styles tuning */
#header, #content, #footnotes, #footer {
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+3 -3
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -6,7 +6,7 @@
For complete doc on plugin options, please look at plugins documentation in
https://weechat.org/doc/[WeeChat user's guide].
With irc plugin, you can connect to a server with an URL like:
With irc plugin, you can connect to temporary server with an URL like:
irc[6][s]://[[nickname][:password]@]server[:port][/#channel1[,#channel2...]]
@@ -105,7 +105,7 @@ WeeChat is written by Sébastien Helleu and contributors (complete list is in
the AUTHORS.md file).
// REUSE-IgnoreStart
Copyright (C) 2003-2026 {author}
Copyright (C) 2003-2025 {author}
// REUSE-IgnoreEnd
WeeChat is free software; you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+6 -7
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -128,7 +128,6 @@ WeeChat "core" is located in following directories:
|===
| Path/file | Description
| core/ | Core functions: entry point, internal structures.
|    core-args.c | Command-line arguments.
|    core-arraylist.c | Array lists.
|    core-backtrace.c | Display a backtrace after a crash.
|    core-calc.c | Calculate result of expressions.
@@ -616,7 +615,7 @@ Example in C:
[source,c]
----
/*
* SPDX-FileCopyrightText: 2026 Your Name <your@email.com>
* SPDX-FileCopyrightText: 2025 Your Name <your@email.com>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
@@ -656,9 +655,9 @@ Example:
[source,c]
----
/*
* Check if a string with boolean value is valid.
* Checks if a string with boolean value is valid.
*
* Return:
* Returns:
* 1: boolean value is valid
* 0: boolean value is NOT valid
*/
@@ -933,9 +932,9 @@ Example: creation of a new window (from _src/gui/gui-window.c_):
[source,c]
----
/*
* Create a new window.
* Creates a new window.
*
* Return pointer to new window, NULL if error.
* Returns pointer to new window, NULL if error.
*/
struct t_gui_window *
+2 -2
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -441,7 +441,7 @@ for more information about colors management.
[[search_text]]
=== How can I search text in buffer (like /lastlog in irssi)?
The default key is kbd:[Ctrl+s] (command is: `+/input search_text_here+`).
The default key is kbd:[Ctrl+r] (command is: `+/input search_text_here+`).
And jump to highlights: kbd:[Alt+p] / kbd:[Alt+n].
See link:weechat_user.en.html#key_bindings[User's guide / Key bindings ^↗^^]
+10 -344
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -2165,7 +2165,7 @@ Arguments:
Return value:
* 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:
@@ -4666,159 +4666,6 @@ This function is not available in scripting API.
Some useful functions.
==== util_parse_int
_WeeChat ≥ 4.8.0._
Parse an integer number of type "int" in a string.
Prototype:
[source,c]
----
int weechat_util_parse_int (const char *string, int base, int *result);
----
Arguments:
* _string_: string to parse
* _base_: can be 0 (automatic) or an integer between 2 and 36 (inclusive)
* _result_: pointer to a variable updated if the string is correctly parsed
(if pointer is NULL, the number found is not returned)
Return value:
* 1: OK
* 0: error
The following strings are invalid and the function returns 0:
* empty string
* number with extra non-digits after
* number < INT_MIN (min value for a variable of type "int")
* number > INT_MAX (max value for a variable of type "int")
* invalid integer for the given _base_
C examples:
[source,c]
----
int number;
if (weechat_util_parse_int ("1234", 10, &number))
{
/* number == 1234 */
}
if (!weechat_util_parse_int ("abc", 10, &number))
{
/* parsing error, number is unchanged */
}
----
[NOTE]
This function is not available in scripting API.
==== util_parse_long
_WeeChat ≥ 4.8.0._
Parse an integer number of type "long" in a string.
Prototype:
[source,c]
----
int weechat_util_parse_long (const char *string, int base, long *result);
----
Arguments:
* _string_: string to parse
* _base_: can be 0 (automatic) or an integer between 2 and 36 (inclusive)
* _result_: pointer to a variable updated if the string is correctly parsed
(if pointer is NULL, the number found is not returned)
Return value:
* 1: OK
* 0: error
The following strings are invalid and the function returns 0:
* empty string
* number with extra non-digits after
* number < LONG_MIN (min value for a variable of type "long")
* number > LONG_MAX (max value for a variable of type "long")
* invalid integer for the given _base_
C examples:
[source,c]
----
long number;
if (weechat_util_parse_long ("1234", 10, &number))
{
/* number == 1234 */
}
if (!weechat_util_parse_long ("abc", 10, &number))
{
/* parsing error, number is unchanged */
}
----
[NOTE]
This function is not available in scripting API.
==== util_parse_longlong
_WeeChat ≥ 4.8.0._
Parse an integer number of type "long long" in a string.
Prototype:
[source,c]
----
int weechat_util_parse_longlong (const char *string, int base, long long *result);
----
Arguments:
* _string_: string to parse
* _base_: can be 0 (automatic) or an integer between 2 and 36 (inclusive)
* _result_: pointer to a variable updated if the string is correctly parsed
(if pointer is NULL, the number found is not returned)
Return value:
* 1: OK
* 0: error
The following strings are invalid and the function returns 0:
* empty string
* number with extra non-digits after
* number < LLONG_MIN (min value for a variable of type "long long")
* number > LLONG_MAX (max value for a variable of type "long long")
* invalid integer for the given _base_
C examples:
[source,c]
----
long long number;
if (weechat_util_parse_longlong ("1234", 10, &number))
{
/* number == 1234 */
}
if (!weechat_util_parse_longlong ("abc", 10, &number))
{
/* parsing error, number is unchanged */
}
----
[NOTE]
This function is not available in scripting API.
==== util_timeval_cmp
Compare two "timeval" structures.
@@ -4956,7 +4803,7 @@ This function is not available in scripting API.
==== 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`
as input, and supporting extra specifiers.
@@ -4973,8 +4820,6 @@ Arguments:
* _string_: buffer where the formatted string is stored
* _max_: string size
* _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
(for example `%.3` for milliseconds)
** `%f`: alias of `%.6`
@@ -4991,8 +4836,8 @@ C example:
char time[256];
struct timeval tv;
gettimeofday (&tv, NULL);
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
/* result: 2023-12-26T18:10:04.460509Z */
weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
/* result: 2023-12-26T18:10:04.460509 */
----
[NOTE]
@@ -5000,7 +4845,7 @@ This function is not available in scripting API.
==== util_parse_time
_WeeChat ≥ 4.2.0, updated in 4.8.0._
_WeeChat ≥ 4.2.0._
Parse date/time with support of microseconds.
@@ -5013,106 +4858,20 @@ int util_parse_time (const char *datetime, struct timeval *tv);
Arguments:
* _date_: date/time (see supported formats below)
* _date_: date/time
* _tv_: parsed date/time ("timeval" structure)
Supported date/time format (supposing the current time is `2025-08-30 21:04:55`
(Europe/Paris), so with timezone offset `+02:00`, UTC time being `19:04:55`):
[width="70%",cols="5,6m",options="header"]
|===
| Format | Examples
| Date (midnight)
| 2025-08-30
| ISO 8601, date + local time
| 2025-08-30T21:04:55 +
2025-08-30T21:04:55.123456
| ISO 8601, date + local time + offset
| 2025-08-30T16:04:55-03 +
2025-08-30T16:04:55-0300 +
2025-08-30T21:04:55+0200 +
2025-08-30T21:04:55+02:00 +
2025-08-30T21:04:55.123456+0200
| ISO 8601, date + UTC time
| 2025-08-30T19:04:55Z +
2025-08-30T19:04:55.123456Z
| RFC 3339, date + local time
| 2025-08-30 21:04:55 +
2025-08-30 21:04:55.123456
| RFC 3339, date + local time + offset
| 2025-08-30 16:04:55-03 +
2025-08-30 16:04:55-0300 +
2025-08-30 21:04:55+0200 +
2025-08-30 21:04:55 +0200 +
2025-08-30 21:04:55+02:00 +
2025-08-30 21:04:55 +02:00 +
2025-08-30 21:04:55.123456+0200 +
2025-08-30 21:04:55.123456 +02:00
| RFC 3339, date + UTC time
| 2025-08-30 19:04:55Z +
2025-08-30 19:04:55.123456Z
| Local time
| 21:04:55 +
21:04:55.123456
| Local time + offset
| 16:04:55-03 +
16:04:55-0300 +
21:04:55+0200 +
21:04:55 +0200 +
21:04:55+02:00 +
21:04:55 +02:00 +
21:04:55.123456+0200 +
21:04:55.123456 +02:00
| UTC time
| 19:04:55Z +
19:04:55.123456Z
| Timestamp date
| 1756580695 +
1756580695.123456 +
1756580695,123456
|===
Notes:
* For ISO 8601, the separator between date and time is `T` (upper case) or `t` (lower case).
* For UTC time, the final char is `Z` (upper case) or `z` (lower case).
* The timezone offset format is one of:
** `++[+/-]hh:mm++` (hours and minutes)
** `++[+/-]hhmm++` (hours and minutes)
** `++[+/-]hh++` (hours).
* Precision after seconds can be from one-tenth of second (1 digit, for example
`21:04:55.1`) to one microsecond (6 digits, for example `21:04:55.123456`). +
A dot (`.`) or comma (`,`) can separate seconds from the other digits.
Return value:
* 1 if OK, 0 if error
C examples:
C example:
[source,c]
----
struct timeval tv;
weechat_util_parse_time ("2025-08-30T19:04:55.123456Z", &tv); /* == 1 */
/* result: tv.tv_sec == 1756580695, tv.tv_usec = 123456 */
weechat_util_parse_time ("2025-08-30 21:04:55.123456 +02:00", &tv); /* == 1 */
/* same result */
weechat_util_parse_time ("21:04:55.123456", &tv); /* == 1 */
/* same result */
weechat_util_parse_time ("2023-12-25T10:29:09.456789Z", &tv); /* == 1 */
/* result: tv.tv_sec == 1703500149, tv.tv_usec = 456789 */
----
[NOTE]
@@ -9627,89 +9386,6 @@ elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
# ...
----
[[themes]]
=== Themes
Functions to contribute color (and other themable option) overrides to
built-in themes. See the
link:weechat_user.en.html#themes[user's guide / Themes] section for the
end-user side and the `+/theme+` command.
==== theme_register
_WeeChat ≥ 4.10.0._
Register a contribution of option overrides under a named theme. The
caller's plugin is the owner of the contribution; subsequent calls
with the same theme name from the same plugin merge into the existing
contribution (later keys win for duplicates).
When the calling plugin is unloaded, all its contributions are
automatically dropped from every theme.
Prototype:
[source,c]
----
struct t_theme *weechat_theme_register (const char *name,
struct t_hashtable *overrides);
----
Arguments:
* _name_: theme name (for example `+light+` or a custom name)
* _overrides_: hashtable mapping full option names
(e.g. `+irc.color.input_nick+`) to their string values; the caller
retains ownership and may free the hashtable right after the call
Return value:
* pointer to the registered theme (existing or newly created), NULL on
error
C example:
[source,c]
----
struct t_hashtable *overrides = weechat_hashtable_new (
8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (overrides)
{
weechat_hashtable_set (overrides, "irc.color.input_nick", "cyan");
weechat_hashtable_set (overrides, "irc.color.topic_old", "darkgray");
weechat_theme_register ("light", overrides);
weechat_hashtable_free (overrides);
}
----
Script (Python):
[source,python]
----
# prototype
def theme_register(name: str, overrides: Dict[str, str]) -> str: ...
# example
weechat.theme_register("light", {
"irc.color.input_nick": "cyan",
"irc.color.topic_old": "darkgray",
})
----
[NOTE]
Only options that have the _themable_ flag will be set by `/theme apply`.
All `*.color.*` options are themable by default; string options that
hold `+${color:...}+` references are explicitly opted in. Entries
targeting non-themable options are silently skipped at apply-time with
a warning logged to the _core_ buffer.
[NOTE]
When called from a script, the contribution is automatically dropped
when the script unloads (no manual cleanup is needed).
[[key_bindings]]
=== Key bindings
@@ -11386,16 +11062,6 @@ Arguments:
*** _headers_: HTTP headers in response
*** _output_: standard output (set only if _file_out_ was not set in options)
*** _error_: error message (set only in case of error)
*** _error_code_: error code (integer, set only in case of error):
**** `1`: invalid URL
**** `2`: transfer error (Curl error)
**** `3`: not enough memory
**** `4`: file error
**** `5`: transfer stopped (hook removed during the transfer)
**** `6`: transfer timeout
**** `100`: thread creation error
*** _error_code_pthread_: return code of function _pthread_create_
(integer, set only if _error_code_ is `100`)
** return value:
*** _WEECHAT_RC_OK_
*** _WEECHAT_RC_ERROR_
+2 -3
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -329,8 +329,7 @@ To remove the split:
[[key_bindings]]
== Key bindings
WeeChat uses many keys by default. All these keys are in the documentation
(link:weechat_user.en.html#key_bindings[User's guide / Key bindings ^↗^^]),
WeeChat uses many keys by default. All these keys are in the documentation,
but you should know at least some vital keys:
- kbd:[Alt+←] / kbd:[Alt+→] or kbd:[F5] / kbd:[F6]: switch to previous/next
+6 -12
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -541,8 +541,7 @@ HTTP/1.1 200 OK
"plugin": "core",
"name": "weechat"
},
"keys": [],
"last_read_line_id": -1
"keys": []
},
{
"id": 1709932823423765,
@@ -572,8 +571,7 @@ HTTP/1.1 200 OK
"tls_version": "TLS1.3",
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1
"keys": []
},
{
"id": 1709932823649069,
@@ -601,8 +599,7 @@ HTTP/1.1 200 OK
"nick": "alice",
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1
"keys": []
}
]
----
@@ -658,8 +655,7 @@ HTTP/1.1 200 OK
"message": "Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, javascript, logger, lua, perl, php, python, relay, ruby, script, spell, tcl, trigger, typing, xfer",
"tags": []
}
],
"last_read_line_id": -1
]
}
----
@@ -706,7 +702,6 @@ HTTP/1.1 200 OK
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1,
"nicklist_root": {
"id": 0,
"parent_group_id": -1,
@@ -905,8 +900,7 @@ HTTP/1.1 200 OK
"key": "up",
"command": "/fset -up"
}
],
"last_read_line_id": -1
]
}
----
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+5 -150
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -210,7 +210,7 @@ WeeChat:
| asciidoctor | ≥ 1.5.4
| Build man page and documentation.
| python3-pygments, ruby-pygments.rb |
| ruby-pygments.rb |
| Build documentation.
| libcpputest-dev | ≥ 3.4
@@ -621,7 +621,7 @@ Some environment variables are used by WeeChat if they are defined:
[width="100%",cols="1m,6",options="header"]
|===
| 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_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path).
|===
@@ -2185,151 +2185,6 @@ Example of bold with terminal foreground color:
/set weechat.color.status_time *99999
----
[[themes]]
=== Themes
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme delete mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
@@ -3905,7 +3760,7 @@ WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
* <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>>
* <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>>
@@ -3953,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
sent to the client. +
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.
Example of raw IRC message received:
+2 -2
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2021 Victorhck <victorhck.mailbox.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -454,7 +454,7 @@ información sobre la gestión de los colores.
[[search_text]]
=== ¿Cómo busco texto en un buffer (como /lastlog en irssi)?
La tecla predeterminada es kbd:[Ctrl+s] (el comando es: `+/input texto_a_buscar_aquí+`).
La tecla predeterminada es kbd:[Ctrl+r] (el comando es: `+/input texto_a_buscar_aquí+`).
Y para saltar a los textos resaltados: kbd:[Alt+p] / kbd:[Alt+n].
Vea la link:weechat_user.en.html#key_bindings[Guía del usuario / Atajos de teclado ^↗^^]
+4 -5
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2012 Lázaro A. <uranio-235@myopera.com>
// SPDX-FileCopyrightText: 2021 Victorhck <victorhck@mailbox.org>
//
@@ -342,10 +342,9 @@ Para eliminar esa división:
[[key_bindings]]
== Atajos de teclado
// TRANSLATION MISSING
WeeChat usa muchas teclas por defecto. Éstas, están bien explicadas en la documentación
(link:weechat_user.en.html#key_bindings[User's guide / Key bindings ^↗^^]),
pero debe conocer al menos la mas importantes.
WeeChat usa muchas teclas por defecto. Éstas, están bien
explicadas en la documentación pero debe conocer al menos la mas
importantes.
- kbd:[Alt+←] / kbd:[Alt+→] o kbd:[F5] / kbd:[F6]: Cambiará al buffer
siguiente/anterior
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+5 -4
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -7,9 +7,10 @@ Pour une documentation complète sur les options des extensions, merci de
consulter la documentation des extensions dans le
https://weechat.org/doc/[guide utilisateur de WeeChat].
Avec l'extension irc, vous pouvez vous connecter à un serveur avec une URL, comme ceci :
Avec l'extension irc, vous pouvez vous connecter à un serveur de manière
temporaire avec une URL, comme ceci :
irc[6][s]://[[pseudo][:mot_de_passe]@]serveur[:port][/#canal1[,#canal2...]]
irc[6][s]://[[pseudo][:motdepasse]@]serveur[:port][/#canal1[,#canal2...]]
Pour rejoindre le canal IRC de support WeeChat avec le pseudo "monpseudo" :
@@ -106,7 +107,7 @@ WeeChat est écrit par Sébastien Helleu et des contributeurs (la liste complèt
est dans le fichier AUTHORS.md).
// REUSE-IgnoreStart
Copyright (C) 2003-2026 {author}
Copyright (C) 2003-2025 {author}
// REUSE-IgnoreEnd
WeeChat est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+6 -7
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -129,7 +129,6 @@ Le cœur de WeeChat est situé dans les répertoires suivants :
|===
| Chemin/fichier | Description
| core/ | Fonctions du cœur : point d'entrée, structures internes.
|    core-args.c | Paramètres de ligne de commande.
|    core-arraylist.c | Listes avec tableau (« arraylists »).
|    core-backtrace.c | Afficher une trace après un plantage.
|    core-calc.c | Calcul du résultat d'expressions.
@@ -617,7 +616,7 @@ Exemple en C :
[source,c]
----
/*
* SPDX-FileCopyrightText: 2026 Your Name <your@email.com>
* SPDX-FileCopyrightText: 2025 Your Name <your@email.com>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
@@ -660,9 +659,9 @@ Exemple :
[source,c]
----
/*
* Check if a string with boolean value is valid.
* Checks if a string with boolean value is valid.
*
* Return:
* Returns:
* 1: boolean value is valid
* 0: boolean value is NOT valid
*/
@@ -943,9 +942,9 @@ Exemple : création d'une nouvelle fenêtre (de _src/gui/gui-window.c_) :
[source,c]
----
/*
* Create a new window.
* Creates a new window.
*
* Return pointer to new window, NULL if error.
* Returns pointer to new window, NULL if error.
*/
struct t_gui_window *
+2 -2
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -457,7 +457,7 @@ pour plus d'information sur la gestion des couleurs.
[[search_text]]
=== Comment puis-je chercher du texte dans le tampon (comme /lastlog dans irssi) ?
La touche par défaut est kbd:[Ctrl+s] (la commande est : `+/input search_text_here+`).
La touche par défaut est kbd:[Ctrl+r] (la commande est : `+/input search_text_here+`).
Et sauter aux highlights : kbd:[Alt+p] / kbd:[Alt+n].
Voir le link:weechat_user.fr.html#key_bindings[Guide utilisateur / Raccourcis clavier par défaut ^↗^^]
+10 -352
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -2205,7 +2205,7 @@ Paramètres :
Valeur de retour :
* 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 :
@@ -4745,159 +4745,6 @@ This function is not available in scripting API.
Quelques fonctions utiles.
==== util_parse_int
_WeeChat ≥ 4.8.0._
Analyser un nombre entier de type "int" dans une chaîne.
Prototype:
[source,c]
----
int weechat_util_parse_int (const char *string, int base, int *result);
----
Paramètres:
* _string_: chaîne à analyser
* _base_: peut être 0 (automatique) ou un entier entre 2 et 36 (inclus)
* _result_: pointeur vers une variable mise à jour si la chaîne est correctement analysée
(si le pointeur est NULL, le nombre trouvé n'est pas retourné)
Valeur de retour:
* 1: OK
* 0: erreur
Les chaînes suivantes sont invalides et la fonction retourne 0:
* chaîne vide
* nombre avec des caractères non numériques après
* nombre < INT_MIN (valeur minimale pour une variable de type "int")
* nombre > INT_MAX (valeur maximale pour une variable de type "int")
* entier invalide pour la _base_ donnée
Exemples en C:
[source,c]
----
int nombre;
if (weechat_util_parse_int ("1234", 10, &nombre))
{
/* nombre == 1234 */
}
if (!weechat_util_parse_int ("abc", 10, &nombre))
{
/* erreur d'analyse, nombre est inchangé */
}
----
[NOTE]
Cette fonction n'est pas disponible dans l'API script.
==== util_parse_long
_WeeChat ≥ 4.8.0._
Analyser un nombre entier de type "long" dans une chaîne.
Prototype:
[source,c]
----
int weechat_util_parse_long (const char *string, int base, long *result);
----
Paramètres:
* _string_: chaîne à analyser
* _base_: peut être 0 (automatique) ou un entier entre 2 et 36 (inclus)
* _result_: pointeur vers une variable mise à jour si la chaîne est correctement analysée
(si le pointeur est NULL, le nombre trouvé n'est pas retourné)
Valeur de retour:
* 1: OK
* 0: erreur
Les chaînes suivantes sont invalides et la fonction retourne 0:
* chaîne vide
* nombre avec des caractères non numériques après
* nombre < LONG_MIN (valeur minimale pour une variable de type "long")
* nombre > LONG_MAX (valeur maximale pour une variable de type "long")
* entier invalide pour la _base_ donnée
Exemples en C:
[source,c]
----
long nombre;
if (weechat_util_parse_long ("1234", 10, &nombre))
{
/* nombre == 1234 */
}
if (!weechat_util_parse_long ("abc", 10, &nombre))
{
/* erreur d'analyse, nombre est inchangé */
}
----
[NOTE]
Cette fonction n'est pas disponible dans l'API script.
==== util_parse_longlong
_WeeChat ≥ 4.8.0._
Analyser un nombre entier de type "long long" dans une chaîne.
Prototype:
[source,c]
----
int weechat_util_parse_longlong (const char *string, int base, long long *result);
----
Paramètres:
* _string_: chaîne à analyser
* _base_: peut être 0 (automatique) ou un entier entre 2 et 36 (inclus)
* _result_: pointeur vers une variable mise à jour si la chaîne est correctement analysée
(si le pointeur est NULL, le nombre trouvé n'est pas retourné)
Valeur de retour:
* 1: OK
* 0: erreur
Les chaînes suivantes sont invalides et la fonction retourne 0:
* chaîne vide
* nombre avec des caractères non numériques après
* nombre < LLONG_MIN (valeur minimale pour une variable de type "long long")
* nombre > LLONG_MAX (valeur maximale pour une variable de type "long long")
* entier invalide pour la _base_ donnée
Exemples en C:
[source,c]
----
long long nombre;
if (weechat_util_parse_longlong ("1234", 10, &nombre))
{
/* nombre == 1234 */
}
if (!weechat_util_parse_longlong ("abc", 10, &nombre))
{
/* erreur d'analyse, nombre est inchangé */
}
----
[NOTE]
Cette fonction n'est pas disponible dans l'API script.
==== util_timeval_cmp
Comparer deux structures "timeval".
@@ -5035,7 +4882,7 @@ Cette fonction n'est pas disponible dans l'API script.
==== 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,
en utilisant un `struct timeval` en entrée et en supportant des caractères de
@@ -5054,8 +4901,6 @@ Paramètres :
* _max_ : taille de la chaîne
* _format_ : format, le même que celui de la fonction _strftime_, avec des
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 chiffres (par exemple `%.3` pour les millisecondes)
** `%f` : alias de `%.6`
@@ -5072,8 +4917,8 @@ Exemple en C :
char time[256];
struct timeval tv;
gettimeofday (&tv, NULL);
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
/* résultat : 2023-12-26T18:10:04.460509Z */
weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
/* résultat : 2023-12-26T18:10:04.460509 */
----
[NOTE]
@@ -5081,7 +4926,7 @@ Cette fonction n'est pas disponible dans l'API script.
==== util_parse_time
_WeeChat ≥ 4.2.0, mis à jour dans la 4.8.0._
_WeeChat ≥ 4.2.0._
Analyser la date/heure avec le support des microsecondes.
@@ -5094,108 +4939,20 @@ int util_parse_time (const char *datetime, struct timeval *tv);
Paramètres :
* _date_ : date/heure (voir les formats supportés ci-dessous)
* _date_ : date/heure
* _tv_: date/heure analysée (structure "timeval")
Les formats supportés pour la date/heure (en supposant que l'heure courante est
`2025-08-30 21:04:55` (Europe/Paris), donc avec le décalage horaire `+02:00`,
l'heure UTC étant `19:04:55`):
[width="70%",cols="5,6m",options="header"]
|===
| Format | Exemples
| Date (minuit)
| 2025-08-30
| ISO 8601, date + heure locale
| 2025-08-30T21:04:55 +
2025-08-30T21:04:55.123456
| ISO 8601, date + heure locale + décalage horaire
| 2025-08-30T16:04:55-03 +
2025-08-30T16:04:55-0300 +
2025-08-30T21:04:55+0200 +
2025-08-30T21:04:55+02:00 +
2025-08-30T21:04:55.123456+0200
| ISO 8601, date + heure UTC
| 2025-08-30T19:04:55Z +
2025-08-30T19:04:55.123456Z
| RFC 3339, date + heure locale
| 2025-08-30 21:04:55 +
2025-08-30 21:04:55.123456
| RFC 3339, date + heure locale + décalage horaire
| 2025-08-30 16:04:55-03 +
2025-08-30 16:04:55-0300 +
2025-08-30 21:04:55+0200 +
2025-08-30 21:04:55 +0200 +
2025-08-30 21:04:55+02:00 +
2025-08-30 21:04:55 +02:00 +
2025-08-30 21:04:55.123456+0200 +
2025-08-30 21:04:55.123456 +02:00
| RFC 3339, date + heure UTC
| 2025-08-30 19:04:55Z +
2025-08-30 19:04:55.123456Z
| Heure locale
| 21:04:55 +
21:04:55.123456
| Heure locale + décalage horaire
| 16:04:55-03 +
16:04:55-0300 +
21:04:55+0200 +
21:04:55 +0200 +
21:04:55+02:00 +
21:04:55 +02:00 +
21:04:55.123456+0200 +
21:04:55.123456 +02:00
| Heure UTC
| 19:04:55Z +
19:04:55.123456Z
| Date d'horodatage
| 1756580695 +
1756580695.123456 +
1756580695,123456
|===
Notes:
* Pour ISO 8601, le séparateur entre la date et l'heure est `T` (majuscule) ou
`t` (minuscule).
* Pour l'heure UTC, le caractère final est `Z` (majuscule) ou `z` (minuscule).
* Le format du décalage horaire est l'un des suivants:
** `++[+/-]hh:mm++` (heures et minutes)
** `++[+/-]hhmm++` (heures et minutes)
** `++[+/-]hh++` (heures).
* La précision après les secondes peut aller d'un dixième de seconde (1 chiffre,
par exemple `21:04:55.1`) à une microseconde (6 chiffres, par exemple `21:04:55.123456`). +
Un point (`.`) ou une virgule (`,`) peut séparer les secondes des autres chiffres.
Valeur de retour :
* 1 si OK, 0 si erreur
Exemples en C :
Exemple en C :
[source,c]
----
struct timeval tv;
weechat_util_parse_time ("2025-08-30T19:04:55.123456Z", &tv); /* == 1 */
/* résultat: tv.tv_sec == 1756580695, tv.tv_usec = 123456 */
weechat_util_parse_time ("2025-08-30 21:04:55.123456 +02:00", &tv); /* == 1 */
/* même résultat */
weechat_util_parse_time ("21:04:55.123456", &tv); /* == 1 */
/* même résultat */
weechat_util_parse_time ("2023-12-25T10:29:09.456789Z", &tv); /* == 1 */
/* result: tv.tv_sec == 1703500149, tv.tv_usec = 456789 */
----
[NOTE]
@@ -9771,95 +9528,6 @@ elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
# ...
----
[[themes]]
=== Thèmes
Fonctions permettant de contribuer des surcharges d'options de couleur
(et autres options modifiables par un thème) à des thèmes intégrés.
Voir la section
link:weechat_user.fr.html#themes[guide utilisateur / Thèmes] pour le
côté utilisateur final et la commande `+/theme+`.
==== theme_register
_WeeChat ≥ 4.10.0._
Enregistrer une contribution de surcharges d'options sous un thème
nommé. L'extension appelante est le propriétaire de la contribution ;
les appels suivants avec le même nom de thème depuis la même extension
sont fusionnés dans la contribution existante (en cas de doublons, les
dernières clés gagnent).
Lorsque l'extension appelante est déchargée, toutes ses contributions
sont automatiquement retirées de tous les thèmes.
Prototype :
[source,c]
----
struct t_theme *weechat_theme_register (const char *name,
struct t_hashtable *overrides);
----
Paramètres :
* _name_ : nom du thème (par exemple `+light+` ou un nom personnalisé)
* _overrides_ : table de hachage associant des noms d'options complets
(par exemple `+irc.color.input_nick+`) à leurs valeurs chaîne ;
l'appelant en conserve la propriété et peut la libérer juste après
l'appel
Valeur de retour :
* pointeur vers le thème enregistré (existant ou nouvellement créé),
NULL en cas d'erreur
Exemple en C :
[source,c]
----
struct t_hashtable *overrides = weechat_hashtable_new (
8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (overrides)
{
weechat_hashtable_set (overrides, "irc.color.input_nick", "cyan");
weechat_hashtable_set (overrides, "irc.color.topic_old", "darkgray");
weechat_theme_register ("light", overrides);
weechat_hashtable_free (overrides);
}
----
Script (Python) :
[source,python]
----
# prototype
def theme_register(name: str, overrides: Dict[str, str]) -> str: ...
# exemple
weechat.theme_register("light", {
"irc.color.input_nick": "cyan",
"irc.color.topic_old": "darkgray",
})
----
[NOTE]
Seules les options possédant le flag _themable_ seront modifiées par
`/theme apply`. Toutes les options `*.color.*` sont modifiables par
défaut ; les options de type chaîne contenant des références
`+${color:...}+` sont explicitement déclarées comme modifiables. Les
entrées ciblant des options non modifiables sont silencieusement
ignorées au moment de l'application avec un avertissement écrit sur
le tampon _core_.
[NOTE]
Lorsqu'elle est appelée depuis un script, la contribution est
automatiquement retirée lorsque le script est déchargé (aucun nettoyage
manuel n'est nécessaire).
[[key_bindings]]
=== Associations de touches
@@ -11600,16 +11268,6 @@ Paramètres :
*** _output_ : sortie standard (défini seulement si _file_out_ n'était pas défini
dans les options)
*** _error_ : message d'erreur (défini seulement en cas d'erreur)
*** _error_code_: code d'erreur (entier, défini seulement en cas d'erreur):
**** `1`: URL invalide
**** `2`: erreur de transfert (erreur Curl)
**** `3`: mémoire insuffisante
**** `4`: erreur de fichier
**** `5`: transfert stoppé (hook supprimé durant le transfert)
**** `6`: délai d'attente dépassé pour le transfert ("timeout")
**** `100`: erreur de création du thread
*** _error_code_pthread_: code retour de la fonction _pthread_create_
(entier, défini seulement si _error_code_ vaut `100`)
** valeur de retour :
*** _WEECHAT_RC_OK_
*** _WEECHAT_RC_ERROR_
+3 -4
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -338,9 +338,8 @@ Pour supprimer le découpage :
== Raccourcis clavier
WeeChat utilise un certain nombre de touches par défaut. Toutes ces
touches sont dans la documentation
(link:weechat_user.fr.html#key_bindings[Guide utilisateur / Raccourcis clavier ^↗^^]),
mais vous devriez connaître au moins les touches vitales :
touches sont dans la documentation, mais vous devriez connaître au moins
les touches vitales :
- kbd:[Alt+←] / kbd:[Alt+→] ou kbd:[F5] / kbd:[F6] : aller au tampon précédent/suivant
- kbd:[F1] / kbd:[F2] : faire défiler la barre avec la liste des tampons ("buflist")
+6 -12
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -551,8 +551,7 @@ HTTP/1.1 200 OK
"plugin": "core",
"name": "weechat"
},
"keys": [],
"last_read_line_id": -1
"keys": []
},
{
"id": 1709932823423765,
@@ -581,8 +580,7 @@ HTTP/1.1 200 OK
"tls_version": "TLS1.3",
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1
"keys": []
},
{
"id": 1709932823649069,
@@ -609,8 +607,7 @@ HTTP/1.1 200 OK
"nick": "alice",
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1
"keys": []
}
]
----
@@ -666,8 +663,7 @@ HTTP/1.1 200 OK
"message": "Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, javascript, logger, lua, perl, php, python, relay, ruby, script, spell, tcl, trigger, typing, xfer",
"tags": []
}
],
"last_read_line_id": -1
]
}
----
@@ -713,7 +709,6 @@ HTTP/1.1 200 OK
"host": "~alice@example.com"
},
"keys": [],
"last_read_line_id": -1,
"nicklist_root": {
"id": 0,
"parent_group_id": -1,
@@ -911,8 +906,7 @@ HTTP/1.1 200 OK
"key": "up",
"command": "/fset -up"
}
],
"last_read_line_id": -1
]
}
----
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+13 -173
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -208,7 +208,7 @@ Le tableau suivant liste les paquets optionnels pour compiler WeeChat :
| asciidoctor | ≥ 1.5.4
| Construction de la page man et de la documentation.
| python3-pygments, ruby-pygments.rb |
| ruby-pygments.rb |
| Construction de la documentation.
| libcpputest-dev | ≥ 3.4
@@ -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"]
|===
| 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_EXTRA_LIBDIR | Un répertoire supplémentaire pour charger les extensions (depuis le répertoire "plugins" sous ce chemin).
|===
@@ -2227,166 +2227,6 @@ Exemple de gras avec la couleur de texte du terminal :
/set weechat.color.status_time *99999
----
[[themes]]
=== Thèmes
Un thème est un ensemble nommé de surcharges d'options qui peut être
appliqué par la commande <<command_weechat_theme,/theme>>. WeeChat est
livré avec un thème intégré `"light"` adapté aux terminaux à fond clair
et permet de charger temporairement des thèmes utilisateur depuis des
fichiers.
[[themes_themable_options]]
==== Options modifiables par un thème
Les thèmes ne peuvent modifier que les options marquées comme
_themable_ (modifiables par un thème). Toutes les options `*.color.*`
le sont par défaut ; certaines options de type chaîne contenant des
références `+${color:...}+` (par exemple
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` ou les
formats `+buflist.format.*+`) sont explicitement déclarées comme
modifiables.
La liste complète des options modifiables peut être affichée depuis le
tampon <<command_fset_fset,/fset>> avec le filtre `+t:themable+`.
[[themes_apply]]
==== Appliquer un thème
Pour basculer vers le thème intégré pour fond clair :
----
/theme apply light
----
L'état actuel de toutes les options modifiables est sauvegardé au
préalable dans un fichier de sauvegarde nommé
`+backup-AAAAMMJJ-HHMMSS-uuuuuu+` dans le répertoire `+themes+` du
répertoire de configuration de WeeChat. L'apparence précédente peut
ainsi être restaurée à tout moment avec :
----
/theme apply backup-AAAAMMJJ-HHMMSS-uuuuuu
----
La création de la sauvegarde peut être désactivée (déconseillé) :
----
/set weechat.look.theme_backup off
----
Si la sauvegarde est activée et que le fichier ne peut pas être écrit,
l'application est annulée avant qu'aucune option ne soit modifiée.
Le nom du dernier thème appliqué est conservé dans
`+weechat.look.theme+` (à titre informatif uniquement ; il n'est pas
ré-appliqué au démarrage).
[[themes_reset]]
==== Réinitialiser aux valeurs par défaut
Pour rétablir l'apparence d'origine livrée avec WeeChat, réinitialiser
toutes les options modifiables à leur valeur par défaut :
----
/theme reset
----
Une sauvegarde est écrite au préalable (même garde-fou que
`+/theme apply+`) ; si la sauvegarde échoue, la réinitialisation est
annulée avant qu'aucune option ne soit modifiée. L'option
`+weechat.look.theme+` est également remise à vide.
[[themes_save_delete]]
==== Sauvegarder et supprimer des thèmes utilisateur
Sauvegarder l'état actuel des options modifiables en tant que nouveau
thème utilisateur :
----
/theme save monTheme
----
Toutes les options modifiables sont écrites, donc le fichier est
autonome et applique exactement le même aspect sur n'importe quel
WeeChat, quelle que soit sa configuration actuelle.
Les noms réservés (noms de thèmes intégrés comme `+light+` et tout nom
commençant par `+backup-+`) sont refusés. Les fichiers sont placés
dans `+${weechat_config_dir}/themes/<nom>.theme+`.
Renommer un thème utilisateur (usage typique : conserver une
sauvegarde automatique utile sous un nom plus parlant) :
----
/theme rename backup-20260525-094210-123456 maSauvegarde
----
Les thèmes intégrés n'ont pas de fichier et ne peuvent pas être
renommés ; le nom cible ne peut pas correspondre à un nom intégré ni
commencer par `+backup-+`, et le fichier cible ne doit pas déjà
exister. Le champ `+name+` de la section `+[info]+` à l'intérieur du
fichier est réécrit afin que `/theme info` affiche le nouveau nom de
manière cohérente.
Supprimer un thème utilisateur :
----
/theme delete monTheme
----
Cela supprime le fichier sur le disque ; les thèmes intégrés ne
peuvent pas être supprimés.
[[themes_file_format]]
==== Format du fichier de thème
Un fichier de thème est de type INI avec deux sections :
----
[info]
name = "solarized_light"
description = "Thème fond clair inspiré de Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` est une section de métadonnées informatives affichées par
`/theme info`. `+[options]+` contient les surcharges réelles ; les clés
sont les noms complets d'options tels qu'affichés par `/set`. Les
valeurs de type chaîne peuvent être encadrées par des guillemets
simples ou doubles ; les guillemets sont retirés à l'analyse. Les
options non modifiables par un thème listées dans un fichier sont
refusées au moment de l'application et signalées sur le tampon _core_
(ainsi, un fichier `.theme` importé depuis une source non fiable ne
peut pas écraser des mots de passe, des listes d'auto-chargement ou
des commandes de démarrage).
Les fichiers de thème utilisateur ne sont jamais mis en cache : à
chaque `/theme apply <nom>`, le fichier est analysé, appliqué, puis
libéré.
[[themes_resolution]]
==== Ordre de résolution
Lors de l'exécution de `+/theme apply <nom>+` :
* Si `+${weechat_config_dir}/themes/<nom>.theme+` existe, le fichier
est analysé et utilisé (il masque tout thème intégré du même nom).
* Sinon, le registre des thèmes intégrés est consulté ; les thèmes
intégrés sont enregistrés par programmation par le cœur, les
extensions et les scripts (voir la documentation des extensions et
des scripts pour `+weechat_theme_register+`).
Si aucune des deux sources ne fournit le nom, l'application est
refusée.
[[charset]]
=== Charset
@@ -3511,7 +3351,7 @@ Pour ajouter une donnée sécurisée, utilisez la commande `/secure set`, par
exemple un mot de passe pour le serveur IRC _libera_ :
----
/secure set libera mot_de_passe
/secure set libera motdepasse
----
Pour plus de confort, les données sécurisées peuvent être affichées dans un
@@ -4029,7 +3869,7 @@ WeeChat supporte les https://ircv3.net/irc/[extensions IRCv3 ^↗^^] suivantes
* <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>>
* <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>>
@@ -4077,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
dans les commandes envoyées au client. +
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.
Exemple de message IRC brut reçu :
@@ -4872,7 +4712,7 @@ Il est fortement recommandé de définir un mot de passe pour le relai, avec ces
commandes :
----
/secure set relay mot_de_passe
/secure set relay motdepasse
/set relay.network.password "${sec.data.relay}"
----
@@ -4953,7 +4793,7 @@ le nom interne du serveur dans la commande IRC "PASS", avec le format
(voir l'exemple ci-dessous) :
----
PASS serveur:mot_de_passe
PASS serveur:motdepasse
----
Exemple : proxy IRC avec TLS pour tout serveur (le client choisira) :
@@ -4969,7 +4809,7 @@ Exemple : proxy IRC sans TLS seulement pour le serveur "libera" :
----
Maintenant vous pouvez vous connecter sur le port 8000 avec n'importe quel
client IRC en utilisant le mot de passe "mot_de_passe" (ou "libera:mot_de_passe"
client IRC en utilisant le mot de passe "motdepasse" (ou "libera:motdepasse"
si aucun serveur n'a été spécifié dans le relai).
Par exemple si vous utilisez WeeChat comme client IRC du relai, avec un serveur
@@ -4982,7 +4822,7 @@ avec ces commandes :
----
[[relay_api_protocol]]
=== Protocole API
=== API protocol
L'extension Relay peut envoyer les données à un autre WeeChat ou une interface
distante avec un protocol HTTP de type API REST.
@@ -5000,12 +4840,12 @@ Par exemple :
----
Maintenant vous pouvez vous connecter sur le port 9000 avec une interface
distante en utilisant le mot de passe "mot_de_passe".
distante en utilisant le mot de passe "motdepasse".
Pour vous connecter à un relai _api_ avec WeeChat :
----
/remote add weechat http://localhost:9000 -password=mot_de_passe
/remote add weechat http://localhost:9000 -password=motdepasse
/remote connect weechat
----
@@ -5042,7 +4882,7 @@ Par exemple :
----
Maintenant vous pouvez vous connecter sur le port 9500 avec une interface
distante en utilisant le mot de passe "mot_de_passe".
distante en utilisant le mot de passe "motdepasse".
[[relay_websocket]]
=== WebSocket
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2012 Marco Paolone <marcopaolone@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+3 -3
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -7,7 +7,7 @@
For complete doc on plugin options, please look at plugins documentation in
https://weechat.org/doc/[WeeChat user's guide].
With irc plugin, you can connect to a server with an URL like:
With irc plugin, you can connect to temporary server with an URL like:
irc[6][s]://[[nickname][:password]@]server[:port][/#channel1[,#channel2...]]
@@ -108,7 +108,7 @@ WeeChat is written by Sébastien Helleu and contributors (complete list is in
the AUTHORS.md file).
// REUSE-IgnoreStart
Copyright (C) 2003-2026 {author}
Copyright (C) 2003-2025 {author}
// REUSE-IgnoreEnd
WeeChat is free software; you can redistribute it and/or modify
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2012 Marco Paolone <marcopaolone@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2012 Marco Paolone <marcopaolone@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+2 -2
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2013 Marco Paolone <marcopaolone@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -490,7 +490,7 @@ for more information about colors management.
[[search_text]]
=== Come posso cercare testo nel buffer (come /lastlog con irssi)?
Il tasto predefinito è kbd:[Ctrl+s] (il comando è: `+/input search_text_here+`).
Il tasto predefinito è kbd:[Ctrl+r] (il comando è: `+/input search_text_here+`).
E per passare alle notifiche: kbd:[Alt+p] / kbd:[Alt+n].
// TRANSLATION MISSING
+10 -348
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2010-2012 Marco Paolone <marcopaolone@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -2297,7 +2297,7 @@ Argomenti:
Valore restituito:
* 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:
@@ -4874,162 +4874,6 @@ Questa funzione non è disponibile nelle API per lo scripting.
Alcune funzioni utili.
// TRANSLATION MISSING
==== util_parse_int
_WeeChat ≥ 4.8.0._
Parse an integer number of type "int" in a string.
Prototipo:
[source,c]
----
int weechat_util_parse_int (const char *string, int base, int *result);
----
Argomenti:
* _string_: string to parse
* _base_: can be 0 (automatic) or an integer between 2 and 36 (inclusive)
* _result_: pointer to a variable updated if the string is correctly parsed
(if pointer is NULL, the number found is not returned)
Valore restituito:
* 1: OK
* 0: error
The following strings are invalid and the function returns 0:
* empty string
* number with extra non-digits after
* number < INT_MIN (min value for a variable of type "int")
* number > INT_MAX (max value for a variable of type "int")
* invalid integer for the given _base_
Esempi in C:
[source,c]
----
int number;
if (weechat_util_parse_int ("1234", 10, &number))
{
/* number == 1234 */
}
if (!weechat_util_parse_int ("abc", 10, &number))
{
/* parsing error, number is unchanged */
}
----
[NOTE]
Questa funzione non è disponibile nelle API per lo scripting.
// TRANSLATION MISSING
==== util_parse_long
_WeeChat ≥ 4.8.0._
Parse an integer number of type "long" in a string.
Prototipo:
[source,c]
----
int weechat_util_parse_long (const char *string, int base, long *result);
----
Argomenti:
* _string_: string to parse
* _base_: can be 0 (automatic) or an integer between 2 and 36 (inclusive)
* _result_: pointer to a variable updated if the string is correctly parsed
(if pointer is NULL, the number found is not returned)
Valore restituito:
* 1: OK
* 0: error
The following strings are invalid and the function returns 0:
* empty string
* number with extra non-digits after
* number < LONG_MIN (min value for a variable of type "long")
* number > LONG_MAX (max value for a variable of type "long")
* invalid integer for the given _base_
Esempi in C:
[source,c]
----
long number;
if (weechat_util_parse_long ("1234", 10, &number))
{
/* number == 1234 */
}
if (!weechat_util_parse_long ("abc", 10, &number))
{
/* parsing error, number is unchanged */
}
----
[NOTE]
Questa funzione non è disponibile nelle API per lo scripting.
// TRANSLATION MISSING
==== util_parse_longlong
_WeeChat ≥ 4.8.0._
Parse an integer number of type "long long" in a string.
Prototipo:
[source,c]
----
int weechat_util_parse_longlong (const char *string, int base, long long *result);
----
Argomenti:
* _string_: string to parse
* _base_: can be 0 (automatic) or an integer between 2 and 36 (inclusive)
* _result_: pointer to a variable updated if the string is correctly parsed
(if pointer is NULL, the number found is not returned)
Valore restituito:
* 1: OK
* 0: error
The following strings are invalid and the function returns 0:
* empty string
* number with extra non-digits after
* number < LLONG_MIN (min value for a variable of type "long long")
* number > LLONG_MAX (max value for a variable of type "long long")
* invalid integer for the given _base_
Esempi in C:
[source,c]
----
long long number;
if (weechat_util_parse_longlong ("1234", 10, &number))
{
/* number == 1234 */
}
if (!weechat_util_parse_longlong ("abc", 10, &number))
{
/* parsing error, number is unchanged */
}
----
[NOTE]
Questa funzione non è disponibile nelle API per lo scripting.
==== util_timeval_cmp
Confronta due strutture "timeval".
@@ -5179,7 +5023,7 @@ Questa funzione non è disponibile nelle API per lo scripting.
// TRANSLATION MISSING
==== 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`
as input, and supporting extra specifiers.
@@ -5196,8 +5040,6 @@ Arguments:
* _string_: buffer where the formatted string is stored
* _max_: string size
* _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
(for example `%.3` for milliseconds)
** `%f`: alias of `%.6`
@@ -5214,8 +5056,8 @@ C example:
char time[256];
struct timeval tv;
gettimeofday (&tv, NULL);
weechat_util_strftimeval (time, sizeof (time), "%@%FT%T.%fZ", &tv);
/* result: 2023-12-26T18:10:04.460509Z */
weechat_util_strftimeval (time, sizeof (time), "%FT%T.%f", &tv);
/* result: 2023-12-26T18:10:04.460509 */
----
[NOTE]
@@ -5224,7 +5066,7 @@ Questa funzione non è disponibile nelle API per lo scripting.
// TRANSLATION MISSING
==== util_parse_time
_WeeChat ≥ 4.2.0, updated in 4.8.0._
_WeeChat ≥ 4.2.0._
Parse date/time with support of microseconds.
@@ -5237,106 +5079,20 @@ int util_parse_time (const char *datetime, struct timeval *tv);
Arguments:
* _date_: date/time (see supported formats below)
* _date_: date/time
* _tv_: parsed date/time ("timeval" structure)
Supported date/time format (supposing the current time is `2025-08-30 21:04:55`
(Europe/Paris), so with timezone offset `+02:00`, UTC time being `19:04:55`):
[width="70%",cols="5,6m",options="header"]
|===
| Format | Examples
| Date (midnight)
| 2025-08-30
| ISO 8601, date + local time
| 2025-08-30T21:04:55 +
2025-08-30T21:04:55.123456
| ISO 8601, date + local time + offset
| 2025-08-30T16:04:55-03 +
2025-08-30T16:04:55-0300 +
2025-08-30T21:04:55+0200 +
2025-08-30T21:04:55+02:00 +
2025-08-30T21:04:55.123456+0200
| ISO 8601, date + UTC time
| 2025-08-30T19:04:55Z +
2025-08-30T19:04:55.123456Z
| RFC 3339, date + local time
| 2025-08-30 21:04:55 +
2025-08-30 21:04:55.123456
| RFC 3339, date + local time + offset
| 2025-08-30 16:04:55-03 +
2025-08-30 16:04:55-0300 +
2025-08-30 21:04:55+0200 +
2025-08-30 21:04:55 +0200 +
2025-08-30 21:04:55+02:00 +
2025-08-30 21:04:55 +02:00 +
2025-08-30 21:04:55.123456+0200 +
2025-08-30 21:04:55.123456 +02:00
| RFC 3339, date + UTC time
| 2025-08-30 19:04:55Z +
2025-08-30 19:04:55.123456Z
| Local time
| 21:04:55 +
21:04:55.123456
| Local time + offset
| 16:04:55-03 +
16:04:55-0300 +
21:04:55+0200 +
21:04:55 +0200 +
21:04:55+02:00 +
21:04:55 +02:00 +
21:04:55.123456+0200 +
21:04:55.123456 +02:00
| UTC time
| 19:04:55Z +
19:04:55.123456Z
| Timestamp date
| 1756580695 +
1756580695.123456 +
1756580695,123456
|===
Notes:
* For ISO 8601, the separator between date and time is `T` (upper case) or `t` (lower case).
* For UTC time, the final char is `Z` (upper case) or `z` (lower case).
* The timezone offset format is one of:
** `++[+/-]hh:mm++` (hours and minutes)
** `++[+/-]hhmm++` (hours and minutes)
** `++[+/-]hh++` (hours).
* Precision after seconds can be from one-tenth of second (1 digit, for example
`21:04:55.1`) to one microsecond (6 digits, for example `21:04:55.123456`). +
A dot (`.`) or comma (`,`) can separate seconds from the other digits.
Return value:
* 1 if OK, 0 if error
C examples:
C example:
[source,c]
----
struct timeval tv;
weechat_util_parse_time ("2025-08-30T19:04:55.123456Z", &tv); /* == 1 */
/* result: tv.tv_sec == 1756580695, tv.tv_usec = 123456 */
weechat_util_parse_time ("2025-08-30 21:04:55.123456 +02:00", &tv); /* == 1 */
/* same result */
weechat_util_parse_time ("21:04:55.123456", &tv); /* == 1 */
/* same result */
weechat_util_parse_time ("2023-12-25T10:29:09.456789Z", &tv); /* == 1 */
/* result: tv.tv_sec == 1703500149, tv.tv_usec = 456789 */
----
[NOTE]
@@ -9967,90 +9723,6 @@ elif rc == weechat.WEECHAT_CONFIG_OPTION_UNSET_ERROR:
# ...
----
// TRANSLATION MISSING
[[themes]]
=== Themes
Functions to contribute color (and other themable option) overrides to
built-in themes. See the
link:weechat_user.it.html#themes[user's guide / Themes] section for the
end-user side and the `+/theme+` command.
==== theme_register
_WeeChat ≥ 4.10.0._
Register a contribution of option overrides under a named theme. The
caller's plugin is the owner of the contribution; subsequent calls
with the same theme name from the same plugin merge into the existing
contribution (later keys win for duplicates).
When the calling plugin is unloaded, all its contributions are
automatically dropped from every theme.
Prototype:
[source,c]
----
struct t_theme *weechat_theme_register (const char *name,
struct t_hashtable *overrides);
----
Arguments:
* _name_: theme name (for example `+light+` or a custom name)
* _overrides_: hashtable mapping full option names
(e.g. `+irc.color.input_nick+`) to their string values; the caller
retains ownership and may free the hashtable right after the call
Return value:
* pointer to the registered theme (existing or newly created), NULL on
error
C example:
[source,c]
----
struct t_hashtable *overrides = weechat_hashtable_new (
8,
WEECHAT_HASHTABLE_STRING,
WEECHAT_HASHTABLE_STRING,
NULL, NULL);
if (overrides)
{
weechat_hashtable_set (overrides, "irc.color.input_nick", "cyan");
weechat_hashtable_set (overrides, "irc.color.topic_old", "darkgray");
weechat_theme_register ("light", overrides);
weechat_hashtable_free (overrides);
}
----
Script (Python):
[source,python]
----
# prototype
def theme_register(name: str, overrides: Dict[str, str]) -> str: ...
# example
weechat.theme_register("light", {
"irc.color.input_nick": "cyan",
"irc.color.topic_old": "darkgray",
})
----
[NOTE]
Only options that have the _themable_ flag will be set by `/theme apply`.
All `*.color.*` options are themable by default; string options that
hold `+${color:...}+` references are explicitly opted in. Entries
targeting non-themable options are silently skipped at apply-time with
a warning logged to the _core_ buffer.
[NOTE]
When called from a script, the contribution is automatically dropped
when the script unloads (no manual cleanup is needed).
[[key_bindings]]
=== Combinazione tasti
@@ -11801,16 +11473,6 @@ Argomenti:
*** _headers_: HTTP headers in response
*** _output_: standard output (set only if _file_out_ was not set in options)
*** _error_: error message (set only in case of error)
*** _error_code_: error code (integer, set only in case of error):
**** `1`: invalid URL
**** `2`: transfer error (Curl error)
**** `3`: not enough memory
**** `4`: file error
**** `5`: transfer stopped (hook removed during the transfer)
**** `6`: transfer timeout
**** `100`: thread creation error
*** _error_code_pthread_: return code of function _pthread_create_
(integer, set only if _error_code_ is `100`)
** return value:
*** _WEECHAT_RC_OK_
*** _WEECHAT_RC_ERROR_
+2 -4
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2013 Marco Paolone <marcopaolone@gmail.com>
// SPDX-FileCopyrightText: 2023 Mattia Ronchi <ronchimattia03@gmail.com>
//
@@ -338,9 +338,7 @@ Per rimuovere la divisione:
[[key_bindings]]
== Associazione tasti
// TRANSLATION MISSING
WeeChat usa molti tasti. Essi sono tutti presenti nella documentazione
(link:weechat_user.it.html#key_bindings[Guida per l'Utente / Key bindings ^↗^^]),
WeeChat usa molti tasti. Essi sono tutti presenti nella documentazione,
ma si dovrebbero conoscere almeno quelli vitali:
- kbd:[Alt+←] / kbd:[Alt+→] oppure kbd:[F5] / kbd:[F6]: passa al buffer
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2010-2013 Marco Paolone <marcopaolone@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+5 -151
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2009-2012 Marco Paolone <marcopaolone@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -245,7 +245,7 @@ WeeChat:
| Build man page and documentation.
// TRANSLATION MISSING
| python3-pygments, ruby-pygments.rb |
| ruby-pygments.rb |
| Build documentation.
// TRANSLATION MISSING
@@ -686,7 +686,7 @@ Some environment variables are used by WeeChat if they are defined:
[width="100%",cols="1m,6",options="header"]
|===
| 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_EXTRA_LIBDIR | An extra directory to load plugins (from the "plugins" directory in this path).
|===
@@ -2439,152 +2439,6 @@ Esempio di grassetto con il colore di primo piano del terminale:
/set weechat.color.status_time *99999
----
// TRANSLATION MISSING
[[themes]]
=== Themes
A theme is a named bundle of option overrides that can be applied with
the <<command_weechat_theme,/theme>> command. WeeChat ships a built-in
`"light"` theme tuned for light-background terminals and supports
user-defined themes loaded transiently from files.
[[themes_themable_options]]
==== Themable options
Themes can only set options marked as _themable_. All `*.color.*`
options are themable by default; a few string options that hold format
expressions with `+${color:...}+` references (such as
`+weechat.color.chat_nick_colors+`, `+weechat.look.prefix_error+` or the
`+buflist.format.*+` formats) are explicitly opted in.
You can list the full themable surface area from the
<<command_fset_fset,/fset>> buffer with the `+t:themable+` filter.
[[themes_apply]]
==== Applying a theme
To switch to the built-in light-background theme:
----
/theme apply light
----
The current state of every themable option is saved beforehand to a
backup theme file named like `+backup-YYYYMMDD-HHMMSS-uuuuuu+` in
directory `+themes+` inside the WeeChat configuration directory, so the
previous look can be restored at any time with:
----
/theme apply backup-YYYYMMDD-HHMMSS-uuuuuu
----
Backup creation can be disabled (not recommended):
----
/set weechat.look.theme_backup off
----
If backup is enabled and the backup file cannot be written, the apply
is aborted before any option is changed.
The name of the last applied theme is stored in
`+weechat.look.theme+` (informational only; not re-applied at startup).
[[themes_reset]]
==== Resetting to defaults
To restore the look shipped with WeeChat, reset every themable option
to its default value:
----
/theme reset
----
A backup is written first (same gate as `+/theme apply+`); on backup
failure the reset is aborted before any option is changed.
`+weechat.look.theme+` is cleared too.
[[themes_save_delete]]
==== Saving and deleting user themes
Save the current themable options as a new user theme file:
----
/theme save mytheme
----
Every themable option is written, so the file is self-contained and
applies the exact same look on any WeeChat, regardless of its current
configuration.
Reserved names (built-in theme names like `+light+` and any name
starting with `+backup-+`) are refused. Files live at
`+${weechat_config_dir}/themes/<name>.theme+`.
Rename a user theme (typical use: keep a useful automatic backup
under a meaningful name):
----
/theme rename backup-20260525-094210-123456 mybackup
----
Built-in themes have no file and cannot be renamed; the target name
cannot match a built-in name or start with `+backup-+`, and the
target file must not already exist. The `+[info]+` `+name+` field
inside the file is rewritten so `/theme info` reports the new name
consistently.
Delete a user theme:
----
/theme delete mytheme
----
This removes the file on disk; built-in themes cannot be deleted.
[[themes_file_format]]
==== Theme file format
A theme file is INI-like with two sections:
----
[info]
name = "solarized_light"
description = "Light-background theme inspired by Solarized"
date = "2026-05-25 09:42:10"
weechat = "4.10.0-dev"
[options]
weechat.color.chat = "darkgray"
weechat.color.separator = "blue"
irc.color.input_nick = "magenta"
buflist.format.number = "${color:28}${number}${if:${number_displayed}?.: }"
----
`+[info]+` is informational metadata shown by `/theme info`. `+[options]+`
holds the actual overrides; keys are the full option names that would
appear in `/set`. String values can be enclosed in double or single
quotes; quotes are stripped at parse time. Non-themable options listed
in a theme file are refused at apply time and logged to the core
buffer (so a `.theme` file imported from an untrusted source cannot
overwrite passwords, autoload lists, or startup commands).
User theme files are never cached: on every `/theme apply <name>` the
file is parsed, applied, and freed.
[[themes_resolution]]
==== Resolution order
When `+/theme apply <name>+` is run:
* If `+${weechat_config_dir}/themes/<name>.theme+` exists, the file
is parsed and used (it shadows any built-in with the same name).
* Otherwise the built-in theme registry is consulted; built-ins are
registered programmatically by core, plugins and scripts (see the
plugin and scripting documentation for `+weechat_theme_register+`).
If neither source provides the name, the apply is refused.
[[charset]]
=== Charset
@@ -4256,7 +4110,7 @@ WeeChat supports the following https://ircv3.net/irc/[IRCv3 extensions ^↗^^]:
* <<irc_ircv3_batch,batch>>
* <<irc_ircv3_cap_notify,cap-notify>>
* <<irc_ircv3_chghost,chghost>>
* <<irc_ircv3_draft_multiline,draft/multiline>>
* <<irc_ircv3_draft/multiline,draft/multiline>>
* <<irc_ircv3_echo_message,echo-message>>
* <<irc_ircv3_extended_join,extended-join>>
* <<irc_ircv3_invite_notify,invite-notify>>
@@ -4304,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
sent to the client. +
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.
Example of raw IRC message received:
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2012-2019 Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+3 -4
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2012-2019 Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>
//
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -7,8 +7,7 @@
プラグインオプションに関する完全な文書は
https://weechat.org/doc[WeeChat ユーザーズガイド] のプラグインの章を参照してください。
// TRANSLATION MISSING
With irc plugin, you can connect to a server with an URL like:
irc プラグインでは以下の様な URL で一時的なサーバに接続することができます:
irc[6][s]://[[nickname][:password]@]server[:port][/#channel1[,#channel2...]]
@@ -107,7 +106,7 @@ WeeChat は Sébastien Helleu さんと貢献者によって作成されてい
(完全なリストは AUTHORS.md ファイルを参照してください)。
// REUSE-IgnoreStart
著作権 (C) 2003-2026 {author}
著作権 (C) 2003-2025 {author}
// REUSE-IgnoreEnd
WeeChat はフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行された
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2012-2019 Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2012-2019 Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>
//
// SPDX-License-Identifier: GPL-3.0-or-later
+1 -1
View File
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2003-2026 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
// SPDX-FileCopyrightText: 2012-2019 Ryuunosuke Ayanokouzi <i38w7i3@yahoo.co.jp>
//
// SPDX-License-Identifier: GPL-3.0-or-later

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