remove empty string from completing alternatives
no need to convert a string list into alist as completing-read can deal with the former itself
replacing recursion with explicit loops to avoid hitting recursion depth limit in Emacs with many opened files