From 1fc1b8be8b6cd5d43f7443486dc97cce133f9053 Mon Sep 17 00:00:00 2001 From: Dave Snider Date: Sun, 13 Sep 2020 19:59:51 -0700 Subject: [PATCH] Add nerdfont defs file and normalize vars (#722) * Add nerdfont defs file and normalize vars * some cleanup * address feedback * one more spacing issue * address feedback --- Makefile | 7 +- src/icons-in-terminal.h | 2 +- src/icons-nerdfont.h | 248 ++++++++++++++++++++++++++++ src/icons.h | 356 +++++++++++++++++++++++++++++++++------- src/nnn.c | 17 +- 5 files changed, 564 insertions(+), 66 deletions(-) create mode 100644 src/icons-nerdfont.h diff --git a/Makefile b/Makefile index 35d37aa3..0e15af47 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,8 @@ O_NOMOUSE := 0 # no mouse support O_NOBATCH := 0 # no built-in batch renamer O_NOFIFO := 0 # no FIFO previewer support O_CTX8 := 0 # enable 8 contexts -O_ICONS := 0 # support icons +O_ICONS := 0 # support icons-in-terminal +O_NERD := 0 # support icons-nerdfont O_QSORT := 0 # use Alexey Tourbin's QSORT implementation O_BENCH := 0 # benchmark mode (stops at first user input) @@ -77,6 +78,10 @@ ifeq ($(O_ICONS),1) CPPFLAGS += -DICONS endif +ifeq ($(O_NERD),1) + CPPFLAGS += -DNERD +endif + ifeq ($(O_QSORT),1) CPPFLAGS += -DTOURBIN_QSORT endif diff --git a/src/icons-in-terminal.h b/src/icons-in-terminal.h index 37f5d290..11df87ad 100644 --- a/src/icons-in-terminal.h +++ b/src/icons-in-terminal.h @@ -1,5 +1,5 @@ #ifndef ICONS_IN_TERMINAL -# define ICONS_IN_TERMINAL +#define ICONS_IN_TERMINAL # define POWERLINE_BRANCH "\ue0a0" # define POWERLINE_LINE_NUMBER "\ue0a1" diff --git a/src/icons-nerdfont.h b/src/icons-nerdfont.h new file mode 100644 index 00000000..7662b3ec --- /dev/null +++ b/src/icons-nerdfont.h @@ -0,0 +1,248 @@ +#ifndef ICONS_NERDFONT +#define ICONS_NERDFONT + +// You can find hex codes for nerd fonts here +// https://www.nerdfonts.com/cheat-sheet + +// Generics +#define ICON_DIRECTORY "\ue5ff" +#define ICON_FILE "\uf713" +#define ICON_EXEC "\uf144" +#define ICON_MANUAL "\uf5bd" + +// Top level and common icons +#define ICON_GIT "\ue5fb" +#define ICON_DESKTOP "\ufcbe" +#define ICON_BRIEFCASE "\uf5d5" +#define ICON_DOCUMENT "\uf718" +#define ICON_DOWNLOADS "\uf5d7" +#define ICON_MUSIC "\uf832" +#define ICON_MUSICFILE "\uf886" +#define ICON_PICTURES "\uf753" +#define ICON_PICTUREFILE "\uf71e" +#define ICON_PUBLIC "\ue5ff" +#define ICON_TEMPLATES "\ufac6" +#define ICON_VIDEOS "\uf72f" +#define ICON_VIDEOFILE "\ufcdc" +#define ICON_CHANGELOG "\uf7d9" +#define ICON_CONFIGURE "\uf423" +#define ICON_LICENSE "\uf718" +#define ICON_MAKEFILE "\uf68c" +#define ICON_ARCHIVE "\ufac3" +#define ICON_SCRIPT "\uf977" +#define ICON_CPLUSPLUS "\ue61d" +#define ICON_JAVA "\ue738" +#define ICON_CLOJURE "\ue76a" +#define ICON_JAVASCRIPT "\ue74e" +#define ICON_LINUX "\uf83c" +#define ICON_FSHARP "\ue7a7" +#define ICON_RUBY "\ue23e" +#define ICON_C "\ue61e" +#define ICON_HTML "\uf72d" +#define ICON_REACT "\ue625" +#define ICON_PYTHON "\ue235" +#define ICON_DATABASE "\uf6b7" +#define ICON_WORDDOC "\uf72b" +#define ICON_PLAYLIST "\uf910" +#define ICON_OPTICALDISK "\ufd1e" + + +/* Numbers */ +#define ICON_EXT_1 ICON_MANUAL +#define ICON_EXT_7Z ICON_ARCHIVE + +/* A */ +#define ICON_EXT_A ICON_MANUAL +#define ICON_EXT_APK ICON_ARCHIVE +#define ICON_EXT_ASM ICON_FILE +#define ICON_EXT_AUP ICON_MUSICFILE +#define ICON_EXT_AVI ICON_VIDEOFILE + +/* B */ +#define ICON_EXT_BAT ICON_SCRIPT +#define ICON_EXT_BIN "\uf471" +#define ICON_EXT_BMP ICON_PICTUREFILE +#define ICON_EXT_BZ2 ICON_ARCHIVE + +/* C */ +#define ICON_EXT_C ICON_C +#define ICON_EXT_CPLUSPLUS ICON_CPLUSPLUS +#define ICON_EXT_CAB ICON_ARCHIVE +#define ICON_EXT_CBR ICON_ARCHIVE +#define ICON_EXT_CBZ ICON_ARCHIVE +#define ICON_EXT_CC ICON_CPLUSPLUS +#define ICON_EXT_CLASS ICON_JAVA +#define ICON_EXT_CLJ ICON_CLOJURE +#define ICON_EXT_CLJC ICON_CLOJURE +#define ICON_EXT_CLJS ICON_CLOJURE +#define ICON_EXT_CMAKE ICON_MAKEFILE +#define ICON_EXT_COFFEE "\ue751" +#define ICON_EXT_CONF ICON_CONFIGURE +#define ICON_EXT_CPIO ICON_ARCHIVE +#define ICON_EXT_CPP ICON_CPLUSPLUS +#define ICON_EXT_CSS "\ue614" +#define ICON_EXT_CUE ICON_PLAYLIST +#define ICON_EXT_CVS ICON_CONFIGURE +#define ICON_EXT_CXX ICON_CPLUSPLUS + +/* D */ +#define ICON_EXT_DB ICON_DATABASE +#define ICON_EXT_DEB "\ue77d" +#define ICON_EXT_DIFF "\ufa59" +#define ICON_EXT_DLL ICON_SCRIPT +#define ICON_EXT_DOC ICON_WORDDOC +#define ICON_EXT_DOCX ICON_WORDDOC + +/* E */ +#define ICON_EXT_EJS ICON_JAVASCRIPT +#define ICON_EXT_ELF ICON_LINUX +#define ICON_EXT_EPUB ICON_MANUAL +#define ICON_EXT_EXE ICON_EXEC + +/* F */ +#define ICON_EXT_FSHARP ICON_FSHARP +#define ICON_EXT_FLAC ICON_MUSICFILE +#define ICON_EXT_FLV ICON_VIDEOFILE +#define ICON_EXT_FS ICON_FSHARP +#define ICON_EXT_FSI ICON_FSHARP +#define ICON_EXT_FSSCRIPT ICON_FSHARP +#define ICON_EXT_FSX ICON_FSHARP + +/* G */ +#define ICON_EXT_GEM ICON_RUBY +#define ICON_EXT_GIF ICON_PICTUREFILE +#define ICON_EXT_GO "\ufcd1" +#define ICON_EXT_GZ ICON_ARCHIVE +#define ICON_EXT_GZIP ICON_ARCHIVE + +/* H */ +#define ICON_EXT_H ICON_C +#define ICON_EXT_HH ICON_CPLUSPLUS +#define ICON_EXT_HTACCESS ICON_CONFIGURE +#define ICON_EXT_HTPASSWD ICON_CONFIGURE +#define ICON_EXT_HTM ICON_HTML +#define ICON_EXT_HTML ICON_HTML +#define ICON_EXT_HXX ICON_CPLUSPLUS + +/* I */ +#define ICON_EXT_ICO ICON_PICTUREFILE +#define ICON_EXT_IMG ICON_PICTUREFILE +#define ICON_EXT_INI ICON_CONFIGURE +#define ICON_EXT_ISO ICON_OPTICALDISK + +/* J */ +#define ICON_EXT_JAR ICON_JAVA +#define ICON_EXT_JAVA ICON_JAVA +#define ICON_EXT_JL ICON_CONFIGURE +#define ICON_EXT_JPEG ICON_PICTUREFILE +#define ICON_EXT_JPG ICON_PICTUREFILE +#define ICON_EXT_JS ICON_JAVASCRIPT +#define ICON_EXT_JSON "\ufb25" +#define ICON_EXT_JSX ICON_REACT + +/* K */ + +/* L */ +#define ICON_EXT_LHA ICON_ARCHIVE +#define ICON_EXT_LOG ICON_DOCUMENT +#define ICON_EXT_LUA "\ue620" +#define ICON_EXT_LZH ICON_ARCHIVE +#define ICON_EXT_LZMA ICON_ARCHIVE + +/* M */ +#define ICON_EXT_M4A ICON_MUSICFILE +#define ICON_EXT_M4V ICON_VIDEOFILE +#define ICON_EXT_MD "\ue609" +#define ICON_EXT_MK ICON_MAKEFILE +#define ICON_EXT_MKV ICON_VIDEOFILE +#define ICON_EXT_MOV ICON_VIDEOFILE +#define ICON_EXT_MP3 ICON_MUSICFILE +#define ICON_EXT_MP4 ICON_VIDEOFILE +#define ICON_EXT_MPEG ICON_VIDEOFILE +#define ICON_EXT_MPG ICON_VIDEOFILE +#define ICON_EXT_MSI "\ufab2" + +/* N */ + +/* O */ +#define ICON_EXT_O ICON_MANUAL +#define ICON_EXT_OGG ICON_MUSICFILE +#define ICON_EXT_ODOWNLOAD ICON_DOWNLOADS +#define ICON_EXT_OUT ICON_LINUX + +/* P */ +#define ICON_EXT_PART ICON_DOWNLOADS +#define ICON_EXT_PATCH "\ufa59" +#define ICON_EXT_PDF "\uf724" +#define ICON_EXT_PHP "\ue73d" +#define ICON_EXT_PNG ICON_PICTUREFILE +#define ICON_EXT_PPT "\uf726" +#define ICON_EXT_PPTX "\uf726" +#define ICON_EXT_PSB "\ue7b8" +#define ICON_EXT_PSD "\ue7b8" +#define ICON_EXT_PY ICON_PYTHON +#define ICON_EXT_PYC ICON_PYTHON +#define ICON_EXT_PYD ICON_PYTHON +#define ICON_EXT_PYO ICON_PYTHON + +/* Q */ + +/* R */ +#define ICON_EXT_RAR ICON_ARCHIVE +#define ICON_EXT_RC ICON_CONFIGURE +#define ICON_EXT_ROM "\uf795" +#define ICON_EXT_RPM ICON_ARCHIVE +#define ICON_EXT_RSS "\uf96b" +#define ICON_EXT_RTF "\uf724" + +/* S */ +#define ICON_EXT_SASS "\ue603" +#define ICON_EXT_SCSS "\ue603" +#define ICON_EXT_SO ICON_MANUAL +#define ICON_EXT_SCALA "\ue737" +#define ICON_EXT_SH ICON_SCRIPT +#define ICON_EXT_SLIM ICON_SCRIPT +#define ICON_EXT_SLN "\ue70c" +#define ICON_EXT_SQL ICON_DATABASE +#define ICON_EXT_SRT "\uf679" +#define ICON_EXT_SUB "\uf679" +#define ICON_EXT_SVG ICON_PICTUREFILE + +/* T */ +#define ICON_EXT_TAR ICON_ARCHIVE +#define ICON_EXT_TEX "\uf6fc" +#define ICON_EXT_TGZ ICON_ARCHIVE +#define ICON_EXT_TS "\ue628" +#define ICON_EXT_TSX ICON_REACT +#define ICON_EXT_TXT ICON_DOCUMENT +#define ICON_EXT_TXZ ICON_ARCHIVE + +/* U */ + +/* V */ +#define ICON_EXT_VID ICON_VIDEOFILE +#define ICON_EXT_VIM "\ue62b" +#define ICON_EXT_VIMRC "\ue62b" + +/* W */ +#define ICON_EXT_WAV ICON_MUSICFILE +#define ICON_EXT_WEBM ICON_VIDEOFILE +#define ICON_EXT_WMA ICON_VIDEOFILE +#define ICON_EXT_WMV ICON_VIDEOFILE + +/* X */ +#define ICON_EXT_XBPS ICON_ARCHIVE +#define ICON_EXT_XHTML ICON_HTML +#define ICON_EXT_XLS "\uf71a" +#define ICON_EXT_XLSX "\uf71a" +#define ICON_EXT_XML ICON_HTML +#define ICON_EXT_XZ ICON_ARCHIVE + +/* Y */ +#define ICON_EXT_YAML ICON_CONFIGURE +#define ICON_EXT_YML ICON_CONFIGURE + +/* Z */ +#define ICON_EXT_ZIP ICON_ARCHIVE + +#endif // ICONS_NERDFONT diff --git a/src/icons.h b/src/icons.h index 255ad37b..c735c246 100644 --- a/src/icons.h +++ b/src/icons.h @@ -1,4 +1,10 @@ +#pragma once + +#if defined(ICONS) #include "icons-in-terminal.h" +#elif defined(NERD) +#include "icons-nerdfont.h" +#endif struct icon_pair { const char *match; @@ -6,6 +12,7 @@ struct icon_pair { /* * 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 */ const unsigned char color; }; @@ -18,11 +25,23 @@ struct icon_pair { #define ICON_PADDING_LEFT "" #define ICON_PADDING_RIGHT " " -#define VIDEO_COLOR 93 /* Purple */ -#define AUDIO_COLOR 220 /* Gold1 */ -#define IMAGE_COLOR 82 /* Chartreuse2 */ -#define BOOKS_COLOR 202 /* OrangeRed1 */ -#define ARCHIVE_COLOR 209 /* Salmon1 */ +#define COLOR_VIDEO 93 /* Purple */ +#define COLOR_AUDIO 220 /* Gold1 */ +#define COLOR_IMAGE 82 /* Chartreuse2 */ +#define COLOR_BOOKS 202 /* OrangeRed1 */ +#define COLOR_ARCHIVE 209 /* Salmon1 */ +#define COLOR_C 81 /* SteelBlue1 */ +#define COLOR_JAVA 32 /* DeepSkyBlue3 */ +#define COLOR_JAVASCRIPT 47 /* SpringGreen2 */ +#define COLOR_REACT 39 /* DeepSkyBlue1 */ +#define COLOR_CSS 199 /* DeepPink1 */ +#define COLOR_PYTHON 227 /* LightGoldenrod1 */ +#define COLOR_LUA 19 /* LightGoldenrod1 */ +#define COLOR_DOCUMENT 15 /* WHITE */ +#define COLOR_FSHARP 31 /* DeepSkyBlue3 */ +#define COLOR_RUBY 160 /* Red3 */ +#define COLOR_SCALA 196 /* Red1 */ +#define COLOR_VIM 28 /* Green4 */ /* * Using symbols defined in icons-in-terminal.h, or even using icons-in-terminal is not necessary. @@ -30,13 +49,20 @@ struct icon_pair { * If you are using icons-in-terminal the creator recommends that you do use the symbols in the generated header. */ +#if defined(ICONS) static const struct icon_pair dir_icon = {"", FA_FOLDER, 0}; static const struct icon_pair file_icon = {"", FA_FILE_O, 0}; static const struct icon_pair exec_icon = {"", FA_COG, 0}; +#elif defined(NERD) +static const struct icon_pair dir_icon = {"", ICON_DIRECTORY, 0}; +static const struct icon_pair file_icon = {"", ICON_FILE, 0}; +static const struct icon_pair exec_icon = {"", ICON_EXEC, 0}; +#endif /* All entries are case-insensitive */ static const struct icon_pair icons_name[] = { +#if defined(ICONS) {".git", FA_GIT, 0}, {"Desktop", FA_DESKTOP, 0}, {"Documents", FA_BRIEFCASE, 0}, @@ -50,6 +76,21 @@ static const struct icon_pair icons_name[] = { {"configure", FILE_CONFIG, 0}, {"License", FA_COPYRIGHT, 0}, {"Makefile", FILE_CMAKE, 0}, +#elif defined(NERD) + {".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, 0}, + {"configure", ICON_CONFIGURE, 0}, + {"License", ICON_LICENSE, 0}, + {"Makefile", ICON_MAKEFILE, 0}, +#endif }; /* @@ -59,29 +100,30 @@ static const struct icon_pair icons_name[] = { */ static const struct icon_pair icons_ext[] = { +#if defined(ICONS) /* Numbers */ {"1", FILE_MANPAGE, 0}, - {"7z", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"7z", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, /* A */ {"a", FILE_MANPAGE, 0}, - {"apk", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"apk", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"asm", FILE_NASM, 0}, - {"aup", FA_FILE_AUDIO_O, AUDIO_COLOR}, - {"avi", FA_FILE_MOVIE_O, VIDEO_COLOR}, + {"aup", FA_FILE_AUDIO_O, COLOR_AUDIO}, + {"avi", FA_FILE_MOVIE_O, COLOR_VIDEO}, /* B */ {"bat", MFIZZ_SCRIPT, 0}, {"bin", OCT_FILE_BINARY, 0}, - {"bmp", FA_FILE_IMAGE_O, IMAGE_COLOR}, - {"bz2", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"bmp", FA_FILE_IMAGE_O, COLOR_IMAGE}, + {"bz2", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, /* C */ {"c", MFIZZ_C, 0}, {"c++", MFIZZ_CPLUSPLUS, 0}, - {"cab", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, - {"cbr", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, - {"cbz", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"cab", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, + {"cbr", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, + {"cbz", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"cc", MFIZZ_CPLUSPLUS, 0}, {"class", MFIZZ_JAVA, 0}, {"clj", MFIZZ_CLOJURE, 0}, @@ -90,16 +132,16 @@ static const struct icon_pair icons_ext[] = { {"cmake", FILE_CMAKE, 0}, {"coffee", MFIZZ_COFFEE_BEAN, 0}, {"conf", FA_COGS, 0}, - {"cpio", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"cpio", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"cpp", MFIZZ_CPLUSPLUS, 0}, {"css", MFIZZ_CSS3, 0}, - {"cue", FA_FILE_AUDIO_O, AUDIO_COLOR}, + {"cue", FA_FILE_AUDIO_O, COLOR_AUDIO}, {"cvs", FA_COGS, 0}, {"cxx", MFIZZ_CPLUSPLUS, 0}, /* D */ {"db", MFIZZ_DATABASE_ALT2, 0}, - {"deb", MFIZZ_DEBIAN, ARCHIVE_COLOR}, + {"deb", MFIZZ_DEBIAN, COLOR_ARCHIVE}, {"diff", FILE_DIFF, 0}, {"dll", FILE_MANPAGE, 0}, {"doc", FILE_WORD, 0}, @@ -108,13 +150,13 @@ static const struct icon_pair icons_ext[] = { /* E */ {"ejs", FA_FILE_CODE_O, 0}, {"elf", FA_LINUX, 0}, - {"epub", FA_FILE_PDF_O, BOOKS_COLOR}, + {"epub", FA_FILE_PDF_O, COLOR_BOOKS}, {"exe", FA_WINDOWS, 0}, /* F */ {"f#", DEV_FSHARP, 0}, - {"flac", FA_FILE_AUDIO_O, AUDIO_COLOR}, - {"flv", FA_FILE_MOVIE_O, VIDEO_COLOR}, + {"flac", FA_FILE_AUDIO_O, COLOR_AUDIO}, + {"flv", FA_FILE_MOVIE_O, COLOR_VIDEO}, {"fs", DEV_FSHARP, 0}, {"fsi", DEV_FSHARP, 0}, {"fsscript", DEV_FSHARP, 0}, @@ -122,10 +164,10 @@ static const struct icon_pair icons_ext[] = { /* G */ {"gem", FA_FILE_ARCHIVE_O, 0}, - {"gif", FA_FILE_IMAGE_O, IMAGE_COLOR}, + {"gif", FA_FILE_IMAGE_O, COLOR_IMAGE}, {"go", MFIZZ_GO, 0}, - {"gz", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, - {"gzip", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"gz", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, + {"gzip", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, /* H */ {"h", MFIZZ_C, 0}, @@ -137,17 +179,17 @@ static const struct icon_pair icons_ext[] = { {"hxx", MFIZZ_CPLUSPLUS, 0}, /* I */ - {"ico", FA_FILE_IMAGE_O, IMAGE_COLOR}, - {"img", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"ico", FA_FILE_IMAGE_O, COLOR_IMAGE}, + {"img", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"ini", FA_COGS, 0}, - {"iso", LINEA_MUSIC_CD, ARCHIVE_COLOR}, + {"iso", LINEA_MUSIC_CD, COLOR_ARCHIVE}, /* J */ {"jar", MFIZZ_JAVA, 0}, {"java", MFIZZ_JAVA, 0}, {"jl", FA_COGS, 0}, - {"jpeg", FA_FILE_IMAGE_O, IMAGE_COLOR}, - {"jpg", FA_FILE_IMAGE_O, IMAGE_COLOR}, + {"jpeg", FA_FILE_IMAGE_O, COLOR_IMAGE}, + {"jpg", FA_FILE_IMAGE_O, COLOR_IMAGE}, {"js", DEV_JAVASCRIPT_BADGE, 0}, {"json", MFIZZ_JAVASCRIPT, 0}, {"jsx", FILE_JSX, 0}, @@ -155,40 +197,40 @@ static const struct icon_pair icons_ext[] = { /* K */ /* L */ - {"lha", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"lha", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"log", FA_FILE_TEXT_O, 0}, {"lua", FILE_LUA, 0}, - {"lzh", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, - {"lzma", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"lzh", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, + {"lzma", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, /* M */ - {"m4a", FA_FILE_AUDIO_O, AUDIO_COLOR}, - {"m4v", FA_FILE_MOVIE_O, VIDEO_COLOR}, + {"m4a", FA_FILE_AUDIO_O, COLOR_AUDIO}, + {"m4v", FA_FILE_MOVIE_O, COLOR_VIDEO}, {"markdown", DEV_MARKDOWN, 0}, {"md", DEV_MARKDOWN, 0}, {"mk", FILE_CMAKE, 0}, - {"mkv", FA_FILE_MOVIE_O, VIDEO_COLOR}, - {"mov", FA_FILE_MOVIE_O, VIDEO_COLOR}, - {"mp3", FA_FILE_AUDIO_O, AUDIO_COLOR}, - {"mp4", FA_FILE_MOVIE_O, VIDEO_COLOR}, - {"mpeg", FA_FILE_MOVIE_O, VIDEO_COLOR}, - {"mpg", FA_FILE_MOVIE_O, VIDEO_COLOR}, + {"mkv", FA_FILE_MOVIE_O, COLOR_VIDEO}, + {"mov", FA_FILE_MOVIE_O, COLOR_VIDEO}, + {"mp3", FA_FILE_AUDIO_O, COLOR_AUDIO}, + {"mp4", FA_FILE_MOVIE_O, COLOR_VIDEO}, + {"mpeg", FA_FILE_MOVIE_O, COLOR_VIDEO}, + {"mpg", FA_FILE_MOVIE_O, COLOR_VIDEO}, {"msi", FA_WINDOWS, 0}, /* N */ /* O */ {"o", FILE_MANPAGE, 0}, - {"ogg", FA_FILE_AUDIO_O, AUDIO_COLOR}, + {"ogg", FA_FILE_AUDIO_O, COLOR_AUDIO}, {"opdownload", FA_DOWNLOAD, 0}, {"out", FA_LINUX, 0}, /* P */ {"part", FA_DOWNLOAD, 0}, {"patch", FILE_PATCH, 0}, - {"pdf", FA_FILE_PDF_O, BOOKS_COLOR}, + {"pdf", FA_FILE_PDF_O, COLOR_BOOKS}, {"php", MFIZZ_PHP, 0}, - {"png", FA_FILE_IMAGE_O, IMAGE_COLOR}, + {"png", FA_FILE_IMAGE_O, COLOR_IMAGE}, {"ppt", FILE_POWERPOINT, 0}, {"pptx", FILE_POWERPOINT, 0}, {"psb", DEV_PHOTOSHOP, 0}, @@ -201,10 +243,10 @@ static const struct icon_pair icons_ext[] = { /* Q */ /* R */ - {"rar", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"rar", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"rc", FA_COGS, 0}, {"rom", FA_LOCK, 0}, - {"rpm", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"rpm", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"rss", FA_RSS_SQUARE, 0}, {"rtf", FA_FILE_PDF_O, 0}, @@ -217,44 +259,246 @@ static const struct icon_pair icons_ext[] = { {"sql", MFIZZ_MYSQL, 0}, {"srt", FA_COMMENTS_O, 0}, {"sub", FA_COMMENTS_O, 0}, - {"svg", FA_FILE_IMAGE_O, IMAGE_COLOR}, + {"svg", FA_FILE_IMAGE_O, COLOR_IMAGE}, /* T */ - {"tar", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"tar", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"tex", FILE_TEX, 0}, - {"tgz", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"tgz", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"ts", FILE_TS, 0}, {"tsx", FILE_TSX, 0}, {"txt", FA_FILE_TEXT_O, 0}, - {"txz", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"txz", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, /* U */ /* V */ - {"vid", FA_FILE_MOVIE_O, VIDEO_COLOR}, + {"vid", FA_FILE_MOVIE_O, COLOR_VIDEO}, {"vim", DEV_VIM, 0}, {"vimrc", DEV_VIM, 0}, /* W */ - {"wav", FA_FILE_AUDIO_O, AUDIO_COLOR}, - {"webm", FA_FILE_MOVIE_O, VIDEO_COLOR}, - {"wma", FA_FILE_AUDIO_O, AUDIO_COLOR}, - {"wmv", FA_FILE_MOVIE_O, VIDEO_COLOR}, + {"wav", FA_FILE_AUDIO_O, COLOR_AUDIO}, + {"webm", FA_FILE_MOVIE_O, COLOR_VIDEO}, + {"wma", FA_FILE_AUDIO_O, COLOR_AUDIO}, + {"wmv", FA_FILE_MOVIE_O, COLOR_VIDEO}, /* X */ - {"xbps", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"xbps", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, {"xhtml", FA_FILE_CODE_O, 0}, {"xls", FILE_EXCEL, 0}, {"xlsx", FILE_EXCEL, 0}, {"xml", FA_FILE_CODE_O, 0}, - {"xz", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR}, + {"xz", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, /* Y */ {"yaml", FA_COGS, 0}, {"yml", FA_COGS, 0}, /* Z */ - {"zip", FA_FILE_ARCHIVE_O, ARCHIVE_COLOR} + {"zip", FA_FILE_ARCHIVE_O, COLOR_ARCHIVE}, /* Other */ +#elif defined(NERD) + /* Numbers */ + {"1", ICON_EXT_1, 0}, + {"7z", ICON_EXT_7Z, COLOR_ARCHIVE}, + + /* A */ + {"a", ICON_EXT_A, 0}, + {"apk", ICON_EXT_APK, COLOR_ARCHIVE}, + {"asm", ICON_EXT_ASM, 0}, + {"aup", ICON_EXT_AUP, COLOR_AUDIO}, + {"avi", ICON_EXT_AVI, COLOR_VIDEO}, + + /* B */ + {"bat", ICON_EXT_BAT, 0}, + {"bin", ICON_EXT_BIN, 0}, + {"bmp", ICON_EXT_BMP, COLOR_IMAGE}, + {"bz2", ICON_EXT_BZ2, COLOR_ARCHIVE}, + + /* C */ + {"c", ICON_EXT_C, COLOR_C}, + {"c++", ICON_EXT_CPLUSPLUS, COLOR_C}, + {"cab", ICON_EXT_CAB, COLOR_ARCHIVE}, + {"cbr", ICON_EXT_CBR, COLOR_ARCHIVE}, + {"cbz", ICON_EXT_CBZ, COLOR_ARCHIVE}, + {"cc", ICON_EXT_CC, COLOR_C}, + {"class", ICON_EXT_CLASS, COLOR_JAVA}, + {"clj", ICON_EXT_CLJ, 0}, + {"cljc", ICON_EXT_CLJC, 0}, + {"cljs", ICON_EXT_CLJS, 0}, + {"cmake", ICON_EXT_CMAKE, 0}, + {"coffee", ICON_EXT_COFFEE, 0}, + {"conf", ICON_EXT_CONF, 0}, + {"cpio", ICON_EXT_CPIO, COLOR_ARCHIVE}, + {"cpp", ICON_EXT_CPP, 0}, + {"css", ICON_EXT_CSS, COLOR_CSS}, + {"cue", ICON_EXT_CUE, COLOR_AUDIO}, + {"cvs", ICON_EXT_CVS, 0}, + {"cxx", ICON_EXT_CXX, COLOR_C}, + + /* D */ + {"db", ICON_EXT_DB, 0}, + {"deb", ICON_EXT_DEB, COLOR_ARCHIVE}, + {"diff", ICON_EXT_DIFF, 0}, + {"dll", ICON_EXT_DLL, 0}, + {"doc", ICON_EXT_DOC, COLOR_DOCUMENT}, + {"docx", ICON_EXT_DOCX, COLOR_DOCUMENT}, + + /* E */ + {"ejs", ICON_EXT_EJS, COLOR_JAVASCRIPT}, + {"elf", ICON_EXT_ELF, 0}, + {"epub", ICON_EXT_EPUB, COLOR_BOOKS}, + {"exe", ICON_EXT_EXE, 0}, + + /* F */ + {"f#", ICON_EXT_FSHARP, COLOR_FSHARP}, + {"flac", ICON_EXT_FLAC, COLOR_AUDIO}, + {"flv", ICON_EXT_FLV, COLOR_VIDEO}, + {"fs", ICON_EXT_FS, COLOR_FSHARP}, + {"fsi", ICON_EXT_FSI, COLOR_FSHARP}, + {"fsscript", ICON_EXT_FSSCRIPT, COLOR_FSHARP}, + {"fsx", ICON_EXT_FSX, COLOR_FSHARP}, + + /* G */ + {"gem", ICON_EXT_GEM, COLOR_RUBY}, + {"gif", ICON_EXT_GIF, COLOR_IMAGE}, + {"go", ICON_EXT_GO, 0}, + {"gz", ICON_EXT_GZ, COLOR_ARCHIVE}, + {"gzip", ICON_EXT_GZIP, COLOR_ARCHIVE}, + + /* H */ + {"h", ICON_EXT_H, COLOR_C}, + {"hh", ICON_EXT_HH, COLOR_C}, + {"htaccess", ICON_EXT_HTACCESS, 0}, + {"htpasswd", ICON_EXT_HTPASSWD, 0}, + {"htm", ICON_EXT_HTM, 0}, + {"html", ICON_EXT_HTML, 0}, + {"hxx", ICON_EXT_HXX, COLOR_C}, + + /* I */ + {"ico", ICON_EXT_ICO, COLOR_IMAGE}, + {"img", ICON_EXT_IMG, COLOR_ARCHIVE}, + {"ini", ICON_EXT_INI, 0}, + {"iso", ICON_EXT_ISO, COLOR_ARCHIVE}, + + /* J */ + {"jar", ICON_EXT_JAR, COLOR_JAVA}, + {"java", ICON_EXT_JAVA, COLOR_JAVA}, + {"jl", ICON_EXT_JL, 0}, + {"jpeg", ICON_EXT_JPEG, COLOR_IMAGE}, + {"jpg", ICON_EXT_JPG, COLOR_IMAGE}, + {"js", ICON_EXT_JS, COLOR_JAVASCRIPT}, + {"json", ICON_EXT_JSON, COLOR_JAVASCRIPT}, + {"jsx", ICON_EXT_JSX, COLOR_REACT}, + + /* K */ + + /* L */ + {"lha", ICON_EXT_LHA, COLOR_ARCHIVE}, + {"log", ICON_EXT_LOG, 0}, + {"lua", ICON_EXT_LUA, 0}, + {"lzh", ICON_EXT_LZH, COLOR_ARCHIVE}, + {"lzma", ICON_EXT_LZMA, COLOR_ARCHIVE}, + + /* M */ + {"m4a", ICON_EXT_M4A, COLOR_AUDIO}, + {"m4v", ICON_EXT_M4V, COLOR_VIDEO}, + {"markdown", ICON_EXT_MD, 0}, + {"md", ICON_EXT_MD, 0}, + {"mk", ICON_EXT_MK, 0}, + {"mkv", ICON_EXT_MKV, COLOR_VIDEO}, + {"mov", ICON_EXT_MOV, COLOR_VIDEO}, + {"mp3", ICON_EXT_MP3, COLOR_AUDIO}, + {"mp4", ICON_EXT_MP4, COLOR_VIDEO}, + {"mpeg", ICON_EXT_MPEG, COLOR_VIDEO}, + {"mpg", ICON_EXT_MPG, COLOR_VIDEO}, + {"msi", ICON_EXT_MSI, 0}, + + /* N */ + + /* O */ + {"o", ICON_EXT_O, 0}, + {"ogg", ICON_EXT_OGG, COLOR_AUDIO}, + {"opdownload", ICON_EXT_ODOWNLOAD, 0}, + {"out", ICON_EXT_OUT, 0}, + + /* P */ + {"part", ICON_EXT_PART, 0}, + {"patch", ICON_EXT_PATCH, 0}, + {"pdf", ICON_EXT_PDF, COLOR_BOOKS}, + {"php", ICON_EXT_PHP, 0}, + {"png", ICON_EXT_PNG, COLOR_IMAGE}, + {"ppt", ICON_EXT_PPT, 0}, + {"pptx", ICON_EXT_PPTX, 0}, + {"psb", ICON_EXT_PSB, 0}, + {"psd", ICON_EXT_PSD, 0}, + {"py", ICON_EXT_PY, COLOR_PYTHON}, + {"pyc", ICON_EXT_PYC, COLOR_PYTHON}, + {"pyd", ICON_EXT_PYD, COLOR_PYTHON}, + {"pyo", ICON_EXT_PYO, COLOR_PYTHON}, + + /* Q */ + + /* R */ + {"rar", ICON_EXT_RAR, COLOR_ARCHIVE}, + {"rc", ICON_EXT_RC, 0}, + {"rom", ICON_EXT_ROM, 0}, + {"rpm", ICON_EXT_RPM, COLOR_ARCHIVE}, + {"rss", ICON_EXT_RSS, 0}, + {"rtf", ICON_EXT_RTF, 0}, + + /* S */ + {"sass", ICON_EXT_SASS, COLOR_CSS}, + {"scss", ICON_EXT_SCSS, COLOR_CSS}, + {"so", ICON_EXT_SO, 0}, + {"scala", ICON_EXT_SCALA, COLOR_SCALA}, + {"sh", ICON_EXT_SH, 0}, + {"slim", ICON_EXT_SLIM, COLOR_DOCUMENT}, + {"sln", ICON_EXT_SLN, 0}, + {"sql", ICON_EXT_SQL, 0}, + {"srt", ICON_EXT_SRT, 0}, + {"sub", ICON_EXT_SUB, 0}, + {"svg", ICON_EXT_SVG, COLOR_IMAGE}, + + /* T */ + {"tar", ICON_EXT_TAR, COLOR_ARCHIVE}, + {"tex", ICON_EXT_TEX, 0}, + {"tgz", ICON_EXT_TGZ, COLOR_ARCHIVE}, + {"ts", ICON_EXT_TS, COLOR_JAVASCRIPT}, + {"tsx", ICON_EXT_TSX, COLOR_REACT}, + {"txt", ICON_EXT_TXT, COLOR_DOCUMENT}, + {"txz", ICON_EXT_TXZ, COLOR_ARCHIVE}, + + /* U */ + + /* V */ + {"vid", ICON_EXT_VID, COLOR_VIDEO}, + {"vim", ICON_EXT_VIM, COLOR_VIM}, + {"vimrc", ICON_EXT_VIMRC, COLOR_VIM}, + + /* W */ + {"wav", ICON_EXT_WAV, COLOR_AUDIO}, + {"webm", ICON_EXT_WEBM, COLOR_VIDEO}, + {"wma", ICON_EXT_WMA, COLOR_AUDIO}, + {"wmv", ICON_EXT_WMV, COLOR_VIDEO}, + + /* X */ + {"xbps", ICON_EXT_XBPS, COLOR_ARCHIVE}, + {"xhtml", ICON_EXT_XHTML, 0}, + {"xls", ICON_EXT_XLS, 0}, + {"xlsx", ICON_EXT_XLSX, 0}, + {"xml", ICON_EXT_XML, 0}, + {"xz", ICON_EXT_XZ, COLOR_ARCHIVE}, + + /* Y */ + {"yaml", ICON_EXT_YAML, COLOR_DOCUMENT}, + {"yml", ICON_EXT_YML, COLOR_DOCUMENT}, + + /* Z */ + {"zip", ICON_EXT_ZIP, COLOR_ARCHIVE}, + + /* Other */ +#endif }; diff --git a/src/nnn.c b/src/nnn.c index 5b307fd6..8de6021b 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -112,8 +112,9 @@ #include "nnn.h" #include "dbg.h" -#ifdef ICONS +#if defined(ICONS) || defined(NERD) #include "icons.h" +#define ICONS_ENABLED #endif #ifdef TOURBIN_QSORT @@ -691,7 +692,7 @@ static const char * const patterns[] = { #define C_SOC (C_PIP + 1) /* Socket: MediumOrchid1 */ #define C_UND (C_SOC + 1) /* Unknown OR 0B regular/exe file: Red1 */ -#ifdef ICONS +#ifdef ICONS_ENABLED /* 0-9, A-Z, OTHER = 36. */ static ushort icon_positions[37]; #endif @@ -1739,7 +1740,7 @@ static bool initcurses(void *oldmask) } } -#ifdef ICONS +#ifdef ICONS_ENABLED if (!g_state.oldcolor) { uchar icolors[256] = {0}; char c; @@ -3480,7 +3481,7 @@ static char *get_lsperms(mode_t mode) return bits; } -#ifdef ICONS +#ifdef ICONS_ENABLED static const struct icon_pair * get_icon(const struct entry *ent){ ushort i = 0; @@ -3626,7 +3627,7 @@ static void printent(const struct entry *ent, uint namecols, bool sel) addch((ent->flags & FILE_SELECTED) ? '+' : ' '); -#ifdef ICONS +#ifdef ICONS_ENABLED if (!g_state.oldcolor) print_icon(ent, attrs); #endif @@ -3758,7 +3759,7 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel) attrs ^= A_DIM; } } else { -#ifndef ICONS +#ifndef ICONS_ENABLED addstr(" "); #endif if (ent->flags & FILE_MISSING) @@ -3770,7 +3771,7 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel) if (pair && fcolors[pair]) attrs |= COLOR_PAIR(pair); -#ifdef ICONS +#ifdef ICONS_ENABLED attroff(attrs); addstr(" "); if (sel) @@ -5573,7 +5574,7 @@ static int adjust_cols(int ncols) } /* 3 = Preceding space, indicator, newline */ -#ifdef ICONS +#ifdef ICONS_ENABLED ncols -= 3 + xstrlen(ICON_PADDING_LEFT) + xstrlen(ICON_PADDING_RIGHT) + 1; #else ncols -= 3;