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

  1. Only call `eww poll` on variables defined with a polling `:interval`, not `:listen` vars
  2. Check the variable definition in eww.yuck/eww.rasi to confirm it is a poll-style script var
  3. 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

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


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)