{"record":{"id":"b4fab6674f967e51","repo":"junegunn/fzf","slug":"non-ascii-jump-labels-are-not-allowed","errorCode":null,"errorMessage":"non-ascii jump labels are not allowed","messagePattern":"non-ascii jump labels are not allowed","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/options.go","lineNumber":3535,"sourceCode":"\t\treturn errors.New(\"scroll offset must be a non-negative integer\")\n\t}\n\n\tif opts.Tabstop < 1 {\n\t\treturn errors.New(\"tab stop must be a positive integer\")\n\t}\n\n\tif len(opts.JumpLabels) == 0 {\n\t\treturn errors.New(\"empty jump labels\")\n\t}\n\n\tif opts.FreezeLeft < 0 || opts.FreezeRight < 0 {\n\t\treturn errors.New(\"number of fields to freeze must be a non-negative integer\")\n\t}\n\n\tif validateJumpLabels {\n\t\tfor _, r := range opts.JumpLabels {\n\t\t\tif r < 32 || r > 126 {\n\t\t\t\treturn errors.New(\"non-ascii jump labels are not allowed\")\n\t\t\t}\n\t\t}\n\t}\n\treturn err\n}\n\nfunc applyPreset(opts *Options, preset string) error {\n\t// Reset to the platform default\n\tdefaultBorderShape = tui.DefaultBorderShape\n\n\tswitch strings.ToLower(preset) {\n\tcase \"default\":\n\t\topts.ListBorderShape = tui.BorderUndefined\n\t\topts.InputBorderShape = tui.BorderUndefined\n\t\topts.HeaderBorderShape = tui.BorderUndefined\n\t\topts.FooterBorderShape = tui.BorderUndefined\n\t\topts.Preview.border = defaultBorderShape\n\t\topts.Preview.info = true","sourceCodeStart":3517,"sourceCodeEnd":3553,"githubUrl":"https://github.com/junegunn/fzf/blob/bd4efa277b49ef34ca4025bff9b1a288e1980eff/src/options.go#L3517-L3553","documentation":"fzf restricts jump-label characters to printable ASCII (rune values 32-126). Labels are matched as single keystrokes, so control characters, DEL, and multi-byte Unicode cannot function as labels. The loop at options.go:3535 rejects any rune outside that range when validateJumpLabels is true.","triggerScenarios":"Passing --jump-labels with Unicode letters (e.g. 'héllo'), emoji, control characters, or DEL, e.g. --jump-labels='αβγ'. Each rune r < 32 || r > 126 triggers the error.","commonSituations":"Non-English keyboard layouts tempting users to use native alphabet characters; copy-pasting label sets that include invisible characters or smart quotes; terminals that cannot render the chosen glyphs.","solutions":["Restrict labels to printable ASCII (letters, digits, punctuation)","Use the default 'ascii' preset","Sanitize user-supplied label sets before passing them to fzf"],"exampleFix":"# before\nfzf --jump-labels='asdfghjklé'\n# after\nfzf --jump-labels='asdfghjkl'","handlingStrategy":"type-guard","validationCode":"// Go: sanitize labels to printable ASCII\nfunc asciiLabels(s string) string {\n    out := []rune{}\n    for _, r := range s {\n        if r >= 32 && r <= 126 { out = append(out, r) }\n    }\n    if len(out) == 0 { return \"abcdefghijklmnopqrstuvwxyz\" }\n    return string(out)\n}","typeGuard":"func validJumpLabelSet(s string) bool {\n    if s == \"\" { return false }\n    for _, r := range s {\n        if r < 32 || r > 126 { return false }\n    }\n    return true\n}","tryCatchPattern":null,"preventionTips":["Restrict jump labels to printable ASCII (32-126)","Filter non-ASCII runes out of user-supplied label sets before passing them on","Prefer the default 'ascii' preset unless a custom set is required"],"tags":["fzf","cli","validation","jump-mode","ascii"],"backgroundTag":null,"analyzedSha":"bd4efa277b49ef34ca4025bff9b1a288e1980eff","analyzedAt":"2026-08-15T06:11:46.983Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}