elkowar/eww · error
Script var ' ' is not polling
Error message
Script var '{}' is not polling What it means
Eww's script-var poller keeps two kinds of script variables: polling vars (re-run on an interval) and listen vars (read from a long-running process). When a `poll` command arrives for a variable name, force_poll_variable only finds polling vars in its map; if the name is registered as a listen var (or not a script var at all), it prints this error instead of polling.
Solutions
- Only call `eww poll` on variables defined with a polling `:interval`, not `:listen` vars
- Check the variable definition in eww.yuck/eww.rasi to confirm it is a poll-style script var
- Verify the variable name spelling matches the configured script var
Example fix
; before
(deflisten disk "df -h / | tail -1 | awk '{print $5}'")
;; $ eww poll disk -> error
; after: polling var supports `eww poll`
(defpoll disk :interval "5s" "df -h / | tail -1 | awk '{print $5}'") Defensive patterns
Strategy: validation
Validate before calling
// shell: confirm var is pollable before calling
config=$(grep -E "defpoll\s+${name}" ~/.config/eww/eww.yuck)
if [ -z "$config" ]; then echo "$name is not a polled var"; exit 1; fi
eww poll "$name" Prevention
- Only poll vars defined with :interval/defpoll
- Document which vars are listen vs poll in your config
- Verify names with `eww state` before scripting against them
When it happens
Trigger: Calling the `poll` client command (e.g. `eww poll <name>`) on a variable whose definition uses `:listen` instead of `:interval`/polling, or on a name that is not a script variable.
Common situations: Users convert a variable from `:listen` to a polled script or vice versa and forget to update scripts/automation that calls `eww poll`; typos in the variable name passed to `eww poll`.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- The script for the ` `-variable exited unsuccessfully
- The script for the ` `-variable exited unsuccessfully
- Failed with output
- CSS error
- Encountered both an SCSS and CSS file. Only one of these…
AI-assisted analysis of elkowar/eww@48f5aa8b37 (2026-09-08).
Data as JSON: /api/errors/16fda8b91e0a2b73.
Report an issue: GitHub.
Appendix: source
Thrown at crates/eww/src/app.rs:380
Ok(Err(err)) => error_handling_ctx::print_error(anyhow!(err)),
Err(err) => error_handling_ctx::print_error(anyhow!(err)),
};
}
}
}
fn force_poll_variable(&mut self, name: VarName) {
match self.eww_config.get_script_var(&name) {
Err(err) => error_handling_ctx::print_error(err),
Ok(var) => {
if let ScriptVarDefinition::Poll(poll_var) = var {
log::debug!("force-polling var {}", &name);
match script_var_handler::run_poll_once(&poll_var) {
Err(err) => error_handling_ctx::print_error(err),
Ok(value) => self.update_global_variable(name, value),
}
} else {
error_handling_ctx::print_error(anyhow!("Script var '{}' is not polling", name))
}
}
}
}
/// Close a window and do all the required cleanups in the scope_graph and script_var_handler
fn close_window(&mut self, instance_id: &str, auto_reopen: bool) -> Result<()> {
if let Some(old_abort_send) = self.window_close_timer_abort_senders.remove(instance_id) {
_ = old_abort_send.send(());
}
let eww_window = self
.open_windows
.remove(instance_id)
.with_context(|| format!("Tried to close window with id '{instance_id}', but no such window was open"))?;
let scope_index = eww_window.scope_index;
eww_window.close();
View on GitHub (pinned to 48f5aa8b37)