{"record":{"id":"f7080b5e38161e96","repo":"junegunn/fzf","slug":"list-border-cannot-be-line","errorCode":null,"errorMessage":"list border cannot be 'line'","messagePattern":"list border cannot be 'line'","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/options.go","lineNumber":3246,"sourceCode":"\t\t\topts.Margin = defaultMargin()\n\t\tcase \"--no-padding\":\n\t\t\topts.Padding = defaultMargin()\n\t\tcase \"--no-border\":\n\t\t\topts.BorderShape = tui.BorderNone\n\t\tcase \"--border\":\n\t\t\thasArg, arg := optionalNextString()\n\t\t\tif opts.BorderShape, err = parseBorder(arg, !hasArg); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase \"--list-border\":\n\t\t\thasArg, arg := optionalNextString()\n\t\t\tif opts.ListBorderShape, err = parseBorder(arg, !hasArg); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif opts.ListBorderShape == tui.BorderLine {\n\t\t\t\tif hasArg {\n\t\t\t\t\t// '--list-border line' is not allowed\n\t\t\t\t\treturn errors.New(\"list border cannot be 'line'\")\n\t\t\t\t}\n\t\t\t\t// This is when '--style full:line' is previously specified and\n\t\t\t\t// '--list-border' is specified without an argument.\n\t\t\t\topts.ListBorderShape = tui.BorderRounded\n\t\t\t}\n\t\tcase \"--no-list-border\":\n\t\t\topts.ListBorderShape = tui.BorderNone\n\t\tcase \"--no-list-label\":\n\t\t\topts.ListLabel.label = \"\"\n\t\tcase \"--list-label\":\n\t\t\topts.ListLabel.label, err = nextString(\"label required\")\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase \"--list-label-pos\":\n\t\t\tpos, err := nextString(\"label position required (positive or negative integer or 'center')\")\n\t\t\tif err != nil {\n\t\t\t\treturn err","sourceCodeStart":3228,"sourceCodeEnd":3264,"githubUrl":"https://github.com/junegunn/fzf/blob/bd4efa277b49ef34ca4025bff9b1a288e1980eff/src/options.go#L3228-L3264","documentation":"Thrown by the --list-border handler. A global '--border line' is allowed, but the list pane cannot use the single-line border because the list is a scrollable region — fzf forces it to a box shape. Explicitly passing '--list-border line' is rejected; if 'line' was inherited implicitly from an earlier '--style full:line' and --list-border is given with no argument, it is silently converted to rounded instead.","triggerScenarios":"`--list-border line` (explicit argument). Not thrown for `--list-border` with no argument after '--style full:line' (converted to rounded) or for other shapes like rounded/square/bold/block.","commonSituations":"Migrating a config that used '--border line' to per-pane borders and reusing 'line' for each pane; scripting that copies one border value into --border/--input-border/--list-border flags uniformly.","solutions":["Use a box shape for the list: `--list-border rounded` (or square/bold/block)","Keep 'line' only on the global --border","Omit --list-border and rely on '--style full:line' conversion to rounded"],"exampleFix":"# before\nfzf --style full:line --list-border line\n# after\nfzf --style full:line --list-border rounded","handlingStrategy":"type-guard","validationCode":"# bash: map line->rounded for list panes\nlist_border=\"${LIST_BORDER:-rounded}\"\n[ \"$list_border\" = line ] && list_border=rounded\nfzf --list-border \"$list_border\"","typeGuard":"list_border_ok() { case \"$1\" in rounded|square|bold|block|thinblock|double|none|sharp) return 0;; *) return 1;; esac; }","tryCatchPattern":null,"preventionTips":["Never forward a shared border value into --list-border without excluding 'line'","Reserve 'line' for the global --border option only"],"tags":["fzf","go","cli","ui","border","validation"],"backgroundTag":null,"analyzedSha":"bd4efa277b49ef34ca4025bff9b1a288e1980eff","analyzedAt":"2026-08-15T06:11:46.983Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}