A Package in a league of its own: Helm (original) (raw)

Table of Contents

Author:

Homepage: GitHub

Features:

Helm is an incremental completion and selection narrowing framework for Emacs. It will help steer you in the right direction when you're looking for stuff in Emacs (like buffers, files, etc).

Helm is a fork of anything.el (originally written by Tamas Patrovic) and can be considered to be its successor. Helm sets out to clean up the legacy code in anything.el and provide a cleaner, leaner and more modular tool, that's not tied in the trap of backward compatibility.

Installation:

You can use Emacs Prelude or Spacemacs, which are already setup properly. You can skip all configuration code in this guide. But note that by default, Emacs Prelude does not enable Helm. Please follow these instructions to enable Helm.Spacemacs enables Helm by default.

If you are a Spacemacs user, you don't have to do anything. If you have your own Emacs configuration, run M-x list-packages and select the helmpackage, then install it. After finish installing, add this configuration to activate the package:

Minimal config:

(require 'helm-config) (helm-mode 1)

Extended config:

(require 'helm) (require 'helm-config)

;; The default "C-x c" is quite close to "C-x C-c", which quits Emacs. ;; Changed to "C-c h". Note: We must set "C-c h" globally, because we ;; cannot change helm-command-prefix-key' once helm-config' is loaded. (global-set-key (kbd "C-c h") 'helm-command-prefix) (global-unset-key (kbd "C-x c"))

(define-key helm-map (kbd "") 'helm-execute-persistent-action) ; rebind tab to run persistent action (define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB work in terminal (define-key helm-map (kbd "C-z") 'helm-select-action) ; list actions using C-z

(when (executable-find "curl") (setq helm-google-suggest-use-curl-p t))

(setq helm-split-window-in-side-p t ; open helm buffer inside current window, not occupy whole other window helm-move-to-line-cycle-in-source t ; move to end or beginning of source when reaching top or bottom of source. helm-ff-search-library-in-sexp t ; search for library in require' and declare-function' sexp. helm-scroll-amount 8 ; scroll 8 lines other window using M-/M- helm-ff-file-name-history-use-recentf t helm-echo-input-in-header-line t)

(defun spacemacs//helm-hide-minibuffer-maybe () "Hide minibuffer in Helm session if we use the header line as input field." (when (with-helm-buffer helm-echo-input-in-header-line) (let ((ov (make-overlay (point-min) (point-max) nil nil t))) (overlay-put ov 'window (selected-window)) (overlay-put ov 'face (let ((bg-color (face-background 'default nil))) `(:background ,bg-color :foreground ,bg-color))) (setq-local cursor-type nil))))

(add-hook 'helm-minibuffer-set-up-hook 'spacemacs//helm-hide-minibuffer-maybe)

(setq helm-autoresize-max-height 0) (setq helm-autoresize-min-height 20) (helm-autoresize-mode 1)

(helm-mode 1)

Usage:

After using Helm, you are going to have a big change in the way you use Emacs. After you get used to the Helm way, you won't want to leave it. However, if you don't like Helm, you can still use Ido, which is introduced in a later section. Let's learn how to use helm by playing with it.

Completion with Helm is very different from the usual Emacs completion:

You can practice the above commands with C-x b, which runshelm-mini. If you mark more than one buffer, RET opens the selected buffers.

IMPORTANT: Please remember that, when you use Helm, you never TAB to complete prefixes like vanilla or other packages like Ido and its related packages. In Helm, when you type something, candidates get updated automatically. In vanilla Emacs, you have to TAB to get a list of candidates. This is a great feature from Helm, not a lack of a feature. You have to forget the habit of TAB'ing to get candidates. If you want quick completion of search patterns in the Helm prompt, you always have hippie-expand to replace the TAB behavior, as introduced at the beginning of this section. This is the biggest confusion for new people switching to Helm. When you are used to Helm, you will love it.

When you execute a Helm command, you enter a Helm session. A Helm session is a dedicated state to working with Helm features; while in a Helm session, a dedicated Helm buffer is always opened. When you quit a Helm session, a Helm buffer is closed. In Helm, you basically need to remember these 3 commands:

However, for convenience, let's TAB with C-z in the above settings, so we can use TAB more comfortably, because you actually use helm-execute-persistent-action more thanhelm-select-action by adding the code snippet below:

(define-key helm-map (kbd "") 'helm-execute-persistent-action) ; rebind tab to do persistent action (define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) ; make TAB works in terminal (define-key helm-map (kbd "C-z") 'helm-select-action) ; list actions using C-z

In a Helm session, if you need help, use C-c ?, or refer to this manual again. The commands in the key bindings above are good enough to help you use Helm productively.

Why is Helm powerful?

Operate on text at point:

If you are already in a Helm session, you can still get input from the current editing buffer by the following key bindings:

If helm-mode is activated, help commands also automatically recognize symbols at point if such symbols exist in Emacs, and use the Helm interface for interactive selection. For example:

All of those commands automatically make use of Helm.

Autoresize

Helm can resize its buffer automatically to fit the number of candidates if you enable helm-autoresize-mode:

You can customize the minimum and maximum height that Helm can resize with these two variable:

By default, helm-autoresize-max-height is set to 40, meaning the Helm candidate buffer has a maximum height of 40% of the current frame height. Similarly, helm-autoresize-min-height specifies a minimum height for the Helm candidate buffer as a percentage of the current frame height.

If you don't want the Helm window to be resized, you can sethelm-autoresize-max-height equal to helm-autoresize-min-height.

If you use golden-ratio, you have to disable its interference with the Helm window (Note: If you are using Spacemacs, you don't have to add this bit of configuration):

(defun pl/helm-alive-p () (if (boundp 'helm-alive-p) (symbol-value 'helm-alive-p)))

(add-to-list 'golden-ratio-inhibit-functions 'pl/helm-alive-p)

In DEMO 1, helm-autoresize-max-height is not equal tohelm-autoresize-min-height (begins when START DEMO appears in minibuffer):

helm-autoresize-mode.gif

In DEMO 2, helm-autoresize-max-height is equal tohelm-autoresize-min-height (begins when START DEMO appears in minibuffer):

helm-autoresize-fix.gif

Command: helm-M-x

Key binding:

No default key binding. We should give it one:

(global-set-key (kbd "M-x") 'helm-M-x)

Description:

M-x and see the difference. You will see a buffer that lists commands in Emacs. Some of you may not like it because it seems overkill at first. However, even if you really don't like, please bear with me until the end.

Now, type li pa; that's right li , a space and pa. You will see,list-packages is at the top. Surprise! Let's try another input. Now, type pa ^li, and you will receive list-package as the first entry.

helm-M-x is also better then the default M-x, because it provides key bindings right next to the commands, and TAB provides you the built-in documentation of that command in another buffer.

Starting from 1.6.5, helm-M-x can fuzzy match candidates, but this is not enabled by default. To enable fuzzy matching, add the following setting:

(setq helm-M-x-fuzzy-match t) ;; optional fuzzy matching for helm-M-x

NOTE: You have to bind helm-M-x to M-x manually. Otherwise, you still get Helm completion, but using the vanilla M-x that does not provides the above features like showing key bindings and TAB to open built-in documentation. Another important thing is, you have to pass the prefix argument AFTER you run helm-M-x, because your prefix argument will be displayed in the modeline when in helm-M-x buffer. Passing prefix argument BEFORE helm-M-x has no effect.

Demo:

helm-m-x.gif

Command: helm-show-kill-ring

Key binding:

No default key binding. We should give it one:

(global-set-key (kbd "M-y") 'helm-show-kill-ring)

Description:

Do you remember the binding C-y cycle the kill ring? However, working with default kill ring is painful because you have a burden to remember an invisible thing, that is the kill ring, at which position you kill what. To view the kill ring, you have to C-h v and type kill-ringto see content of the kill ring, and it is not pretty.

helm-show-kill-ring solves this problem: Helm shows the kill ring in a readable format and allows you to narrow down by entering sub-strings of candidates. You are freed from the cognitive burden of the default M-y.

If you follow my Helm configuration, M-y binds tohelm-show-kill-ring. Try it and see! Much easier than the default.

Demo:

helm-kill-ring in action (the demo starts when you see START in the minibuffer):

helm-kill-ring.gif

Command: helm-mini

Key binding:

No default key binding. We should give it one:

(global-set-key (kbd "C-x b") 'helm-mini)

To enable fuzzy matching, add the following settings:

(setq helm-buffers-fuzzy-matching t helm-recentf-fuzzy-match t)

helm-mini is comprised of multiple sources:

You can move back and forth between the groups by using and**** arrow keys. Or you can just scroll down/up with C-v andM-v.

You can filter out buffers by major mode using the pattern*<major-mode>. For example, *dired narrows to only Dired buffers. You can also filter out buffers that belong to a major mode by adding ! to the pattern. For example, *!dired select all buffers that are not in Dired mode.

You can also select buffers in a specific directory by using the pattern/directory. For example, /.emacs.d/ narrows to buffers that are only inside .emacs.d. Add ! before the pattern for reverse version. For example, !/.emacs.d/ narrows to buffers not in.emacs.d.

You can even use helm-mini to narrow to buffers that contain a regexp in their contents, by prepending @ to the search pattern. For example, you can select buffers that only contain the string "test": @test. If you want to see the locations of the string in the buffers, mark all the buffer with M-a and C-s while inhelm-mini session, to switch to helm-moccur. You can mark buffers to search with C-SPC. When you switch to helm-moccur, matches that are in selected buffers are displayed. You can also perform occuronly on the current buffer with prefix argument: C-u C-s; this is useful when you already marked buffers but don't want to unmark just to view only in a buffer. However, in general, you won't need C-u C-s.

Meaning of colors and prefixes for buffers:

Some Emacs themes change the colors. You should check the corresponding color in your color themes.

Example:

Demo:

helm-mini.gif

The demo starts when you see Eval: START in the minibuffer. Note that the demo use helm-buffers-list, which is almost the same ashelm-mini. The only difference is that helm-buffers-list usesido-virtual-buffers for listing recently used files, whilehelm-mini uses recentf.

The demo above is part of Helm's homepage now.

Similar Commands:

Command: helm-find-files

Key binding:

C-x C-f or C-x C-f (prefix is C-x c by default, orC-c h if set). This is a rather long key sequence, and *=helm-find-files= deserves a better binding:

(global-set-key (kbd "C-x C-f") 'helm-find-files)

Description:

helm-find-files is file navigation on steroids:

You can perform more actions on the highlighted entry by runninghelm-select-action, which is bound to TAB by default and C-z in my configuration. The guide for each action in the action menu is written in the guide Exploring large projects with Projectile and Helm Projectile. It is written there because you will end up usingProjectile (a project manage for Emacs, introduced in later section) to navigate to files much more efficiently, anywhere and anytime you need.

Demo:

I only needed to type into the prompt a few character to get the candidate I wanted among many candidates. The demo starts when you seeSTART in the minibuffer:

helm-find-files.gif

Command: helm-ff-do-grep, live grep in Helm

Key binding:

From within a helm-find-files session, you can invokehelm-ff-run-grep with C-s to search a file/directory on highlighted entry in the Helm buffer. With prefix argument C-u, recursively greps a selected directory.

You can also save the result into a Grep buffer using the actionSave results in Grep buffer. Note that this Grep buffer is created by Helm, not the default Emacs grep buffer. It has minimal key bindings. In *hgrep* buffer, press C-h m to view all key bindings.

Description:

Every time you type a character, helm updates grep result immediately. You can use ack-grep to replace grep with this configuration:

(when (executable-find "ack-grep") (setq helm-grep-default-command "ack-grep -Hn --no-group --no-color %e %p %f" helm-grep-default-recurse-command "ack-grep -H --no-group --no-color %e %p %f"))

Demo:

live_grep.gif

Command: helm-semantic-or-imenu

Key binding:

i (prefix is C-x c by default, or C-c h if set).

Description:

The Imenu facility offers a way to find the major definitions, such as function definitions or variable definitions in a file by name. You can run imenu command individually.

Semantic is a package that provides language-aware editing commands based on 'source-code parsers'. When enabled, each file you visit is automatically parsed. Semantic provides execellent support for C/C++. To enable Semantic mode, execute(semantic-mode 1).

Helm offers an interface to both Semantic and Imenu at the same time: If `semantic-mode' is active in the current buffer, then use semantic for generating tags, otherwise fall back to imenu. If point is on a symbol, helm feeds the symbol into input prompt by default.

helm-semantic-or-imenu works with many modes like C/C++, Java, Python, Ruby, Emacs Lisp and Lisp in general, shell script, Org-mode…

To enable fuzzy matching for both Semantic and Imenu listing, add the following setting:

(setq helm-semantic-fuzzy-match t helm-imenu-fuzzy-match t)

Usage:

Helm gives you finer control: you can move between functions usingbeginning-of-defun (bound to C-M-a) and end-of-defun (bound toC-M-e), but it will also move the point and scroll your buffer. Usinghelm-semantic-or-imenu, you have similar behavior and you have more choices: either C-g to return back to the position where you originally invoked helm-semantic-or-imenu because you only needed to look up a function interface (e.g., to see what kinds of parameters a function accepts), or RET to jump to the tag location. Currently, only the Semantic part of helm-semantic-or-imenu is supported. If a buffer only has imenu support from the command, you won't be able to use this feature.

helm-semantic-or-imenu provides these types of Semantic tags:

If you want to filter by tag type, enter caret character ^(beginning of line in regex) and follow the first character of that type. For example, to see only function tags, type ^f in the prompt.

Demo 1:

DEMO (begin when START DEMO is in minibuffer):

Demo 2:

Here is helm-semantic-or-imenu in action, please notice the "pattern: " prompt in the minibuffer:

Press RET to visit the the candidate location. The above examples are just demonstrations. You can narrow to anything you want with search patterns separated by spaces, e.g., you can use two patterns, "func" and a part of a function name, and Helm can narrow to it fine.

In the demo, you see things like class u16 and class u32; that is because u16 and u32 are defined by typedef.

Command: helm-man-woman

Key binding:

m (prefix is C-x c by default, or C-c h if set).

Description:

With helm-man-woman, you can quickly jump to any man entry using the Helm interface, either by typing in Helm prompt or if the point is on a symbol, opening the man page at point. To enable man page at point, add the following code:

(add-to-list 'helm-sources-using-default-as-input 'helm-source-man-pages)

Demo:

helm-man-woman.gif

Command: helm-find

Key binding:

/ (prefix is C-x c by default, or C-c h if set).

Description:

Normally, you use find command with arguments in terminal, then press RET and wait for a big list of result, and if the result is not as expected, repeat the whole thing. You can shorten this process by interactively get results from Unix find for every character you enter into Helm prompt.

You can separate search patterns by spaces. However, since Helm is using Unix find utility, you have to enter search patterns according to the search string of find; use helm-man-woman to read the findman page.

By default, invoking helm-find only searches current directory. With prefix argument C-u (i.e. C-u C-c h /), a prompt asks for a directory to find. helm-find can be invoked within helm-find-filessession, by using C-c /. To open more than one file, mark individual candidates with C-SPC or mark all with M-a, then RET. You can switch to helm-find-files with C-x C-f.

If you use helm-find on a large directory and feel live updating is too sluggish, you can always suspend the live updating with C-! and resume the live updating with C-! later.

Demo:

helm-find.gif

Command: helm-locate

Key binding:

l (prefix is C-x c by default, or C-c h if set).

Description:

Similar to helm-find, but uses the locate command and accepts search patterns according to locate input. Use helm-man-woman to readlocate man page. In Mac OS, mdfind is used instead. On Windows, you need to install Everything search engine; once you installed Everything and expose es.exe to Emacs via the PATH environment variable, helm-locate will use Everything and work out of the box without any configuration.

To use a local database, execute helm-locate with prefix argumentC-u.

If you use helm-locate on a large hard drive and feel live updating is too sluggish, you can always suspend the live updating with C-! and resume the live updating with C-! later.

To enable fuzzy matching in helm-locate, add this setting:

(setq helm-locate-fuzzy-match t)

Note that it is currently working with locate command in Linux. If you are on other platform, don't set it or you won't have any result.

Demo:

helm-locate.gif

Command: helm-occur

Key binding:

M-s o (prefix is C-x c by default, or C-c h if set). Since this is a rather long binding, we should bind a more convenient key sequence:

(global-set-key (kbd "C-c h o") 'helm-occur)

Description:

Similar to occur, but using Helm interface. As you type, matching lines are updated immediately. This is convenient when you want to have a list of matches in the current buffer to jump back and forth. TAB to temporarily move the point to the location of the currently highlighted match. C-g cancels the current Helm session and returns to the original location where helm-occur was invoked. RET on a match jumps to that match.

Demo:

You can see that candidates keep getting updated when I type. The demo starts when you see START in the minibuffer.

helm-occur.gif

Command: helm-apropos

Key binding:

a (prefix is C-x c by default, or C-c h if set).

Description:

Pre-configured helm to describe commands, functions, variables and faces - all in one command!. It is similar to C-h a which runsapropos-command, but interactive includes more than just commands.helm-apropos combines 5 sources:

To enable fuzzy matching, add this setting:

(setq helm-apropos-fuzzy-match t)

Command: helm-info-*

Key binding:

h (prefix is C-x c by default, or C-c h if set); , by default, is one of g, i or r:

Key Binding
h g Command: helm-info-gnus
h i Command: helm-info-at-point
h r Command: helm-info-emacs

Description:

The prefix for info commands is <prefix> h. You can think of has stands for help and is one of the info topic to make it easier to remember.

helm offers a wide ranges of info commands for various topics. M-x helm info to see these commands, i.e. helm-info-as,helm-info-gdb… You can search for info nodes easily with the Helm interface and press TAB on an entry to view. M- moves to the next page, and M- moves to the previous page in the other buffer.

You can have more helm-info- commands, such as:

….

Use M-x helm-info to see the list of helm-info- commands using the default info prefix: <prefix> h or key bindings of your choice.

Command: helm-lisp-completion-at-point

Key binding:

(prefix is C-x c by default, or C-c h if set).

Description:

If you work with Emacs Lisp, this command provides a list of available loaded functions in Emacs. To get a list of completions, you first have to write a prefix, even just one character. Then execute the command and get a list of completion candidates. To enable fuzzy matching, add this setting:

(setq helm-lisp-fuzzy-completion t)

Command: helm-resume

Key binding:

b (prefix is C-x c by default, or C-c h if set).

Description:

This command allows you to resume the previous Helm session, along with your previous patterns in the prompt. For example, if your last helm session was helm-ff-run-grep and you entered patterns in Helm prompt, helm-resume resumes that session along with your previous input.

With prefix argument, helm-resume allows you to choose among all existing Helm buffers. helm-mini or helm-buffer-list does not show existing Helm buffers; they ignore it by default; but if you run ibuffer, you will see a list of Helm buffers visible there. Don't kill them or you won't be able to resume.

This is really convenient when you have complex input ,and preparation steps. For example, if you have multiple regexp patterns in your previous Helm session, then you don't have to type it again. Or in your previous Helm session, you have to travel to a deep directory, and helm-resume helps you to reuse your previous session without going through all the troubles again.

Command: helm-all-mark-rings

Key binding:

C-c SPC (prefix is C-x c by default, or C-c h if set). This is a rather long key sequence, this command deserves a better binding, for example:

(global-set-key (kbd "C-h SPC") 'helm-all-mark-rings)

Description:

One handy command. It allows you to view the content of the both the local and global mark rings in a friendly interface, so you can always jump back to where you were. Without this command, if you want to view the mark rings, you have to run M-: and enter mark-ring orglobal-mark-ring to view their contents. And even so, Emacs only displays the bare content of the mark-ring and global-mark-ringlists, which is the line number and its buffer like this:

(#<marker at 23614 in helm.org> #<marker at 2343 in setup-helm.el> #<marker at 4280 in helm.org> #<marker in no buffer> #<marker at 1271 in helm.org> #<marker at 643 in emacs-tutor.org> #<marker in no buffer> #<marker at 1 in setup-applications.el> #<marker at 1 in emacs-tutor3.org>)

With helm-all-mark-rings, you have this nice interface with line content and syntax highlighting:

helm-all-mark-rings.gif

Command: helm-regexp

Key binding: r (prefix is C-x c by default, or C-c h if set).

Description:

Pre-configured helm to build regexps. This commands is useful when you want to test out a regexp interactively. The following actions are available with C-z:

Key Action
[f1] Kill regexp as sexp
Saves the regexp as a string in kill-ring
[f2] Query Replace Regexp
Invoke query-replace with current regexp to be replaced
[f3] Kill regexp
Saves the regexp as is in the current Helm prompt

Demo:

helm-regexp.gif

Command: helm-register

Key binding:

C-x r i (prefix is C-x c by default, or C-c h if set). Let's bind it to something else:

(global-set-key (kbd "C-c h x") 'helm-register)

Pre-configured for viewing Emacs registers. By simply executinghelm-register, you can view what is in registers. RET or TABinserts content of selected register.

Key Action
[f1] Insert Register
Insert register content into buffer
[f2] Append Region to Register
Append an active region to current content
in selected register
[f3] Prepend Region to Register
Prepend an active region to current content
in selected register

Demo:

helm-registers.gif

Command: helm-top

Key binding:

t (prefix is C-x c by default, or C-c h if set).

Description:

This command provides a Helm interface for the top program. You can interact with each process with the following actions:

Key Binding
[f1] kill (SIGTERM)
[f2] kill (SIGKILL)
[f3] kill (SIGINT)
[f4] kill (Choose signal)

helm-top specific commands:

Key Binding
C-c C-u Refresh helm-top
M-C Sort by shell commands
M-P Sort by CPU usage
M-U Sort by user
M-M Sort by memory

user and shell commands are sorted alphabetically.

Demo:

helm-top.gif

Command: helm-surfraw

Key binding:

s (prefix is C-x c by default, or C-c h if set).

Description:

surfraw provides a fast UNIX command line interface to a variety of popular WWW search engines and other artifacts of power. It reclaims google, altavista, dejanews, freshmeat, research index, slashdot…

helm-surfraw provides a Helm interface to the surfraw program that is easy to use. All you have to do is enter a search term, and then Helm provides a number of services, such as Google, Stackoverflow… to use.

Demo:

helm-surfraw.gif

Command: helm-google-suggest

Key binding:

C-c g (prefix is C-x c by default, or C-c h if set). Let's bind it to something else:

(global-set-key (kbd "C-c h g") 'helm-google-suggest)

Description:

This command allows you to interactively enter search terms and get results from Google in a Helm buffer. Then, you can open one of the candidates in other services, such as Google, Wikipedia, Youtube, Imbd, Google Maps, Google News. If you are on Windows, don't type too fast or, you will have an error and you have to abandon this Helm session.

Demo:

helm-google-suggest.gif

Command: helm-color

Key binding:

c (prefix is C-x c by default, or C-c h if set).

Description:

If you want to quickly view and copy hexadecimal values of colors,helm-color provides such a feature. But, helm-color is beyond a mere color picker. The real usage for helm-color is for face customization: the command list ALL available faces, with a preview of each face in the same row. This makes theme customization really quick because you can quickly view a face with its color. Because of the way Helm works, you can look at a group of faces together to have a global view of whether or not the colors work well with each other.

helm-color contains two groups, with actions in each:

Key Action
[f1] or C-c N Copy Name
Copy color name into kill-ring
[f2] or C-c R Copy RGB
Copy hex value into kill-ring
[f3] or C-c n Insert Name
Insert color name into current buffer
[f4] or C-c r Insert RGB
Insert hex value into current buffer
Key Action
[f1] Customize
Open Customization window
[f2] Copy Name
Copy face name

Demo:

helm-color.gif

Command: helm-eval-expression-with-eldoc

Key binding:

C-: (prefix is C-x c by default, or C-c h if set). C-: is a bit difficult to press, it would be better with:

(global-set-key (kbd "C-c h M-:") 'helm-eval-expression-with-eldoc)

Description:

This command allows you to enter Emacs Lisp expressions and get instant results in a Helm buffer for every character you type. The changed key binding above makes it easier to remember, since the stock eval-expression binds to M-:. So, from now on, to eval expression without live update, use M-:, and with live update, useC-c h M-:. This command is useful when you want to try out a command with various inputs, and want to see the results as fast as possible.

Demo:

helm-eval-expression.gif

Command: helm-calcul-expression

Key binding:

C-, (prefix is C-x c by default, or C-c h if set).

Description:

This commands provides a Helm interface for the calc command. What iscalc? According to Calc Manual:

Calc is an advanced calculator and mathematical tool that runs as part of the GNU Emacs environment. Very roughly based on the HP-28/48 series of calculators, its many features include:

You can enter valid calc mathematic expressions such as +, -,*, /, sin, cos, tan, sqrt…. To make the most out of this command, obviously you should carefully study calc itself by reading the Calc Manual.

Demo:

helm-calc.gif

Command: helm-eshell-history

Key binding:

No key binding. Let's bind it to a key to be used in Eshell:

(require 'helm-eshell)

(add-hook 'eshell-mode-hook #'(lambda () (define-key eshell-mode-map (kbd "C-c C-l") 'helm-eshell-history)))

Description:

If you usually re-execute an old shell command in Eshell with M-r, then helm-eshell-history provides an easy and efficient way to work with command history. Using stock M-r, you have to actively remember past commands you worked with; otherwise Eshell cannot find the command. If you forget, you will have to type in the command historyto refresh your memory. helm-eshell-history combines the two: you can interactively use a regexp to select past commands and get live feedback with a list of commands that satisfy the search. Now you don't have to remember which commands exist. Let Helm handle that problem for you.

Demo:

helm-eshell-history.gif

Command: helm-comint-input-ring

Similar to helm-eshell-history, but used for M-x shell.

(define-key shell-mode-map (kbd "C-c C-l") 'helm-comint-input-ring)

Command: helm-mini-buffer-history

Do you ever feel uneasy operating on the minibuffer history when it's getting large (say, hundreds of history items)? If so, Helm can help you easily manage a large number of items in the history list with ease using the Helm interface.

(define-key minibuffer-local-map (kbd "C-c C-l") 'helm-minibuffer-history)

Package: helm-projectile

Author: Bozhidar Batsov, bozhidar@batsov.com

Homepage: GitHub

Features:

Provide a Helm interface for quickly selecting files in a project using Projectile.

helm_projectile.gif

Installation:

M-x list-packages and select helm-projectile package, then install it. After it finishes installing, you can start using helm-projectileimmediately.

Usage:

For basic usage, C-c p h to run helm-projectile and select files in your project. Please refer to the full guide.

Package: helm-descbinds

Author

Homepage: GitHub

Features: Helm Descbinds provides an interface to Emacs’ describe-bindings, making the currently active key bindings interactively searchable with helm.

Additionally you have the following actions

Installation:

M-x list-packages and select helm-descbinds package, then install it. After finish installing, add this code snippet to activate the package:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; PACKAGE: helm-descbinds ;; ;; ;; ;; GROUP: Convenience -> Helm -> Helm Descbinds ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'helm-descbinds) (helm-descbinds-mode)

Usage:

Enter a prefix key and C-h after it. You will see a list of bindings using the Helm interface for narrowing.

Summary of Keybindings

This chapter summarizes the key bindings introduced in the above chapters.

Key Binding Command Description
M-x helm-M-x List commands
M-y helm-show-kill-ring Shows the content of the kill ring
C-x b helm-mini Shows open buffers, recently opened files
C-x C-f helm-find-files The helm version of find-file
C-s helm-ff-run-grep Run grep from within helm-find-files
C-c h i helm-semantic-or-imenu Helm interface to semantic/imenu
C-c h m helm-man-woman Jump to any man entry
C-c h / helm-find Helm interface to find
C-c h l helm-locate Helm interface to locate
C-c h o helm-occur Helm interface for occur
C-c h a helm-apropos Describes commands, functions, variables, …
C-c h h g helm-info-gnus
C-c h h i helm-info-at-point
C-c h h r helm-info-emacs
C-c h helm-lisp-completion-at-point Provides a list of available functions
C-c h b helm-resume Resumes a previous helm session
C-h SPC helm-all-mark-rings Views contents of local and global mark rings
C-c h r helm-regex Visualizes regex matches
C-c h x helm-register Shows content of registers
C-c h t helm-top Helm interface to top
C-c h s helm-surfraw Command line interface to many web search engines
C-c h g helm-google-suggest Interactively enter search terms and get results from Google in helm buffer
C-c h c helm-color Lists all available faces
C-c h M-: helm-eval-expression-with-eldoc Get instant results for Emacs lisp expressions in the helm buffer
C-c h C-, helm-calcul-expression Helm interface to calc
C-c C-l helm-eshell-history Interface to eshell history
C-c C-l helm-comint-input-ring Interface to shell history
C-c C-l helm-mini-buffer-history Interface to mini-buffer history