JanDeDobbeleer/oh-my-posh · error
Error, no formatter for type: %d
Error message
Error, no formatter for type: %d
What it means
WindowsRegistryKeyValue reads a value from the Windows registry and converts it to a WindowsRegistryValue. The value's binary type (valType) is inspected and dispatched to a formatter for REG_SZ, REG_EXPAND_SZ, REG_DWORD, REG_QWORD, or REG_BINARY. If the type is none of these (or the value is absent, giving valType 0), no formatter exists and this error is returned.
Source
Thrown at src/runtime/terminal_windows.go:203
switch valType {
case windows.REG_SZ, windows.REG_EXPAND_SZ:
value, _, _ := k.GetStringValue(regKey)
regValue = &WindowsRegistryValue{ValueType: STRING, String: value}
case windows.REG_DWORD:
value, _, _ := k.GetIntegerValue(regKey)
regValue = &WindowsRegistryValue{ValueType: DWORD, DWord: value, String: fmt.Sprintf("0x%08X", value)}
case windows.REG_QWORD:
value, _, _ := k.GetIntegerValue(regKey)
regValue = &WindowsRegistryValue{ValueType: QWORD, QWord: value, String: fmt.Sprintf("0x%016X", value)}
case windows.REG_BINARY:
value, _, _ := k.GetBinaryValue(regKey)
regValue = &WindowsRegistryValue{ValueType: BINARY, String: string(value)}
}
if regValue == nil {
errorLogMsg := fmt.Sprintf("Error, no formatter for type: %d", valType)
return nil, errors.New(errorLogMsg)
}
log.Debug(fmt.Sprintf("%s(%s): %s", regKey, regValue.ValueType, regValue.String))
return regValue, nil
}
func (term *Terminal) InWSLSharedDrive() bool {
return false
}
func (term *Terminal) ConvertToWindowsPath(input string) string {
return strings.ReplaceAll(input, `\`, "/")
}
func (term *Terminal) ConvertToLinuxPath(input string) string {
return input
}
View on GitHub (pinned to 0976794618)
Solutions
- Verify the value name and path are correct (a missing value yields valType 0): run `reg query <path> /v <name>` and confirm the type shown is REG_SZ, REG_EXPAND_SZ, REG_DWORD, REG_QWORD, or REG_BINARY.
- If the value is REG_MULTI_SZ or another unsupported type, read it via PowerShell instead (Get-ItemProperty) and feed the string into your config, or upvote/add a formatter case in terminal_windows.go.
- Use the debug log (`oh-my-posh debug`) to see which key/value produced the failure and confirm the exact registry type with regedit.
Example fix
// before (REG_MULTI_SZ value in theme config)
[[blocks.segments]]
type = "winreg"
properties = { registry_path = "HKLM:\\SOFTWARE\\Foo\\MultiValue" }
// after - point at a supported (REG_SZ) value or export it as a string
[[blocks.segments]]
type = "winreg"
properties = { registry_path = "HKLM:\\SOFTWARE\\Foo\\StringValue" } Defensive patterns
Strategy: validation
Validate before calling
// PowerShell: confirm the registry value type before pointing the segment at it
$v = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Foo'
(Get-Item 'HKLM:\SOFTWARE\Foo').GetValueKind('MyValue') # must be String, ExpandString, DWord, QWord or Binary Prevention
- Only reference registry values whose type is REG_SZ, REG_EXPAND_SZ, REG_DWORD, REG_QWORD or REG_BINARY
- Double-check the exact value name - a typo yields type 0 and this same error
- Prefer REG_SZ values; export REG_MULTI_SZ content to a string value if you need it
When it happens
Trigger: Calling env.WindowsRegistryKeyValue with a registry path whose value is one of the unsupported registry types (REG_MULTI_SZ, REG_NONE, etc.), or whose type resolves to 0 because the value name does not exist under the opened key.
Common situations: Pointing the segment/config at a REG_MULTI_SZ value (the switch has no case for it); a typo in the value name so GetValue returns type 0; reading a value created by newer Windows versions with exotic types.
Related errors
- unable to delete font file after registry key open error
- unable to open HKEY_CURRENT_USER
- unable to delete font file after registry key set error
- unable to set registry value: %s
- Error, malformed registry path: '%s'
AI-assisted analysis of JanDeDobbeleer/oh-my-posh@0976794618 (2026-08-31).
Data as JSON: /api/errors/571dc76e83c5c31e.
Report an issue: GitHub.