nnn/src/icons.h

446 lines
18 KiB
C

#ifndef INCLUDE_ICONS_H
#define INCLUDE_ICONS_H
#if defined(ICONS_GENERATE) || defined(ICONS_ENABLED)
/*
* 1st arg = ICONS_IN_TERM
*
* 2nd arg = NERD ICONS
* You can find hex codes for nerd fonts here: https://www.nerdfonts.com/cheat-sheet
*
* 3rd arg = EMOJIS
* You can find a list of emoji here: https://unicode.org/Public/emoji/5.0/emoji-test.txt
*
* Any entry with empty icon gets removed by the hash-table generator
*/
#if defined(ICONS_IN_TERM)
#define ICON_STR(I, N, E) I
#include "icons-in-terminal.h"
#elif defined(NERD)
#define ICON_STR(I, N, E) N
#elif defined(EMOJI)
#define ICON_STR(I, N, E) E
#endif
/*
* Define a string to be printed before and after the icon
* Adjust if the icons are not printed properly
*/
#if defined(EMOJI)
/*
* NOTE: As some emojis take up two cells, all of the emoji icons must
* be of width 2. Therefore, right pad single-width emoji with a space.
*/
#define ICON_SIZE 2
#define ICON_PADDING_RIGHT " "
#else
#define ICON_SIZE 1
#define ICON_PADDING_RIGHT " "
#endif
#define ICON_PADDING_LEFT ""
#define ICON_PADDING_LEFT_LEN (sizeof ICON_PADDING_LEFT - 1)
#define ICON_PADDING_RIGHT_LEN (sizeof ICON_PADDING_RIGHT - 1)
/* ARROWS */
#define ICON_ARROW_UP ICON_STR(MD_ARROW_UPWARD, "󰁝", "⬆")
#define ICON_ARROW_FORWARD ICON_STR(MD_ARROW_FORWARD, "󰁔", "➡")
#define ICON_ARROW_DOWN ICON_STR(MD_ARROW_DOWNWARD, "󰁅", "⬇")
/* GENERIC */
#define ICON_DIRECTORY ICON_STR(FA_FOLDER, "", "📂")
#define ICON_FILE ICON_STR(FA_FILE, "󰈔", "📃")
#define ICON_EXEC ICON_STR(FA_COG, "", "⚙️ ")
/* Top level and common icons */
#define ICON_ARCHIVE ICON_STR(FA_FILE_ARCHIVE_O, "󰀼", "📦")
#define ICON_BRIEFCASE ICON_STR(FA_BRIEFCASE, "󰃖", "💼")
#define ICON_C ICON_STR(MFIZZ_C, "", "🇨 ")
#define ICON_CHANGELOG ICON_STR(FA_HISTORY, "󰋚", "🔺")
#define ICON_CHESS ICON_STR("", "󰄺", "")
#define ICON_CLOJURE ICON_STR(MFIZZ_CLOJURE, "", "")
#define ICON_CONFIGURE ICON_STR(FILE_CONFIG, "", "🔧")
#define ICON_CPLUSPLUS ICON_STR(MFIZZ_CPLUSPLUS, "", ICON_C)
#define ICON_DATABASE ICON_STR(MFIZZ_DATABASE_ALT2, "󰆼", "🗃️ ")
#define ICON_DESKTOP ICON_STR(FA_DESKTOP, "󰟀", "🖥️ ")
#define ICON_DJVU ICON_STR(FA_PAPERCLIP, "", "📎")
#define ICON_DOCUMENT ICON_STR(FA_FILE_TEXT_O, "󰈙", "🗒 ")
#define ICON_DOWNLOADS ICON_STR(FA_DOWNLOAD, "󰃘", "📥")
#define ICON_ELIXIR ICON_STR(MFIZZ_ELIXIR, "", "💧")
#define ICON_ENCRYPT ICON_STR("", "󰌆", "🔒")
#define ICON_FSHARP ICON_STR(DEV_FSHARP, "", "")
#define ICON_FONT ICON_STR(FILE_FONT, "", "")
#define ICON_GIT ICON_STR(FA_GIT, "", "🌱")
#define ICON_HASKELL ICON_STR("", "", "")
#define ICON_HTML ICON_STR(FA_FILE_CODE_O, "󰌝", "")
#define ICON_JAVA ICON_STR(MFIZZ_JAVA, "", "☕")
#define ICON_JAVASCRIPT ICON_STR(FA_FILE_CODE_O, "󰌞", "")
#define ICON_LICENSE ICON_STR(FA_COPYRIGHT, "󰈙", "⚖️ ")
#define ICON_LINUX ICON_STR(FA_LINUX, "󰌽", "🐧")
#define ICON_MAKEFILE ICON_STR(FILE_CMAKE, "󰆍", "🛠 ")
#define ICON_MANUAL ICON_STR(FILE_MANPAGE, "󱓷", "❓")
#define ICON_MS_EXCEL ICON_STR(FILE_EXCEL, "󰈛", ICON_WORDDOC)
#define ICON_MUSIC ICON_STR(FA_MUSIC, "󱍙", "🎧")
#define ICON_MUSICFILE ICON_STR(FA_FILE_AUDIO_O, "󰎈", ICON_MUSIC)
#define ICON_OPTICALDISK ICON_STR(LINEA_MUSIC_CD, "", "💿")
#define ICON_PDF ICON_STR(FA_FILE_PDF_O, "󰈦", "📕")
#define ICON_PHOTOSHOP ICON_STR(DEV_PHOTOSHOP, "", ICON_PICTUREFILE)
#define ICON_PICTUREFILE ICON_STR(FA_FILE_IMAGE_O, "󰈟", ICON_PICTURES)
#define ICON_PICTURES ICON_STR(MD_CAMERA_ALT, "󰉔", "🎨")
#define ICON_PLAYLIST ICON_STR(ICON_MUSICFILE, "󱍙", "")
#define ICON_POWERPOINT ICON_STR(FILE_POWERPOINT, "󰈧", "📊")
#define ICON_PUBLIC ICON_STR(FA_INBOX, "", "👀")
#define ICON_PYTHON ICON_STR(MFIZZ_PYTHON, "", "🐍")
#define ICON_REACT ICON_STR(FILE_JSX, "", ICON_JAVASCRIPT)
#define ICON_RUBY ICON_STR(MFIZZ_RUBY, "", "💎")
#define ICON_RUST ICON_STR(DEV_RUST, "", "")
#define ICON_SASS ICON_STR("", "", "")
#define ICON_SCRIPT ICON_STR(MFIZZ_SCRIPT, "", "📜")
#define ICON_SUBTITLE ICON_STR(FA_COMMENTS_O, "󰅺", "💬")
#define ICON_TEMPLATES ICON_STR(FA_PAPERCLIP, "󰗇", "📎")
#define ICON_TEX ICON_STR(FILE_TEX, "󰙩", ICON_DOCUMENT)
#define ICON_VIDEOFILE ICON_STR(FA_FILE_MOVIE_O, "󰈫", ICON_VIDEOS)
#define ICON_VIDEOS ICON_STR(FA_FILM, "󰈰", "🎞 ")
#define ICON_VIM ICON_STR(DEV_VIM, "", "")
#define ICON_WORDDOC ICON_STR(FILE_WORD, "󰈬", "📘")
#define ICON_EXT_ASM ICON_STR(FILE_NASM, "", "")
#define ICON_EXT_BIN ICON_STR(OCT_FILE_BINARY, "", "📓")
#define ICON_EXT_COFFEE ICON_STR(MFIZZ_COFFEE_BEAN, "", "")
#define ICON_EXT_CSS ICON_STR(MFIZZ_CSS3, "", "🦋")
#define ICON_EXT_DEB ICON_STR(MFIZZ_DEBIAN, "", ICON_LINUX)
#define ICON_EXT_DIFF ICON_STR(FILE_DIFF, "", "📋")
#define ICON_EXT_GO ICON_STR(MFIZZ_GO, "󰟓", "")
#define ICON_EXT_JSON ICON_STR(ICON_JAVASCRIPT, "", ICON_JAVASCRIPT)
#define ICON_EXT_LUA ICON_STR(FILE_LUA, "", "🌘")
#define ICON_EXT_M ICON_STR("", "󰠞", "📊")
#define ICON_EXT_MAT ICON_STR("", "", "")
#define ICON_EXT_MD ICON_STR(DEV_MARKDOWN, "", "📝")
#define ICON_EXT_MSI ICON_STR(FA_WINDOWS, "󰍲", "🪟")
#define ICON_EXT_NIX ICON_STR("", "", "")
#define ICON_EXT_PATCH ICON_STR(FILE_PATCH, "", "🩹")
#define ICON_EXT_PHP ICON_STR(MFIZZ_PHP, "", "🌐")
#define ICON_EXT_ROM ICON_STR(FA_LOCK, "󰊖", "")
#define ICON_EXT_RSS ICON_STR(FA_RSS_SQUARE, "", "📡")
#define ICON_EXT_RTF ICON_STR(ICON_PDF, "󰈦", ICON_PDF)
#define ICON_EXT_SCALA ICON_STR(MFIZZ_SCALA, "", "")
#define ICON_EXT_SLN ICON_STR(DEV_VISUALSTUDIO, "", "")
#define ICON_EXT_TS ICON_STR(FILE_TS, "", "")
/*
* Hex xterm 256 color code, 0 to follow file specific (if any)
* Codes: https://jonasjacek.github.io/colors/
* Spectrum sorted: https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg
* Color names: https://www.ditig.com/256-colors-cheat-sheet
*/
#define COLOR_LIST \
COLOR_X(COLOR_VIDEO, 45) /* Turquoise2 */ \
COLOR_X(COLOR_VIDEO1, 226) /* Yellow1 */ \
COLOR_X(COLOR_AUDIO, 220) /* Gold1 */ \
COLOR_X(COLOR_AUDIO1, 205) /* HotPink */ \
COLOR_X(COLOR_IMAGE, 82) /* Chartreuse2 */ \
COLOR_X(COLOR_DOCS, 202) /* OrangeRed1 */ \
COLOR_X(COLOR_ARCHIVE, 209) /* Salmon1 */ \
COLOR_X(COLOR_C, 81) /* SteelBlue1 */ \
COLOR_X(COLOR_JAVA, 32) /* DeepSkyBlue3 */ \
COLOR_X(COLOR_JAVASCRIPT, 47) /* SpringGreen2 */ \
COLOR_X(COLOR_REACT, 39) /* DeepSkyBlue1 */ \
COLOR_X(COLOR_CSS, 199) /* DeepPink1 */ \
COLOR_X(COLOR_PYTHON, 227) /* LightGoldenrod1 */ \
COLOR_X(COLOR_LUA, 19) /* Blue3 */ \
COLOR_X(COLOR_DOCUMENT, 15) /* White */ \
COLOR_X(COLOR_FSHARP, 31) /* DeepSkyBlue3 */ \
COLOR_X(COLOR_RUBY, 160) /* Red3 */ \
COLOR_X(COLOR_SCALA, 196) /* Red1 */ \
COLOR_X(COLOR_SHELL, 47) /* SpringGreen2 */ \
COLOR_X(COLOR_VIM, 28) /* Green4 */ \
COLOR_X(COLOR_ELIXIR, 104) /* MediumPurple */ \
/* X-Macro: https://en.wikipedia.org/wiki/X_Macro */
#define COLOR_X(N, V) N = (V),
enum { COLOR_LIST };
#undef COLOR_X
#define COLOR_X(N, V) N,
static const unsigned char init_colors[] = { COLOR_LIST };
#undef COLOR_X
#ifdef ICONS_GENERATE
/* temporary struct using `char *`. the hash-table generator will
* output a more optimized version which uses `char[]` instead reducing
* indirection and the total binary size.
*/
struct icon_pair { const char *match; const char *icon; unsigned char color; };
#endif
struct icon { const char *icon; unsigned char color; };
static const struct icon dir_icon = {ICON_DIRECTORY, 0};
static const struct icon file_icon = {ICON_FILE, 0};
static const struct icon exec_icon = {ICON_EXEC, 0};
static const struct icon_pair icons_name[] = {
{".git", ICON_GIT, 0},
{"Desktop", ICON_DESKTOP, 0},
{"Documents", ICON_BRIEFCASE, 0},
{"Downloads", ICON_DOWNLOADS, 0},
{"Music", ICON_MUSIC, 0},
{"Pictures", ICON_PICTURES, 0},
{"Public", ICON_PUBLIC, 0},
{"Templates", ICON_TEMPLATES, 0},
{"Videos", ICON_VIDEOS, 0},
{"CHANGELOG", ICON_CHANGELOG, COLOR_DOCS},
{"configure", ICON_CONFIGURE, 0},
{"License", ICON_LICENSE, COLOR_DOCS},
{"Makefile", ICON_MAKEFILE, 0},
};
#ifdef ICONS_GENERATE
/*
* The goal here is to provide a small set of default values. We don't try to
* provide icons for everything under the sun because keeping a _huge_ table of
* icons would: increase binary size, increase memory usage, decrease performance.
*
* Users are free to customize this *locally* as they see fit. Only open a
* pull-request if you think your changes are aligned with the goal described
* above.
*/
static const struct icon_pair icons_ext[] = { /* All entries are case-insensitive */
/* Numbers */
{"1", ICON_MANUAL, COLOR_DOCS},
{"7z", ICON_ARCHIVE, COLOR_ARCHIVE},
/* A */
{"a", ICON_MANUAL, 0},
{"apk", ICON_ARCHIVE, COLOR_ARCHIVE},
{"asm", ICON_EXT_ASM, 0},
{"aup", ICON_MUSICFILE, COLOR_AUDIO},
{"avi", ICON_VIDEOFILE, COLOR_VIDEO},
/* B */
{"bat", ICON_SCRIPT, 0},
{"bib", ICON_TEX, 0},
{"bin", ICON_EXT_BIN, 0},
{"bmp", ICON_PICTUREFILE, COLOR_IMAGE},
{"bz2", ICON_ARCHIVE, COLOR_ARCHIVE},
/* C */
{"c", ICON_C, COLOR_C},
{"c++", ICON_CPLUSPLUS, COLOR_C},
{"cabal", ICON_HASKELL, COLOR_VIDEO},
{"cab", ICON_ARCHIVE, COLOR_ARCHIVE},
{"cbr", ICON_ARCHIVE, COLOR_ARCHIVE},
{"cbz", ICON_ARCHIVE, COLOR_ARCHIVE},
{"cc", ICON_CPLUSPLUS, COLOR_C},
{"class", ICON_JAVA, COLOR_JAVA},
{"clj", ICON_CLOJURE, 0},
{"cljc", ICON_CLOJURE, 0},
{"cljs", ICON_CLOJURE, 0},
{"cls", ICON_TEX, 0},
{"cmake", ICON_MAKEFILE, 0},
{"coffee", ICON_EXT_COFFEE, 0},
{"conf", ICON_CONFIGURE, 0},
{"cpio", ICON_ARCHIVE, COLOR_ARCHIVE},
{"cpp", ICON_CPLUSPLUS, COLOR_C},
{"css", ICON_EXT_CSS, COLOR_CSS},
{"cue", ICON_PLAYLIST, COLOR_AUDIO},
{"cvs", ICON_CONFIGURE, 0},
{"cxx", ICON_CPLUSPLUS, COLOR_C},
/* D */
{"db", ICON_DATABASE, 0},
{"deb", ICON_EXT_DEB, COLOR_ARCHIVE},
{"diff", ICON_EXT_DIFF, 0},
{"dll", ICON_SCRIPT, 0},
{"djvu", ICON_DJVU, COLOR_DOCS},
{"doc", ICON_WORDDOC, COLOR_DOCUMENT},
{"docx", ICON_WORDDOC, COLOR_DOCUMENT},
/* E */
{"ejs", ICON_JAVASCRIPT, COLOR_JAVASCRIPT},
{"elf", ICON_LINUX, 0},
{"epub", ICON_PDF, COLOR_DOCS},
{"exe", ICON_EXEC, 0},
{"ex", ICON_ELIXIR, COLOR_ELIXIR},
{"eex", ICON_ELIXIR, COLOR_ELIXIR},
{"exs", ICON_ELIXIR, COLOR_ELIXIR},
/* F */
{"f#", ICON_FSHARP, COLOR_FSHARP},
{"fen", ICON_CHESS, 0},
{"flac", ICON_MUSICFILE, COLOR_AUDIO1},
{"flv", ICON_VIDEOFILE, COLOR_VIDEO},
{"fs", ICON_FSHARP, COLOR_FSHARP},
{"fsi", ICON_FSHARP, COLOR_FSHARP},
{"fsscript", ICON_FSHARP, COLOR_FSHARP},
{"fsx", ICON_FSHARP, COLOR_FSHARP},
/* G */
{"gem", ICON_RUBY, COLOR_RUBY},
{"gif", ICON_PICTUREFILE, COLOR_IMAGE},
{"go", ICON_EXT_GO, COLOR_C},
{"gpg", ICON_ENCRYPT, COLOR_ARCHIVE},
{"gz", ICON_ARCHIVE, COLOR_ARCHIVE},
{"gzip", ICON_ARCHIVE, COLOR_ARCHIVE},
/* H */
{"h", ICON_C, COLOR_C},
{"hh", ICON_CPLUSPLUS, COLOR_C},
{"hpp", ICON_CPLUSPLUS, COLOR_C},
{"hs", ICON_HASKELL, COLOR_ELIXIR},
{"htaccess", ICON_CONFIGURE, 0},
{"htpasswd", ICON_CONFIGURE, 0},
{"htm", ICON_HTML, 0},
{"html", ICON_HTML, 0},
{"hxx", ICON_CPLUSPLUS, COLOR_C},
{"heex", ICON_ELIXIR, COLOR_ELIXIR},
/* I */
{"ico", ICON_PICTUREFILE, COLOR_IMAGE},
{"ini", ICON_CONFIGURE, 0},
{"img", ICON_OPTICALDISK, COLOR_ARCHIVE},
{"iso", ICON_OPTICALDISK, COLOR_ARCHIVE},
/* J */
{"jar", ICON_JAVA, COLOR_JAVA},
{"java", ICON_JAVA, COLOR_JAVA},
{"jl", ICON_CONFIGURE, 0},
{"jpeg", ICON_PICTUREFILE, COLOR_IMAGE},
{"jpg", ICON_PICTUREFILE, COLOR_IMAGE},
{"js", ICON_JAVASCRIPT, COLOR_JAVASCRIPT},
{"json", ICON_EXT_JSON, COLOR_JAVASCRIPT},
{"jsx", ICON_REACT, COLOR_REACT},
{"jxl", ICON_PICTUREFILE, COLOR_IMAGE},
/* K */
{"ksh", ICON_SCRIPT, COLOR_SHELL},
/* L */
{"lha", ICON_ARCHIVE, COLOR_ARCHIVE},
{"lhs", ICON_HASKELL, COLOR_VIM},
{"log", ICON_DOCUMENT, 0},
{"lua", ICON_EXT_LUA, COLOR_LUA},
{"lzh", ICON_ARCHIVE, COLOR_ARCHIVE},
{"lzma", ICON_ARCHIVE, COLOR_ARCHIVE},
/* M */
{"m", ICON_EXT_M, COLOR_C},
{"m4a", ICON_MUSICFILE, COLOR_AUDIO},
{"m4v", ICON_VIDEOFILE, COLOR_VIDEO},
{"markdown", ICON_EXT_MD, COLOR_DOCS},
{"mat", ICON_EXT_MAT, COLOR_C},
{"md", ICON_EXT_MD, COLOR_DOCS},
{"mk", ICON_MAKEFILE, 0},
{"mkv", ICON_VIDEOFILE, COLOR_VIDEO},
{"mov", ICON_VIDEOFILE, COLOR_VIDEO},
{"mp3", ICON_MUSICFILE, COLOR_AUDIO},
{"mp4", ICON_VIDEOFILE, COLOR_VIDEO1},
{"mpeg", ICON_VIDEOFILE, COLOR_VIDEO},
{"mpg", ICON_VIDEOFILE, COLOR_VIDEO},
{"msi", ICON_EXT_MSI, 0},
/* N */
{"nix", ICON_EXT_NIX, COLOR_FSHARP},
/* O */
{"o", ICON_MANUAL, 0},
{"ogg", ICON_MUSICFILE, COLOR_AUDIO},
{"opus", ICON_MUSICFILE, COLOR_AUDIO},
{"opdownload", ICON_DOWNLOADS, 0},
{"otf", ICON_FONT, 0},
{"out", ICON_LINUX, 0},
/* P */
{"part", ICON_DOWNLOADS, 0},
{"patch", ICON_EXT_PATCH, 0},
{"pdf", ICON_PDF, COLOR_DOCS},
{"pgn", ICON_CHESS, 0},
{"php", ICON_EXT_PHP, 0},
{"png", ICON_PICTUREFILE, COLOR_IMAGE},
{"ppt", ICON_POWERPOINT, 0},
{"pptx", ICON_POWERPOINT, 0},
{"psb", ICON_PHOTOSHOP, 0},
{"psd", ICON_PHOTOSHOP, 0},
{"py", ICON_PYTHON, COLOR_PYTHON},
{"pyc", ICON_PYTHON, COLOR_PYTHON},
{"pyd", ICON_PYTHON, COLOR_PYTHON},
{"pyo", ICON_PYTHON, COLOR_PYTHON},
/* Q */
/* R */
{"rar", ICON_ARCHIVE, COLOR_ARCHIVE},
{"rb", ICON_RUBY, COLOR_RUBY},
{"rc", ICON_CONFIGURE, 0},
{"rom", ICON_EXT_ROM, 0},
{"rpm", ICON_ARCHIVE, COLOR_ARCHIVE},
{"rs", ICON_RUST, COLOR_DOCS},
{"rss", ICON_EXT_RSS, 0},
{"rtf", ICON_EXT_RTF, 0},
/* S */
{"sass", ICON_SASS, COLOR_CSS},
{"scss", ICON_SASS, COLOR_CSS},
{"so", ICON_MANUAL, 0},
{"scala", ICON_EXT_SCALA, COLOR_SCALA},
{"sh", ICON_SCRIPT, COLOR_SHELL},
{"slim", ICON_SCRIPT, COLOR_DOCUMENT},
{"sln", ICON_EXT_SLN, 0},
{"sql", ICON_DATABASE, 0},
{"srt", ICON_SUBTITLE, 0},
{"sty", ICON_TEX, 0},
{"sub", ICON_SUBTITLE, 0},
{"svg", ICON_PICTUREFILE, COLOR_IMAGE},
/* T */
{"tar", ICON_ARCHIVE, COLOR_ARCHIVE},
{"tex", ICON_TEX, 0},
{"tgz", ICON_ARCHIVE, COLOR_ARCHIVE},
{"ts", ICON_EXT_TS, COLOR_JAVASCRIPT},
{"tsx", ICON_REACT, COLOR_REACT},
{"txt", ICON_DOCUMENT, COLOR_DOCUMENT},
{"txz", ICON_ARCHIVE, COLOR_ARCHIVE},
{"ttf", ICON_FONT, 0},
/* U */
/* V */
{"vid", ICON_VIDEOFILE, COLOR_VIDEO},
{"vim", ICON_VIM, COLOR_VIM},
{"vimrc", ICON_VIM, COLOR_VIM},
{"vtt", ICON_SUBTITLE, 0},
/* W */
{"wav", ICON_MUSICFILE, COLOR_AUDIO},
{"webm", ICON_VIDEOFILE, COLOR_VIDEO},
{"webp", ICON_PICTUREFILE, COLOR_IMAGE},
{"wma", ICON_VIDEOFILE, COLOR_AUDIO},
{"wmv", ICON_VIDEOFILE, COLOR_VIDEO},
/* X */
{"xbps", ICON_ARCHIVE, COLOR_ARCHIVE},
{"xcf", ICON_PICTUREFILE, COLOR_IMAGE},
{"xhtml", ICON_HTML, 0},
{"xls", ICON_MS_EXCEL, 0},
{"xlsx", ICON_MS_EXCEL, 0},
{"xml", ICON_HTML, 0},
{"xz", ICON_ARCHIVE, COLOR_ARCHIVE},
/* Y */
{"yaml", ICON_CONFIGURE, COLOR_DOCUMENT},
{"yml", ICON_CONFIGURE, COLOR_DOCUMENT},
/* Z */
{"zip", ICON_ARCHIVE, COLOR_ARCHIVE},
{"zsh", ICON_SCRIPT, COLOR_SHELL},
{"zst", ICON_ARCHIVE, COLOR_ARCHIVE},
/* Other */
};
#endif
#endif /* defined(ICONS_GENERATE) || defined(ICONS_ENABLED) */
#endif /* INCLUDE_ICONS_H */