Table of contents
- What is this?
- What does it look like?
- Displaying composed text as emojis
- Displaying emojis in company mode tooltips
- Configuring the types of emojis displayed
- Configuring how emojis are displayed
- Configuring the buffers where emojify mode is enabled
- Configuring the texts that are displayed as emojis
- Customizing the behaviour when point enters an emoji
- Customizing the behaviour during isearch-mode
- Customizing the behaviour when mouse hovers over an emoji
- Custom emojis
- Known issues
What is this?
Emojify is an Emacs extension to display emojis. It can display github style
:smile: or plain ascii ones like
:). It tries to be as
efficient as possible, while also providing a lot of flexibility
What does it look like?
Here is how the commit log of this project looks with emojify mode enabled
If you prefer a GIF you can view one here.
This package requires Emacs v24.3 and above. Emacs should be compiled with
support for PNG images to display emojis as images. It is recommended
that Emacs is compiled with ImageMagick support.
emojify will use it to
resize emojis if needed, additionally imagemagick is used to set background
color for emojis to workaround the bug described in issue 7. However these
are completely optional.
PNG support might require some additional steps to on Windows, you might find this stackoverflow answer helpful.
You can then install
emojify from the package menu. Alternatively install it by doing the following
Refresh the package index
M-x package-refresh-contents RET
And then install it by doing
M-x package-install RET emojify
(use-package emojify :hook (after-init . global-emojify-mode))
emojify-mode can be enabled/disabled separately for a buffer by using the
emojify-mode, to enable/disable it globally use the command
emojify-mode globally at startup add something like the
following to your
(add-hook 'after-init-hook #'global-emojify-mode)
Emojify integrates with packages like
org-bullets-mode which display text differently, if the alternate text
displayed by these packages match an emoji,
emojify will display them too.
See Displaying composed text as emojis for more details. Emojify can also
display emojis in
company-mode tooltips, see Displaying emojis in company mode tooltips
for more details.
[EXPERIMENTAL] Emojify can be used for displaying emojis in the mode-line,
to enable/disable it for individual buffers use the command
emojify-mode-line-mode, to enable/disable it globally use the command
emojify-apropos-emoji can be used to display emojis that match
given regexp/apropos pattern. The results are displayed in a specialized
c can be used to copy emojis to the kill ring.
emojify-insert-emoji can be used to insert emojis
interactively. While the command works with vanilla Emacs completion system,
the experience would be better with something like Helm, Ivy, Icicles or Ido
depending on you preference.
emojify-describe-emoji-at-point can be used to view
explanation about the command displayed at point. Additionally the command
emojify-describe-emoji can be used to display description for an arbitrary
Listing all emojis
emojify-list-emojis can be used to view all the available emojis
in a list form.
Displaying composed text as emojis
Emacs provides a way to modify how some parts of buffer are displayed using
composition text property.
org-bullets-mode are some popular packages that use this feature to
display certain text in the buffer differently.
If the alternate display matches an emoji then
emojify will display those
as emojis too. This is default behaviour. You can disable this behaviour by
Displaying emojis in company mode tooltips
Emojify can also display emojis that are part of company-mode’s completion
tooltip (see company-emoji for an example of such tooltips). However this
feature is turned off by default. To turn it on set
Configuring the types of emojis displayed
Emojify by default displays plain text emojis (
:)), unicode emojis (
and github style emojis
:smile:. However this is customizable. You can do
so by changing the value of
emojify-emoji-styles using the customize
interface. To change the value of the variable from Lisp using the function
emojify-set-emoji-styles (or set it before loading
emojify), call it with
one parameter the list of styles that you want to be displayed. The possible
- ascii - Display only plain ascii emojis
- unicode - Display only unicode emojis
- github - Display only github style emojis
Configuring how emojis are displayed
By default emojis are displayed using images. However you can instruct emojify
to display it using unicode characters or ascii characters. To do so customize
You can set it one of the following values
- image - Display emojis using images, obviously this requires the Emacs instance to support image
- unicode - Display emojis using unicode characters, this might be a good option on platforms with good emoji fonts
- ascii - This is simplest and does not require any external dependencies In this case emojify will display ascii equivalents of github style emojis.
Configuring the buffers where emojify mode is enabled
You can control the buffers where emojify is enabled using
Major modes where emojify-mode should be not be enabled
As the names suggests
emojify-inhibit-major-modes is a list of major-modes
emojify should not be enabled.
Inhibiting emojify-mode using custom functions
emojify-inhibit-in-buffer-functions is a list of functions that
calls before enabling
emojify-mode in a buffer. If any of the functions
return a non-nil value
emojify-mode is not enabled in the buffer. Users
can add custom functions to this list if they wish to inhibit
certain buffers. The functions are called with one argument the buffer
emojify-mode is about to be enabled.
Configuring the texts that are displayed as emojis
emojify offers two variables to inhibit the display of certain emojis.
Controlling the display of emojis in programming modes
If enabled in programming modes
emojify by default will display only emojis
in string and comments. This behaviour can be customized using the variable
emojify-prog-contexts. The variable can be set to one of the following values
- comments - Display emojis only in comments
- string - Display emojis only in string
- both - Display emojis in comments as well as string
- none - Do not display emojis in programming modes
Inhibiting display of emojis using custom functions
emojify-inhibit-functions is a list of function
emojify calls before
displaying certain text as emoji, if any of the functions return a non-nil
value the corresponding text is not displayed as emoji. Users can add
custom functions to this list, if they inhibit display of emojis in under
certain conditions. The functions are called with three arguments
- text - The text that is about to be displayed as an emoji
- beg - The beginning point of text in the buffer
- end - The ending point of text in the buffer
These functions are called with the buffer where emoji is being displayed selected.
Customizing the behaviour when point enters an emoji
The behaviour when point enters an emoji can be customized using the
emojify-point-entered-behaviour. It can have one of the following
- echo - Display the emojified text in the minibuffer
- uncover - Temporarily display the underlying text while point is in the emojified text
Additionally it can be set to a custom function, the function is called with two parameters (the buffer where the emoji appears is selected while running the function)
- beg - The beginning position of the text displayed as emoji
- end - The ending position of the text displayed as emoji
The return value of the function is ignored.
Note: The custom function will be called for once for each character in an emoji as point moves through them. Avoid manipulating the buffer in these functions
Customizing the behaviour during isearch-mode
By default in isearch-mode the underlying emoji is displayed temporarily
when point enters the emoji while searching (similar to
mentioned above). This can be disabled by setting
Customizing the behaviour when mouse hovers over an emoji
When mouse hovers over a emoji, the underlying text is displayed in a help
popup. This behaviour can be disabled by setting
emojify-show-help to nil.
You can specify custom emojis using the
emojify-user-emojis variable. You
need to set it to an alist where first element of cons is the text to be
displayed as emoji, while the second element of the cons is an alist
containing data about the emoji.
The inner alist should have atleast
- “name” - The name of the emoji
- “style” - This should be one of “github”, “ascii” or “github”
Additionally the alist should contain one of (see emojify-display-style)
- “unicode” - The replacement for the provided emoji for “unicode” display style
- “image” - The replacement for the provided emoji for “image” display style. This should be the absolute path to the image
- “ascii” - The replacement for the provided emoji for “ascii” display style
It is best to set this variable before you load
emojify, in case you set
this variable after loading
emojify run the function
emojify-set-emoji-data to recalculate emoji data.
User emojis take precedence over default emojis so the above mechanism can also be used to override the default emojis
Below is an example of setting up custom emojis. Assuming that the custom
images are at
\~/.emacs.d/emojis/neckbeard.png, you instruct
emojify to display
:neckbeard: as and
(setq emojify-user-emojis '((":trollface:" . (("name" . "Troll Face") ("image" . "~/.emacs.d/emojis/trollface.png") ("style" . "github"))) (":neckbeard:" . (("name" . "Neckbeard") ("image" . "~/.emacs.d/emojis/neckbeard.png") ("style" . "github"))))) ;; If emojify is already loaded refresh emoji data (when (featurep 'emojify) (emojify-set-emoji-data))
- Emojis are not properly updated after customizing
emojify-program-contexts. For time being you will be fine as long as you set these variables before
- Some of the emojis prompted in the commands like
emojify-insert-emojimight not be displayed by
emojify, this might happen if you have newer emoji data but old set of images. Download the latest emoji image using
emojify-emoji-setto the downloaded set.
Code as well as documentation contributions are welcome.
Cask is used to manage project dependencies so make sure you have it installed. To run the tests you need to install the dependencies by running the following
After the installation completes you can run the tests by running the following command
cask exec ert-runner
Special thanks to @ryanprior for bug reports and valuable feedback on the issue tracker.
Emoji set designed and offered free by Emoji One.
The emoji images are distributed under Creative Commons License (CC-BY-SA).
Copyright 2018 Twitter, Inc and other contributors Code licensed under the MIT License: http://opensource.org/licenses/MIT Graphics licensed under CC-BY 4.0: https://creativecommons.org/licenses/by/4.0/