If user config file overwrites a single attribute and not the others,
for example only bg:
"mail.listing.tag_default" = { bg = "Blue" }
The other attributes, in this case fg and attrs revert to the default
values of ThemeAttributeInner and not the default value for the key
"mail.listing.tag_default". As a result the above expands to:
"mail.listing.tag_default" = { fg = Color::Default, bg = "Blue", attrs
= Attr::Default }
This commit keeps the key value defaults, so the above should expand to:
"mail.listing.tag_default" = { fg = default_theme["mail.listing.tag_default"].fg, bg = "Blue", attrs
= default_theme["mail.listing.tag_default"].attrs }
Attribute links are not checked for validity in theme validation, and an
invalid link would cause a panic in is_cyclic.
This commit improves the theme validation errors by printing if the
error lies in a theme key or a link.
Text attributes have been rewritten as bit flags, so for example instead of
"BoldUnderline" you'd have to define "Bold | Underline" in your theme
settings.
Requested in #21
In StrBuilder::display there's an assumption that the string is valid utf-8 but if an email contains an invalid string inside the MIME encoded word part the conversion panics. Change it to a lossy UTF-8 conversion instead. Fixes#19
Reported-By: cycomanic
conf_override! wraps struct definitions and defines a secondary Override
struct that wraps each field in an Option. The macro mailbox_settings!
is used to select settings from an account & mailbox index. If a user defines an overriding setting, the macro returns the override instead of the immediately next in the hierarchy setting.
The selection is done for a specific field as follows:
if per-folder override is defined, return per-folder override
else if per-account override is defined, return per-account override
else return global setting field value.
So far only the connection is implemented, and using the
testing/manage_sieve binary you can get a shell to a managesieve server.
The managesieve interface will be used in the UI from a plugin, but the
plugin's interface isn't implemented yet.