Emojify is an Emacs extension to display emojis. It can display github style emojis like :smile:
or plain ascii ones like :)
. It tries to be as efficient as possible, while also providing a lot of flexibility
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.
emojify
is available on MELPA and MELPA Stable. Please follow the instructions on MELPA website to enable it, if you haven’t already.
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 command emojify-mode
, to enable/disable it globally use the command global-emojify-mode
.
To enable emojify-mode
globally at startup add something like the following to your init
file
(add-hook 'after-init-hook #'global-emojify-mode)
Emojify integrates with packages like prettify-symbol-mode
and 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 global-emojify-mode-line-mode
.
The command emojify-apropos-emoji
can be used to display emojis that match given regexp/apropos pattern. The results are displayed in a specialized buffer, where w
or c
can be used to copy emojis to the kill ring.
The command 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.
The command 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 emoji.
The command emojify-list-emojis
can be used to view all the available emojis in a list form.
Emacs provides a way to modify how some parts of buffer are displayed using the composition
text property. prettify-symbol-mode
and 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 setting emojify-composed-text-p
to nil
.
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 emojify-company-tooltips-p
to t
.
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 styles are
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 the variable emojify-display-style
.
You can set it one of the following values
You can control the buffers where emojify is enabled using emojify-inhibit-major-modes
and emojify-inhibit-in-buffer-functions
.
As the names suggests emojify-inhibit-major-modes
is a list of major-modes where emojify
should not be enabled.
emojify-inhibit-in-buffer-functions
is a list of functions that emojify
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 emojify
in certain buffers. The functions are called with one argument the buffer where emojify-mode
is about to be enabled.
emojify
offers two variables to inhibit the display of certain emojis.
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
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
These functions are called with the buffer where emoji is being displayed selected.
Customizing the behaviour when point enters an emojiThe behaviour when point enters an emoji can be customized using the variable emojify-point-entered-behaviour
. It can have one of the following values
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)
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-modeBy default in isearch-mode the underlying emoji is displayed temporarily when point enters the emoji while searching (similar to uncover
behaviour mentioned above). This can be disabled by setting emojify-reveal-on-isearch
to nil
.
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
Additionally the alist should contain one of (see emojify-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/trollface.png
and \~/.emacs.d/emojis/neckbeard.png
, you instruct emojify
to display :trollface:
and :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))
emojify-display-style
or emojify-program-contexts
. For time being you will be fine as long as you set these variables before emojify
has loaded.emojify-insert-emoji
might 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-download-emoji
and set emojify-emoji-set
to 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
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).
All emojis designed by OpenMoji – the open-source emoji and icon project. License: CC BY-SA 4.0
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/
The source code is distributed under GNU General Public License v3. See LICENSE.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4