• Stars
    star
    881
  • Rank 51,820 (Top 2 %)
  • Language
    Shell
  • License
    MIT License
  • Created over 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Use any fonts in the terminal without replacing or patching

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