{"record":{"id":"b65780f418073d87","repo":"junegunn/fzf","slug":"every-requires-a-positive-number-of-seconds","errorCode":null,"errorMessage":"every() requires a positive number of seconds","messagePattern":"every\\(\\) requires a positive number of seconds","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/options.go","lineNumber":1324,"sourceCode":"\t\t\t\tlist = append(list, evt)\n\t\t\t} else if len(key) == 2 && strings.HasPrefix(lkey, \"f\") && key[1] >= '1' && key[1] <= '9' {\n\t\t\t\tadd(tui.EventType(tui.F1.Int() + int(key[1]) - '1'))\n\t\t\t} else if len(runes) == 1 {\n\t\t\t\tevt := tui.Key(runes[0])\n\t\t\t\tchords[evt] = key\n\t\t\t\tlist = append(list, evt)\n\t\t\t} else {\n\t\t\t\treturn nil, list, errors.New(\"unsupported key: \" + key)\n\t\t\t}\n\t\t}\n\t}\n\treturn chords, list, nil\n}\n\nfunc parseEveryEvent(arg string) (tui.Event, error) {\n\tsecs, err := strconv.ParseFloat(strings.TrimSpace(arg), 64)\n\tif err != nil || math.IsNaN(secs) || math.IsInf(secs, 0) || secs <= 0 {\n\t\treturn tui.Event{}, errors.New(\"every() requires a positive number of seconds\")\n\t}\n\tif secs < 0.01 {\n\t\tsecs = 0.01\n\t}\n\tms := math.Round(secs * 1000)\n\tif ms > math.MaxInt32 {\n\t\treturn tui.Event{}, errors.New(\"every() interval is too large\")\n\t}\n\treturn tui.Event{Type: tui.Every, Char: rune(int32(ms))}, nil\n}\n\nfunc parseScheme(str string) (string, []criterion, error) {\n\tstr = strings.ToLower(str)\n\tswitch str {\n\tcase \"history\":\n\t\treturn str, []criterion{byScore}, nil\n\tcase \"path\":\n\t\treturn str, []criterion{byScore, byPathname, byLength}, nil","sourceCodeStart":1306,"sourceCodeEnd":1342,"githubUrl":"https://github.com/junegunn/fzf/blob/bd4efa277b49ef34ca4025bff9b1a288e1980eff/src/options.go#L1306-L1342","documentation":"parseEveryEvent validates the seconds argument of the every(n) event usable in --bind (e.g. --bind 'every-5s:reload(...)' internally, or load-actions). It rejects values that fail ParseFloat, are NaN/Inf, or are <= 0 — the interval must be a strictly positive finite number.","triggerScenarios":"--bind 'every-0s:reload(...)', every(-1), every(abc), every() (empty arg), every(NaN) — each either fails ParseFloat or trips the <=0 / NaN / Inf guard.","commonSituations":"Scripts templating the interval from a variable that defaults to 0; users assuming every(0) means 'as fast as possible' (minimum is clamped to 0.01s, so pass a positive value); negative values from arithmetic.","solutions":["Pass a positive number of seconds, minimum effectively 0.01: every-1s or every(0.5)","Default your interval variable defensively: INTERVAL=\"${INTERVAL:-5}\"","For one-shot reload on focus use load(...) instead of every(0)"],"exampleFix":"# before\nfzf --bind 'every-0s:reload(curl -s localhost:8080/items)'\n# after\nfzf --bind 'every-5s:reload(curl -s localhost:8080/items)'","handlingStrategy":"validation","validationCode":"INTERVAL=\"${INTERVAL:-5}\"\nawk -v i=\"$INTERVAL\" 'BEGIN { if (i == \"\" || i+0 <= 0 || i != i) exit 1 }' || { echo \"every() needs seconds > 0\" >&2; exit 1; }\nfzf --bind \"every-${INTERVAL}s:reload(make)\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always default the interval variable to a positive number","Remember the effective minimum is 0.01s — do not chase every(0)","Use load(...) / on-focus events for one-shot reloads instead of zero intervals"],"tags":["fzf","keybindings","event-loop","validation","go"],"backgroundTag":null,"analyzedSha":"bd4efa277b49ef34ca4025bff9b1a288e1980eff","analyzedAt":"2026-08-15T06:11:46.983Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}