Skip to content
Use any fonts in the terminal without replacing or patching
Shell Emacs Lisp C Python
Branch: master
Clone or download
sebastiencs Set icons-in-terminal in higher priority in font configuration
On some systems, the priority 'default'  wasn't enough.
Latest commit b12286d Jul 27, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
build Remove unused files and clean some scripts Jul 26, 2017
fonts Remove unused files and clean some scripts Jul 26, 2017
image Update readme May 25, 2017
scripts
.gitignore
LICENSE add license Apr 29, 2017
README.md
build.sh Replaced shebangs with the preferred for portability Jul 25, 2017
config.json
install-autodetect.sh Remove unused files and clean some scripts Jul 26, 2017
install.sh Remove unused files and clean some scripts Jul 26, 2017
print_icons.sh
uninstall.sh Add a script to uninstall icons-in-terminal #4 Jul 26, 2017

README.md

ls

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

  1. Installation
  2. Building
  3. How it works
  4. Included icons
  5. Screenshots
  6. Integrations
  7. Projects using icons-in-terminal
  8. 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:

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 else
  • map-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

Screenshot the included icons Screenshot with fish

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
You can’t perform that action at this time.