sebastiencs / icons-in-terminal

Use any fonts in the terminal without replacing or patching
MIT License
1k stars 46 forks source link

ls

Overview

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:

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