mirror of
https://github.com/wez/wezterm.git
synced 2024-12-29 00:21:57 +03:00
109 lines
3.1 KiB
Markdown
109 lines
3.1 KiB
Markdown
# window:get_appearance()
|
|
|
|
*Since: 20210814-124438-54e29167*
|
|
|
|
This method returns the appearance of the window environment. The appearance
|
|
can be one of the following 4 values:
|
|
|
|
* `"Light"` - the normal appearance, with dark text on a light background
|
|
* `"Dark"` - "dark mode", with predominantly dark colors and probably a lighter, lower contrasting, text color on a dark background
|
|
* `"LightHighContrast"` - light mode but with high contrast colors
|
|
* `"DarkHighContrast"` - dark mode but with high contrast colors
|
|
|
|
wezterm currently doesn't know how to interrogate the appearance on Wayland
|
|
systems, and will always report `"Light"`.
|
|
|
|
On macOS, X11 and Windows systems, wezterm is able to detect when the
|
|
appearance has changed and will generate a
|
|
[window-config-reloaded](../window-events/window-config-reloaded.md) event for each
|
|
window.
|
|
|
|
This example configuration shows how you can have your color scheme
|
|
automatically adjust to the current appearance:
|
|
|
|
```lua
|
|
local wezterm = require 'wezterm'
|
|
|
|
function scheme_for_appearance(appearance)
|
|
if appearance:find("Dark") then
|
|
return "Builtin Solarized Dark"
|
|
else
|
|
return "Builtin Solarized Light"
|
|
end
|
|
end
|
|
|
|
wezterm.on("window-config-reloaded", function(window, pane)
|
|
local overrides = window:get_config_overrides() or {}
|
|
local appearance = window:get_appearance()
|
|
local scheme = scheme_for_appearance(appearance)
|
|
if overrides.color_scheme ~= scheme then
|
|
overrides.color_scheme = scheme
|
|
window:set_config_overrides(overrides)
|
|
end
|
|
end)
|
|
|
|
return {
|
|
}
|
|
```
|
|
|
|
### Wayland GNOME Appearance
|
|
|
|
The GNOME desktop environment provides the `gsettings` tool that can
|
|
inform us of the selected appearance even in a Wayland session. We can
|
|
substitute the call to `window:get_appearance` above with a call to the
|
|
following function, which takes advantage of this:
|
|
|
|
```lua
|
|
function query_appearance_gnome()
|
|
local success, stdout = wezterm.run_child_process(
|
|
{"gsettings", "get", "org.gnome.desktop.interface", "gtk-theme"}
|
|
)
|
|
-- lowercase and remove whitespace
|
|
stdout = stdout:lower():gsub("%s+", "")
|
|
local mapping = {
|
|
highcontrast = "LightHighContrast",
|
|
highcontrastinverse = "DarkHighContrast",
|
|
adwaita = "Light",
|
|
["adwaita-dark"] = "Dark"
|
|
}
|
|
local appearance = mapping[stdout]
|
|
if appearance then
|
|
return appearance
|
|
end
|
|
if stdout:find("dark") then
|
|
return "Dark"
|
|
end
|
|
return "Light"
|
|
end
|
|
```
|
|
|
|
Since WezTerm will not fire a `window-config-reloaded`
|
|
event on Wayland, you will instead need to listen on the
|
|
[update-right-status](../window-events/update-right-status.md) event,
|
|
which will essentially poll for the appearance periodically:
|
|
|
|
```lua
|
|
local wezterm = require 'wezterm'
|
|
|
|
function scheme_for_appearance(appearance)
|
|
if appearance:find("Dark") then
|
|
return "Builtin Solarized Dark"
|
|
else
|
|
return "Builtin Solarized Light"
|
|
end
|
|
end
|
|
|
|
wezterm.on("update-right-status", function(window, pane)
|
|
local overrides = window:get_config_overrides() or {}
|
|
local appearance = query_appearance_gnome()
|
|
local scheme = scheme_for_appearance(appearance)
|
|
if overrides.color_scheme ~= scheme then
|
|
overrides.color_scheme = scheme
|
|
window:set_config_overrides(overrides)
|
|
end
|
|
end)
|
|
|
|
return {
|
|
}
|
|
```
|