Thierry Volpiatto edited this page May 30, 2018 · 38 revisions

Frequently Asked Questions (FAQ).

Errors with helm-adaptive-mode

Probably your `helm-adaptive-history-file` is corrupted reset it with M-x helm-reset-adaptive-history.

See Issue #1764 for more infos.

Errors when running make

When installing Helm from sources you may have such error when compiling with make:

helm.el:32:1:Error: Cannot open load file: aucun fichier ou dossier de ce type, async

If you have such error, that’s mean emacs-async package is not installed, or it is installed but not in a standard place and helm can’t find it, so you have to specify where to find it with EMACSLOADPATH environment variable. Specify it on the command line like this:

EMACSLOADPATH="/path/to/emacs-async:" make

Or even better install emacs-async from sources with make and make install or from (M)ELPA.

See Installation for more details.

Where is Helm documentation?

Hit “C-h m” within a Helm session, or use the “helm-documentation” command.

A tip to hit C-h m within a Helm session can be found on the mode line. All help pages are grouped in a Org file generated by the command helm-documentation.

Why does MELPA update give errors?

You should not encounter this problem anymore.

Helm, when installed from (M)ELPA, specifies a dependency on emacs-async, which should resolve this problem. If it does happen, however, do the following:

  1. Uninstall helm and async with package-list-packages.
  2. Close Emacs
  3. Start emacs -Q.
  4. Reinstall helm from package-list-packages.
  5. Restart Emacs

If problem persists, report an issue.


  • After upgrading (helm or whatever), you will have to restart emacs (expect problems otherwise).
  • emacs-async is available as async in MELPA.
  • Async compilation of packages can be disabled per package or globally in async-bytecomp.el. If you do so, don’t complain if you have errors after upgrading Helm or Helm modules.

When using a prefix argument with helm-M-x?

Use prefix args after starting helm-M-x, not before.

Read the Helm documentation (helm-documentation, bound by default to <helm-prefix> h h).

Also see Wiki page for helm-M-x.

Update: After Helm v1.9.8, using a prefix argument before helm-M-x is possible. See

How do I get Helm and Popwin to play nice?

See the wiki page on working with Popwin.

What happened to the grep and multi-occur commands?

They have been removed due to redundancy.

The grep (helm-do-grep, helm-do-zgrep, helm-do-pdfgrep) and multi-occur (helm-multi-occur) commands got removed because they were unuseful as you can use them from helm-find-files and file-related commands (e.g. helm-locate). So now if you want to run helm grep, start helm-find-files, choose you files and hit C-s. The only difference now is that you hit C-s instead of RET. Not the end of the world!

Why can’t I exit completing-read with an empty string?

Hit C-RET or M-RET.

This can be seen in the mode line.

Why am I getting warnings when compiling with emacs-24.3.1?

Don’t be afraid, just ignore them ;-).

Helm has no warnings when compiling with emacs-24.4 or later. When compiling with 24.3, you may have many warnings (due to bugs in Emacs itself related to lexical binding and EIEIO).

Why is function-put void?

Reinstall Helm.

This is due to a bad installation of Helm (see here).

Why is a customizable Helm source nil?

If the source is nil, it is probably set up when command starts, and may be defined using helm-make-source with a specialized class.

If the source is defined with a specialized class (not a generic class like helm-source-sync, helm-source-async, helm-source-in-buffer, helm-source-dummy, etc.), you can add a new defmethod in your init file like:

(defmethod helm-setup-user-source ((source helm-source-ffiles))
   "Byte compile file(s) async"


(defmethod helm-setup-user-source ((source helm-source-multi-occur))
  (setf (slot-value source 'follow) 1))

You can also set up the source yourself:

(with-eval-after-load "helm-regexp.el"
  (setq helm-source-occur (helm-make-source "Occur" 'helm-source-multi-occur
                            :follow 1))
  (setq helm-source-moccur (helm-make-source "Moccur" 'helm-source-multi-occur
                             :follow 1)))

NOTE: In these examples the follow slot is used, but note that starting from helm-2.1.0 to setup follow persistently, the only thing you have to do is

(setq helm-follow-mode-persistent t)

and when you hit C-c C-f in any source helm-follow-mode will be turned on now and for next emacs sessions until you hit again C-c C-f.


  • Don’t define a new defmethod helm-setup-user-source with generic classes as specified above.

Why did the debugger enter Lisp error when using session.el?

You may endup with Lisp error (void-variable \.\.\.) May be due to using session.el.

See here for how to fix this.

Why helm-mode is so long to startup?

See Issue 1000.

helm-mode conflict with ido-everywhere

Don’t use ido-everywhere but only helm-mode and customize which commands you want to use ido with variable helm-completing-read-handlers-alist See Here

Why after enabling helm-mode M-x and C-x C-f are not helmized?

Commands execute-extended-command and find-file bound respectively to M-x and C-x C-f have been disabled to force people using the real things that are helm-M-x and helm-find-files, the only thing you have to do to use these commands is to bound them respectively to M-x and C-x C-f. If you really want to have back the helmized commands (less powerfull and slower for M-x), remove them from helm-completing-read-handlers-alist.

Can you modify the emacs vanilla helmized command to behave differently?

No, helm uses a generic function for helmizing emacs vanilla commands and should behave exactly like them except for the completion model. When available use instead its native helm counterpart.

Most actions are customizable but can I add actions depending on context?

Yes if source is defined at run time and with its own class, see here and My config for examples.

Otherwise when writing your own sources you can use the :action-transformer slot to define such actions.

What are all these helm buffers around?

Each helm session create a buffer which stays around for further use when you want to resume previous session, so it is important to not kill these buffers if you want to be able to resume your last helm session later.

These buffers are unuseful without helm activated so just ignore them.

Yes but what are these other helm buffers starting with a space?

Generally helm store its candidates in a list, it uses in this case sources build with the helm-source-sync class, but when it is needed it uses sources build with helm-source-in-buffer, in this case raw candidates are stored in a buffer used only for fast access when matching, but not for displaying candidates (helm buffer is created for this purpose).

So you will see two buffers for this kind of sources, one helm-buffer used for displaying candidate by helm session and one used for parsing candidates.

Same as with helm buffers, the candidate buffers are hidden when you display your buffer list with helm-buffers-list or helm-mini.

Same as with helm buffers, these buffers are unuseful without helm activated so just ignore them.

Why next-error and previous-error not implemented in helm?

Most of the emacs functions based on cycling make the user blind and are considered deprecated and inefficient from the helm side except when the amount of candidate is very small, say five candidates maximum. Using next-error in a grep or (m)occur buffer would defeat the purpose of helm and such a workflow would be particularly inefficient compared to a helm-resume session.

Org tag completion is not working

Disable Org fast tag selection, see issue 1890.

How do I save my variables persistently

Use psession

Slow frame and window popup in emacs-26

This is an emacs bug which have been fixed in emacs-27 (development version), to fix it in emacs-26, use (setq x-wait-for-event-timeout nil) see Issue #1976. There is no slowdown in emacs-25

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.