I think we should remove that, and leave behind an alias that uses
utf-8-hfs, which is provided by Emacs.  There's no reason to maintain
2 identical definitions.

Sounds reasonable. The implementation is vastly different, so getting rid of one is definitively an improvement.


When you set file-name-coding-system to nil, Emacs uses
default-file-name-system, which is utf-8, so it doesn't
compose/decompose characters, and that's why you see what you see.
IOW, using nil is a step backward.

I couldn't agree more!


What does this return:

  M-: (file-name-all-completion "åäö" "/that/empty/directory/") RET

It returns nil.


Also, what is your value of completion-ignore-case?

It's nil.

Just out of curiosity -- how does `file-name-all-completions' work? Is the FILE argument encoded to decomposed form, is the file list converted to composed form, or is this handled by the comparison functions?

    -- Anders