Overview
icons-in-terminal
allows you to get any fonts in your terminal without replacing or patching your font.- You can add as many fonts as you want easily, you just need the ttf/odf file and add it to
config.json
. icons-in-terminal
can also be use with graphical applications.
Table of Contents
- Installation
- Building
- How it works
- Included icons
- Screenshots
- Integrations
- Projects using icons-in-terminal
- Todos
Installation
$ git clone https://github.com/sebastiencs/icons-in-terminal.git
To install icons-in-terminal
, run:
$ ./install.sh
$ # Follow the instructions to edit ~/.config/fontconfig/conf.d/30-icons.conf
Or if your terminal is supported (Experimental)
$ ./install-autodetect.sh
Done ! You can start a new terminal and run print_icons.sh
to see the installed gryphs.
You can see names of each icon by giving any parameter to print_icons.sh
:
$ ./print_icons.sh
$ ./print_icons.sh --names
$ ./print_icons.sh --names | grep ANY_NAME
To use icons in your terminal, do not copy-paste icons from the output of print_icons.sh
but use their variable name: see integrations.
When one of the provided font will be updated and add new icons, some codepoints in icons-in-terminal.ttf
will be changed, the variable names won't.
Building
If you want to add new font, follow these instructions:
There are a few dependencies to install:
- Python 3
- fontforge (with python extension)
You can add the name and path of your font to the file config.json
.
Each font can take parameters:
start-from
: exclude all glyphes before the given codepoint.until
: exclude all glyphes at the given codepoint and after.excludes
: exclude the given codepoints.move-vertically
: Use this parameter if your font and its glyphes are not centered vertically.short-name
: Prefix to insert before the glyph name when you want to use the icon in your shell or anywhere elsemap-names
: Define a name to the glyph. If not provided, the name will be read from the ttf file
Once done, you can run:
$ ./build.sh
How it works
This project is inspired by awesome-terminal-fonts but is different.
I don't modify any existing font, I merge all glyphes from the provided fonts in a new font file and insert them in the private use areas.
The file ~/.config/fontconfig/conf.d/30-icons.conf
tells to freetype to search the glyph in icons-in-terminal.ttf
if it fails in your default font file. As the codepoints generated are in the private use areas, freetype should always fail and fallback to icons-in-terminal.ttf
The only requirement is that your default font shouldn't be already patched/modified. But why use a patched font with a limited number of glyphes when they are all included here :)
Your terminal emulator should also support fallback font (most of them support it)
Included icons
There are already 3618 glyphes included:
Name | Version | Notes |
---|---|---|
powerline-extra-symbols | commit 4eae6e8 | |
octicons | 4.4.0 | |
fontawesome | 4.7 | |
material-design-icons | 3.0.1 | |
file-icons | 2.1.4 | |
weather-icons | 2.0.10 | |
font-linux | 0.9 | |
devicons | 1.8.0 | |
Pomicons | commit bb0a579 | |
linea | 1.0 | |
font-mfizz | 2.4.1 | |
FiraCode | 1.200 | See if your terminal is compatible |
Screenshots
Integrations
Fish integration
To use icons-in-terminal
with fish, add this line to ~/.config/fish/config.fish
:
source ~/.local/share/icons-in-terminal/icons.fish
Restart a terminal, now you can print any icons with its name:
$ echo $oct_location
Bash integration
Add this line to your .bashrc:
source ~/.local/share/icons-in-terminal/icons_bash.sh
Restart a terminal, now you can print any icons with its name:
$ echo -e $oct_location # note the '-e'
Emacs integration
Add this line to your emacs init file:
(add-to-list 'load-path "~/.local/share/icons-in-terminal/")
To use icons-in-terminal in your package:
(require 'icons-in-terminal)
(insert (icons-in-terminal 'oct_flame)) ; C-h f icons-in-terminal[RET] for more info
Projects using icons-in-terminal
ls
https://github.com/sebastiencs/ls-icons
emacs
https://github.com/sebastiencs/sidebar.el
Todos
- Integrate with differents shells