1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-12 14:14:48 +02:00
Sébastien Helleu 3bdb31bbf6 core: implement theme file parsing and transient file reads in /theme apply
Add a small INI-style parser for *.theme files and wire it into the
/theme command so user themes living in directory "themes" inside the
WeeChat configuration directory can be applied (and inspected) without
ever being cached.

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

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

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

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

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

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

/theme info <name> works for both sources: file path is shown when the
information comes from disk; "built-in (in-memory)" otherwise.
2026-06-08 09:39:22 +02:00
2026-06-07 21:56:22 +02:00
2026-06-07 21:56:22 +02:00
2026-03-08 10:37:15 +01:00
2026-03-08 10:37:15 +01:00
2026-03-08 10:37:15 +01:00
2026-03-08 10:37:15 +01:00
2026-03-08 10:37:15 +01:00
2026-03-08 10:37:15 +01:00
2026-03-08 10:37:15 +01:00
2026-06-07 11:51:55 +02:00
2026-03-29 18:39:02 +02:00
2026-03-08 10:37:15 +01:00
2021-09-11 00:17:36 +02:00
2026-03-08 10:37:15 +01:00
2026-03-08 10:37:15 +01:00
2026-06-07 11:51:55 +02:00

WeeChat

WeeChat

Mastodon X Devel blog Donate

CI Code coverage REUSE status

WeeChat (Wee Enhanced Environment for Chat) is a free chat client, fast and light, designed for many operating systems.
It is highly customizable and extensible with scripts.

Homepage: https://weechat.org/

Features

  • Modular chat client: WeeChat has a lightweight core and optional plugins. All plugins (including 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.
  • Standards-compliant: the IRC plugin is compliant with RFCs 1459, 2810, 2811, 2812, 2813 and 7194.
  • 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 (Perl, Python, Ruby, Lua, Tcl, Scheme, JavaScript and PHP).
  • Fully documented: there is comprehensive documentation, which is translated 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.

WeeChat

On WeeChat's website you can find more screenshots.

Installation

WeeChat can be installed using your favorite package manager (recommended) or by compiling it yourself.
For detailed instructions, please check the WeeChat user's guide.

Semantic versioning

WeeChat follows "practical" semantic versioning; see CONTRIBUTING.md.

Copyright © 2003-2026 Sébastien Helleu

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/.

Languages
C 79.5%
C++ 17.8%
Python 1.6%
CMake 0.8%
Shell 0.2%
Other 0.1%