I just encountered the strangest behaviour in Emacs. I was editing a shell
C-x b to switch to another buffer, and Emacs suddenly froze with
the following message:
Pinging <hostname> (Commercial)...
<hostname was the hostname of a server used in the script.
I really do not like the idea of my text editor pinging random servers just because their name appears in a buffer, so I went to the bottom of it.
Since I had no idea what caused this behaviour, I simply ran grep for the
“Pinging” message in the Emacs source repository and found it in the
ffap-machine-p function. To find out how it was called, I enabled tracing,
making sure to print the current backtrace for each trace:
(trace-function 'ffap-machine-p nil 'backtrace)
This yielded the following (truncated) trace:
ffap-machine-p("pkg.exograd.com") ffap-machine-at-point() ffap-guesser() ffap-guess-file-name-at-point() run-hook-with-args-until-success(ffap-guess-file-name-at-point) helm-guess-filename-at-point() helm-fuzzy-highlight-matches(…) helm--collect-matches(…) helm-update(nil) helm-read-from-minibuffer(nil nil nil nil nil nil nil) helm-internal(…) apply(helm-internal (…)) helm((helm-source-buffers-list helm-source-buffer-not-found) …) apply(helm ((helm-source-buffers-list helm-source-buffer-not-found) …) helm(…) helm-buffers-list() funcall-interactively(helm-buffers-list) call-interactively(helm-buffers-list nil nil) command-execute(helm-buffers-list)
Apparently, Helm tries to guess if the cursor is pointing to a filename using
ffap (for “find file at point”) module. For some reason, it does not
just identify paths, but also URLs and machine names. And the default strategy
to check if a machine is “real” and “reachable” (as documented in
ffap-machine-p is to ping it.
This kind is insanity is really disappointing from Emacs: a text editor should absolutely not use the network in such a hidden way by default.
The behaviour of
ffap-machine-p depends on three settings:
ffap-machine-p-local: what to do if the hostname does not have a domain.
ffap-machine-p-known: what to do if the hostname has a known domain.
ffap-machine-p-unknown: what to do if the hostname has an unknown domain.
For all these variables, the value is either
accept, to indicate that the
hostname is a valid hostname,
reject to indicate it is not, or
check by sending a ping message.
The way to fix this mess is to accept local and known hostnames while rejecting unknown ones:
(setq ffap-machine-p-local 'accept) (setq ffap-machine-p-known 'accept) (setq ffap-machine-p-unknown 'reject)
If you are curious,
mail-extr-all-top-level-domains in the
mail-extr module to assess if a domain is “known”. This function will
identify most common TLDs, but has never been updated for modern TLDs.
Something to keep in mind if you want to use it.