{"record":{"id":"dce8a42a4521c736","repo":"JanDeDobbeleer/oh-my-posh","slug":"unable-to-parse-charge-now","errorCode":null,"errorMessage":"unable to parse charge_now","messagePattern":"unable to parse charge_now","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/runtime/battery/battery_linux.go","lineNumber":114,"sourceCode":"}\n\nfunc getByPath(path string) (*battery, error) {\n\tb := &battery{}\n\tvar err error\n\n\tif b.Current, err = readFloat(path, \"energy_now\"); err == nil {\n\t\tif b.Full, err = readFloat(path, \"energy_full\"); err != nil {\n\t\t\treturn nil, errors.New(\"unable to parse energy_full\")\n\t\t}\n\t} else {\n\t\tcurrentDoesNotExist := os.IsNotExist(err)\n\t\tif b.Voltage, err = readFloat(path, \"voltage_now\"); err != nil {\n\t\t\treturn nil, errors.New(\"unable to parse voltage_now\")\n\t\t}\n\t\tb.Voltage /= 1000\n\t\tif currentDoesNotExist {\n\t\t\tif b.Current, err = readAmp(path, \"charge_now\", b.Voltage); err != nil {\n\t\t\t\treturn nil, errors.New(\"unable to parse charge_now\")\n\t\t\t}\n\t\t\tif b.Full, err = readAmp(path, \"charge_full\", b.Voltage); err != nil {\n\t\t\t\treturn nil, errors.New(\"unable to parse charge_full\")\n\t\t\t}\n\t\t} else {\n\t\t\tif b.Full, err = readFloat(path, \"energy_full\"); err != nil {\n\t\t\t\treturn nil, errors.New(\"unable to parse energy_full\")\n\t\t\t}\n\t\t}\n\t}\n\n\tstate, err := os.ReadFile(filepath.Join(path, \"status\"))\n\tif err != nil || len(state) == 0 {\n\t\treturn nil, errors.New(\"unable to parse or invalid status\")\n\t}\n\tif b.State, err = newState(string(state[:len(state)-1])); err != nil {\n\t\treturn nil, errors.New(\"unable to map to new state\")\n\t}","sourceCodeStart":96,"sourceCodeEnd":132,"githubUrl":"https://github.com/JanDeDobbeleer/oh-my-posh/blob/0976794618c5ed95de0985dded50de1b4dc914cb/src/runtime/battery/battery_linux.go#L96-L132","documentation":"When energy_now is unavailable, the Linux battery reader derives charge as charge_now (µAh) times voltage. If charge_now cannot be read or parsed as a float, getByPath fails with 'unable to parse charge_now'.","triggerScenarios":"battery.Get()/systemGetAll -> getByPath on a Linux battery where energy_now is absent but charge_now is missing, empty, or non-numeric.","commonSituations":"Hardware/drivers exposing energy_full/voltage_now but not charge_now; sysfs node truncated by a driver bug or kernel version change; partially exposed virtual battery in a VM.","solutions":["Verify the file: cat /sys/class/power_supply/BAT0/charge_now; it must contain an integer in µAh","If the driver exposes energy_* instead, ensure energy_now is readable so the charge path is never taken","Update the kernel/driver so the battery exposes a complete charge_* or energy_* attribute set","Exclude the broken power_supply node or treat the error as no-battery in the caller"],"exampleFix":"// before\n$ cat /sys/class/power_supply/BAT0/charge_now\ncat: /sys/class/power_supply/BAT0/charge_now: No such file or directory\n// after (complete node or working energy path)\n$ cat /sys/class/power_supply/BAT0/energy_now\n2940000","handlingStrategy":"fallback","validationCode":"test -s /sys/class/power_supply/BAT0/charge_now || echo \"charge_now missing - battery segment will fail\"","typeGuard":"func hasChargeNow(dir string) bool {\n  b, err := os.ReadFile(filepath.Join(dir, \"charge_now\"))\n  return err == nil && len(strings.TrimSpace(string(b))) > 0\n}","tryCatchPattern":"bat, err := battery.Get()\nif err != nil {\n  log.Printf(\"skipping battery segment: %v\", err)\n  return nil // render without battery\n}","preventionTips":["Prefer batteries exposing energy_* files so the charge_* path is never used","Check attribute completeness when debugging exotic hardware","Skip malformed power_supply nodes instead of failing the whole prompt"],"tags":["linux","sysfs","battery","parse-error"],"backgroundTag":"sysfs-battery-file-missing","analyzedSha":"0976794618c5ed95de0985dded50de1b4dc914cb","analyzedAt":"2026-08-31T23:41:19.708Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}