Skip to content

Windows: put per-user files under %APPDATA% - #39

Merged
andy5995 merged 1 commit into
masterfrom
win-appdata
Jul 27, 2026
Merged

Windows: put per-user files under %APPDATA%#39
andy5995 merged 1 commit into
masterfrom
win-appdata

Conversation

@andy5995

Copy link
Copy Markdown
Owner

Drafted by Claude (Opus 5), an LLM by Anthropic, at andy5995's
direction.

Windows sets no HOME, so homeInit() fell through to the directory the program was started from. Launched from the Start Menu shortcut that is the install directory under {autopf}, which is not writable without elevation, so the configuration file could not be written and startup reported "Error writing config file".

%APPDATA%\ncmail now comes between HOME and that fallback, and is created there rather than in verifyPaths(), which runs after the configuration file has already been written. getenv is used rather than SHGetFolderPath(CSIDL_APPDATA): the shell fills APPDATA from the same place for a program a user launched, while the API would need shell32 adding to the MSVC meson deps, Makefile.vc, and two Win32 targets nothing builds.

Only running ncmail from inside an MSYS2 shell is unaffected, because that shell sets HOME itself. That is not the same as the installer, which MSYS2 merely builds: the installed program launched from Explorer or the Start Menu has no HOME, which is the case reported.

Fixes #38

> Drafted by Claude (Opus 5), an LLM by Anthropic, at andy5995's
> direction.

Windows sets no HOME, so homeInit() fell through to the directory the program
was started from. Launched from the Start Menu shortcut that is the install
directory under {autopf}, which is not writable without elevation, so the
configuration file could not be written and startup reported "Error writing
config file".

%APPDATA%\ncmail now comes between HOME and that fallback, and is created
there rather than in verifyPaths(), which runs after the configuration file
has already been written. getenv is used rather than
SHGetFolderPath(CSIDL_APPDATA): the shell fills APPDATA from the same place
for a program a user launched, while the API would need shell32 adding to the
MSVC meson deps, Makefile.vc, and two Win32 targets nothing builds.

Only running ncmail from inside an MSYS2 shell is unaffected, because that
shell sets HOME itself. That is not the same as the installer, which MSYS2
merely builds: the installed program launched from Explorer or the Start Menu
has no HOME, which is the case reported.

Fixes #38

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@andy5995
andy5995 merged commit 21d4d1e into master Jul 27, 2026
12 checks passed
@andy5995
andy5995 deleted the win-appdata branch July 27, 2026 02:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Windows 64 issue refuses to load

1 participant