Execute ffap-file-at-point with the following buffer contents (| for cursor position): 7:| The result is "", which leads to ffap's default input being ~ (not ~/ as expected). Similarly, try ffap-file-at-point on: :6| This is due to ffap-file-at-point stripping off the colon and numbers, and sending "" to ffap-file-exists-string. (file-exists-p "") returns t, so ffap-file-at-point treats "" as an existent file. The following diff fixes this, but I'm not sure if it's the best approach. Perhaps ffap-file-at-point just checks that the argument to ffap-file-exists-string is non-empty each time it's called.