icons.rs 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842
  1. use nu_ansi_term::Style;
  2. use phf::{phf_map, Map};
  3. use crate::fs::File;
  4. #[non_exhaustive]
  5. struct Icons;
  6. #[rustfmt::skip]
  7. impl Icons {
  8. const AUDIO: char = '\u{f001}'; // ๏€
  9. const BINARY: char = '\u{eae8}'; // ๎ซจ
  10. const BOOK: char = '\u{e28b}'; // ๎Š‹
  11. const CALENDAR: char = '\u{eab0}'; // ๎ชฐ
  12. const CLOCK: char = '\u{f43a}'; // ๏บ
  13. const COMPRESSED: char = '\u{f410}'; // ๏
  14. const CONFIG: char = '\u{e615}'; // ๎˜•
  15. const CSS3: char = '\u{e749}'; // ๎‰
  16. const DATABASE: char = '\u{f1c0}'; // ๎œ†
  17. const DIFF: char = '\u{f440}'; // ๏‘€
  18. const DISK_IMAGE: char = '\u{e271}'; // ๎‰ฑ
  19. const DOCKER: char = '\u{e650}'; // ๎™
  20. const DOCUMENT: char = '\u{f1c2}'; // ๏‡‚
  21. const DOWNLOAD: char = '\u{f01da}'; // ๓ฐ‡š
  22. const EMACS: char = '\u{e632}'; // ๎˜ฒ
  23. const ESLINT: char = '\u{e655}'; // ๎™•
  24. const FILE: char = '\u{f15b}'; // ๏…›
  25. const FILE_3D: char = '\u{f01a7}'; // ๓ฐ†ง
  26. const FILE_OUTLINE: char = '\u{f016}'; // ๏€–
  27. const FOLDER: char = '\u{e5ff}'; // ๎—ฟ
  28. const FOLDER_CONFIG: char = '\u{e5fc}'; // ๎—ผ
  29. const FOLDER_GIT: char = '\u{e5fb}'; // ๎—ป
  30. const FOLDER_GITHUB: char = '\u{e5fd}'; // ๎—ฝ
  31. const FOLDER_HIDDEN: char = '\u{f179e}'; // ๓ฑžž
  32. const FOLDER_KEY: char = '\u{f08ac}'; // ๓ฐขฌ
  33. const FOLDER_NPM: char = '\u{e5fa}'; // ๎—บ
  34. const FOLDER_OPEN: char = '\u{f115}'; // ๏„•
  35. const FONT: char = '\u{f031}'; // ๏€ฑ
  36. const GIST_SECRET: char = '\u{eafa}'; // ๎ซบ
  37. const GIT: char = '\u{f1d3}'; // ๏‡“
  38. const GODOT: char = '\u{e65f}'; // ๎™Ÿ
  39. const GRADLE: char = '\u{e660}'; // ๎™ 
  40. const GRAPHQL: char = '\u{e662}'; // ๎™ข
  41. const GRUNT: char = '\u{e611}'; // ๎˜‘
  42. const GULP: char = '\u{e610}'; // ๎˜
  43. const HTML5: char = '\u{f13b}'; // ๏„ป
  44. const IMAGE: char = '\u{f1c5}'; // ๏‡…
  45. const INTELLIJ: char = '\u{e7b5}'; // ๎žต
  46. const JSON: char = '\u{e60b}'; // ๎˜‹
  47. const KEY: char = '\u{eb11}'; // ๎ฌ‘
  48. const KEYPASS: char = '\u{f23e}'; // ๏ˆพ
  49. const LANG_ASSEMBLY: char = '\u{e637}'; // ๎˜ท
  50. const LANG_C: char = '\u{e61e}'; // ๎˜ž
  51. const LANG_CPP: char = '\u{e61d}'; // ๎˜
  52. const LANG_CSHARP: char = '\u{f031b}'; // ๓ฐŒ›
  53. const LANG_D: char = '\u{e7af}'; // ๎žฏ
  54. const LANG_ELIXIR: char = '\u{e62d}'; // ๎˜ญ
  55. const LANG_FENNEL: char = '\u{e6af}'; // ๎šฏ
  56. const LANG_FORTRAN: char = '\u{f121a}'; // ๓ฑˆš
  57. const LANG_FSHARP: char = '\u{e7a7}'; // ๎žง
  58. const LANG_GO: char = '\u{e65e}'; // ๎™ž
  59. const LANG_GROOVY: char = '\u{e775}'; // ๎ต
  60. const LANG_HASKELL: char = '\u{e777}'; // ๎ท
  61. const LANG_JAVA: char = '\u{e256}'; // ๎‰–
  62. const LANG_JAVASCRIPT: char = '\u{e74e}'; // ๎Ž
  63. const LANG_KOTLIN: char = '\u{e634}'; // ๎˜ด
  64. const LANG_NIM: char = '\u{e677}'; // ๎™ท
  65. const LANG_OCAML: char = '\u{e67a}'; // ๎™บ
  66. const LANG_PERL: char = '\u{e67e}'; // ๎™พ
  67. const LANG_PHP: char = '\u{e73d}'; // ๎œฝ
  68. const LANG_PYTHON: char = '\u{e606}'; // ๎˜†
  69. const LANG_R: char = '\u{e68a}'; // ๎šŠ
  70. const LANG_RUBY: char = '\u{e21e}'; // ๎ˆž
  71. const LANG_RUBYRAILS: char = '\u{e73b}'; // ๎œป
  72. const LANG_RUST: char = '\u{e68b}'; // ๎š‹
  73. const LANG_SASS: char = '\u{e603}'; // ๎˜ƒ
  74. const LANG_SCHEME: char = '\u{e6b1}'; // ๎šฑ
  75. const LANG_STYLUS: char = '\u{e600}'; // ๎˜€
  76. const LANG_TEX: char = '\u{e69b}'; // ๎š›
  77. const LANG_TYPESCRIPT: char = '\u{e628}'; // ๎˜จ
  78. const LANG_V: char = '\u{e6ac}'; // ๎šฌ
  79. const LIBRARY: char = '\u{eb9c}'; // ๎ฎœ
  80. const LICENSE: char = '\u{f02d}'; // ๏€ญ
  81. const LOCK: char = '\u{f023}'; // ๏€ฃ
  82. const MAKE: char = '\u{e673}'; // ๎™ณ
  83. const MARKDOWN: char = '\u{f48a}'; // ๏’Š
  84. const MUSTACHE: char = '\u{e60f}'; // ๎˜
  85. const NODEJS: char = '\u{e718}'; // ๎œ˜
  86. const NPM: char = '\u{e71e}'; // ๎œž
  87. const OS_ANDROID: char = '\u{e70e}'; // ๎œŽ
  88. const OS_APPLE: char = '\u{f179}'; // ๏…น
  89. const OS_LINUX: char = '\u{f17c}'; // ๏…ผ
  90. const OS_WINDOWS: char = '\u{f17a}'; // ๏…บ
  91. const OS_WINDOWS_CMD: char = '\u{ebc4}'; // ๎ฏ„
  92. const PLAYLIST: char = '\u{f0cb9}'; // ๓ฐฒน
  93. const POWERSHELL: char = '\u{ebc7}'; // ๎ฏ‡
  94. const PRIVATE_KEY: char = '\u{f0306}'; // ๓ฐŒ†
  95. const PUBLIC_KEY: char = '\u{f0dd6}'; // ๓ฐท–
  96. const RAZOR: char = '\u{f1fa}'; // ๏‡บ
  97. const REACT: char = '\u{e7ba}'; // ๎žบ
  98. const README: char = '\u{f00ba}'; // ๓ฐ‚บ
  99. const SHEET: char = '\u{f1c3}'; // ๏‡ƒ
  100. const SHELL: char = '\u{f1183}'; // ๓ฑ†ƒ
  101. const SHELL_CMD: char = '\u{f489}'; // ๏’‰
  102. const SHIELD_CHECK: char = '\u{f0565}'; // ๓ฐ•ฅ
  103. const SHIELD_KEY: char = '\u{f0bc4}'; // ๓ฐฏ„
  104. const SHIELD_LOCK: char = '\u{f099d}'; // ๓ฐฆ
  105. const SIGNED_FILE: char = '\u{f19c3}'; // ๓ฑงƒ
  106. const SLIDE: char = '\u{f1c4}'; // ๏‡„
  107. const SUBLIME: char = '\u{e7aa}'; // ๎žช
  108. const SUBTITLE: char = '\u{f0a16}'; // ๓ฐจ–
  109. const TERRAFORM: char = '\u{f1062}'; // ๓ฑข
  110. const TEXT: char = '\u{f15c}'; // ๏…œ
  111. const TYPST: char = '\u{1D42D}'; // ๐ญ
  112. const UNITY: char = '\u{e721}'; // ๎œก
  113. const VECTOR: char = '\u{f0559}'; // ๓ฐ•™
  114. const VIDEO: char = '\u{f03d}'; // ๏€ฝ
  115. const VIM: char = '\u{e7c5}'; // ๎Ÿ…
  116. const WRENCH: char = '\u{f0ad}'; // ๏‚ญ
  117. const XML: char = '\u{f05c0}'; // ๓ฐ—€
  118. const YAML: char = '\u{e6a8}'; // ๎šจ
  119. const YARN: char = '\u{e6a7}'; // ๎šง
  120. }
  121. /// Mapping from full filenames to directory icon. This mapping should contain
  122. /// all the directories that have a custom icon.
  123. const DIRECTORY_ICONS: Map<&'static str, char> = phf_map! {
  124. ".config" => Icons::FOLDER_CONFIG, // ๎—ผ
  125. ".git" => Icons::FOLDER_GIT, // ๎—ป
  126. ".github" => Icons::FOLDER_GITHUB, // ๎—ฝ
  127. ".npm" => Icons::FOLDER_NPM, // ๎—บ
  128. ".ssh" => Icons::FOLDER_KEY, // ๓ฐขฌ
  129. ".Trash" => '\u{f1f8}', // ๏‡ธ
  130. "config" => Icons::FOLDER_CONFIG, // ๎—ผ
  131. "Contacts" => '\u{f024c}', // ๓ฐ‰Œ
  132. "cron.d" => Icons::FOLDER_CONFIG, // ๎—ผ
  133. "cron.daily" => Icons::FOLDER_CONFIG, // ๎—ผ
  134. "cron.hourly" => Icons::FOLDER_CONFIG, // ๎—ผ
  135. "cron.monthly" => Icons::FOLDER_CONFIG, // ๎—ผ
  136. "cron.weekly" => Icons::FOLDER_CONFIG, // ๎—ผ
  137. "Desktop" => '\u{f108}', // ๏„ˆ
  138. "Downloads" => '\u{f024d}', // ๓ฐ‰
  139. "etc" => Icons::FOLDER_CONFIG, // ๎—ผ
  140. "Favorites" => '\u{f069d}', // ๓ฐš
  141. "hidden" => Icons::FOLDER_HIDDEN, // ๓ฑžž
  142. "home" => '\u{f10b5}', // ๓ฑ‚ต
  143. "include" => Icons::FOLDER_CONFIG, // ๎—ผ
  144. "Mail" => '\u{f01f0}', // ๓ฐ‡ฐ
  145. "Movies" => '\u{f0fce}', // ๓ฐฟŽ
  146. "Music" => '\u{f1359}', // ๓ฑ™
  147. "node_modules" => Icons::FOLDER_NPM, // ๎—บ
  148. "npm_cache" => Icons::FOLDER_NPM, // ๎—บ
  149. "pam.d" => Icons::FOLDER_KEY, // ๓ฐขฌ
  150. "Pictures" => '\u{f024f}', // ๓ฐ‰
  151. "ssh" => Icons::FOLDER_KEY, // ๓ฐขฌ
  152. "sudoers.d" => Icons::FOLDER_KEY, // ๓ฐขฌ
  153. "Videos" => '\u{f03d}', // ๏€ฝ
  154. "xbps.d" => Icons::FOLDER_CONFIG, // ๎—ผ
  155. "xorg.conf.d" => Icons::FOLDER_CONFIG, // ๎—ผ
  156. "hi" => Icons::BINARY, // ๎ซจ
  157. "cabal" => Icons::LANG_HASKELL, // ๎ท
  158. };
  159. /// Mapping from full filenames to file icon. This mapping should also contain
  160. /// all the "dot" files that have a custom icon.
  161. const FILENAME_ICONS: Map<&'static str, char> = phf_map! {
  162. ".atom" => '\u{e764}', // ๎ค
  163. ".bashrc" => Icons::SHELL, // ๓ฑ†ƒ
  164. ".bash_history" => Icons::SHELL, // ๓ฑ†ƒ
  165. ".bash_logout" => Icons::SHELL, // ๓ฑ†ƒ
  166. ".bash_profile" => Icons::SHELL, // ๓ฑ†ƒ
  167. ".CFUserTextEncoding" => Icons::OS_APPLE, // ๏…น
  168. ".clang-format" => Icons::CONFIG, // ๎˜•
  169. ".cshrc" => Icons::SHELL, // ๓ฑ†ƒ
  170. ".DS_Store" => Icons::OS_APPLE, // ๏…น
  171. ".emacs" => Icons::EMACS, // ๎˜ฒ
  172. ".eslintrc.cjs" => Icons::ESLINT, // ๎™•
  173. ".eslintrc.js" => Icons::ESLINT, // ๎™•
  174. ".eslintrc.json" => Icons::ESLINT, // ๎™•
  175. ".eslintrc.yaml" => Icons::ESLINT, // ๎™•
  176. ".eslintrc.yml" => Icons::ESLINT, // ๎™•
  177. ".fennelrc" => Icons::CONFIG, // ๎˜•
  178. ".gitattributes" => Icons::GIT, // ๏‡“
  179. ".gitconfig" => Icons::GIT, // ๏‡“
  180. ".gitignore" => Icons::GIT, // ๏‡“
  181. ".gitignore_global" => Icons::GIT, // ๏‡“
  182. ".gitlab-ci.yml" => '\u{f296}', // ๏Š–
  183. ".gitmodules" => Icons::GIT, // ๏‡“
  184. ".htaccess" => Icons::CONFIG, // ๎˜•
  185. ".htpasswd" => Icons::CONFIG, // ๎˜•
  186. ".idea" => Icons::INTELLIJ, // ๎žต
  187. ".ideavimrc" => Icons::VIM, // ๎Ÿ…
  188. ".inputrc" => Icons::CONFIG, // ๎˜•
  189. ".kshrc" => Icons::SHELL, // ๓ฑ†ƒ
  190. ".login" => Icons::SHELL, // ๓ฑ†ƒ
  191. ".logout" => Icons::SHELL, // ๓ฑ†ƒ
  192. ".mailmap" => Icons::GIT, // ๏‡“
  193. ".node_repl_history" => Icons::NODEJS, // ๎œ˜
  194. ".npmignore" => Icons::NPM, // ๎œž
  195. ".npmrc" => Icons::NPM, // ๎œž
  196. ".profile" => Icons::SHELL, // ๓ฑ†ƒ
  197. ".python_history" => Icons::LANG_PYTHON, // ๎˜†
  198. ".rustfmt.toml" => Icons::LANG_RUST, // ๎š‹
  199. ".rvm" => Icons::LANG_RUBY, // ๎ˆž
  200. ".rvmrc" => Icons::LANG_RUBY, // ๎ˆž
  201. ".tcshrc" => Icons::SHELL, // ๓ฑ†ƒ
  202. ".viminfo" => Icons::VIM, // ๎Ÿ…
  203. ".vimrc" => Icons::VIM, // ๎Ÿ…
  204. ".Xauthority" => Icons::CONFIG, // ๎˜•
  205. ".xinitrc" => Icons::CONFIG, // ๎˜•
  206. ".Xresources" => Icons::CONFIG, // ๎˜•
  207. ".yarnrc" => Icons::YARN, // ๎šง
  208. ".zlogin" => Icons::SHELL, // ๓ฑ†ƒ
  209. ".zlogout" => Icons::SHELL, // ๓ฑ†ƒ
  210. ".zprofile" => Icons::SHELL, // ๓ฑ†ƒ
  211. ".zshenv" => Icons::SHELL, // ๓ฑ†ƒ
  212. ".zshrc" => Icons::SHELL, // ๓ฑ†ƒ
  213. ".zsh_history" => Icons::SHELL, // ๓ฑ†ƒ
  214. ".zsh_sessions" => Icons::SHELL, // ๓ฑ†ƒ
  215. "._DS_Store" => Icons::OS_APPLE, // ๏…น
  216. "a.out" => Icons::SHELL_CMD, // ๏’‰
  217. "authorized_keys" => '\u{f08c0}', // ๓ฐฃ€
  218. "bashrc" => Icons::SHELL, // ๓ฑ†ƒ
  219. "bspwmrc" => Icons::CONFIG, // ๎˜•
  220. "build.gradle.kts" => Icons::GRADLE, // ๎™ 
  221. "Cargo.lock" => Icons::LANG_RUST, // ๎š‹
  222. "Cargo.toml" => Icons::LANG_RUST, // ๎š‹
  223. "CMakeLists.txt" => Icons::MAKE, // ๎™ณ
  224. "composer.json" => Icons::LANG_PHP, // ๎œฝ
  225. "composer.lock" => Icons::LANG_PHP, // ๎œฝ
  226. "config" => Icons::CONFIG, // ๎˜•
  227. "config.status" => Icons::CONFIG, // ๎˜•
  228. "configure" => Icons::WRENCH, // ๏‚ญ
  229. "configure.ac" => Icons::CONFIG, // ๎˜•
  230. "configure.in" => Icons::CONFIG, // ๎˜•
  231. "constraints.txt" => Icons::LANG_PYTHON, // ๎˜†
  232. "COPYING" => Icons::LICENSE, // ๏€ญ
  233. "COPYRIGHT" => Icons::LICENSE, // ๏€ญ
  234. "crontab" => Icons::CONFIG, // ๎˜•
  235. "crypttab" => Icons::CONFIG, // ๎˜•
  236. "csh.cshrc" => Icons::SHELL, // ๓ฑ†ƒ
  237. "csh.login" => Icons::SHELL, // ๓ฑ†ƒ
  238. "csh.logout" => Icons::SHELL, // ๓ฑ†ƒ
  239. "docker-compose.yml" => Icons::DOCKER, // ๎™
  240. "Dockerfile" => Icons::DOCKER, // ๎™
  241. "compose.yaml" => Icons::DOCKER, // ๎™
  242. "compose.yml" => Icons::DOCKER, // ๎™
  243. "docker-compose.yaml" => Icons::DOCKER, // ๎™
  244. "dune" => Icons::LANG_OCAML, // ๎™บ
  245. "dune-project" => Icons::WRENCH, // ๏‚ญ
  246. "Earthfile" => '\u{f0ac}', // ๏‚ฌ
  247. "environment" => Icons::CONFIG, // ๎˜•
  248. "GNUmakefile" => Icons::MAKE, // ๎™ณ
  249. "go.mod" => Icons::LANG_GO, // ๎™ž
  250. "go.sum" => Icons::LANG_GO, // ๎™ž
  251. "go.work" => Icons::LANG_GO, // ๎™ž
  252. "gradle" => Icons::GRADLE, // ๎™ 
  253. "gradle.properties" => Icons::GRADLE, // ๎™ 
  254. "gradlew" => Icons::GRADLE, // ๎™ 
  255. "gradlew.bat" => Icons::GRADLE, // ๎™ 
  256. "group" => Icons::LOCK, // ๏€ฃ
  257. "gruntfile.coffee" => Icons::GRUNT, // ๎˜‘
  258. "gruntfile.js" => Icons::GRUNT, // ๎˜‘
  259. "gruntfile.ls" => Icons::GRUNT, // ๎˜‘
  260. "gshadow" => Icons::LOCK, // ๏€ฃ
  261. "gulpfile.coffee" => Icons::GULP, // ๎˜
  262. "gulpfile.js" => Icons::GULP, // ๎˜
  263. "gulpfile.ls" => Icons::GULP, // ๎˜
  264. "heroku.yml" => '\u{e77b}', // ๎ป
  265. "hostname" => Icons::CONFIG, // ๎˜•
  266. "id_dsa" => Icons::PRIVATE_KEY, // ๓ฐŒ†
  267. "id_ecdsa" => Icons::PRIVATE_KEY, // ๓ฐŒ†
  268. "id_ecdsa_sk" => Icons::PRIVATE_KEY, // ๓ฐŒ†
  269. "id_ed25519" => Icons::PRIVATE_KEY, // ๓ฐŒ†
  270. "id_ed25519_sk" => Icons::PRIVATE_KEY, // ๓ฐŒ†
  271. "id_rsa" => Icons::PRIVATE_KEY, // ๓ฐŒ†
  272. "inputrc" => Icons::CONFIG, // ๎˜•
  273. "Jenkinsfile" => '\u{e66e}', // ๎™ฎ
  274. "jsconfig.json" => Icons::LANG_JAVASCRIPT,// ๎Ž
  275. "Justfile" => Icons::WRENCH, // ๏‚ญ
  276. "known_hosts" => '\u{f08c0}', // ๓ฐฃ€
  277. "LICENCE" => Icons::LICENSE, // ๏€ญ
  278. "LICENCE.md" => Icons::LICENSE, // ๏€ญ
  279. "LICENCE.txt" => Icons::LICENSE, // ๏€ญ
  280. "LICENSE" => Icons::LICENSE, // ๏€ญ
  281. "LICENSE-APACHE" => Icons::LICENSE, // ๏€ญ
  282. "LICENSE-MIT" => Icons::LICENSE, // ๏€ญ
  283. "LICENSE.md" => Icons::LICENSE, // ๏€ญ
  284. "LICENSE.txt" => Icons::LICENSE, // ๏€ญ
  285. "localized" => Icons::OS_APPLE, // ๏…น
  286. "localtime" => Icons::CLOCK, // ๏บ
  287. "Makefile" => Icons::MAKE, // ๎™ณ
  288. "makefile" => Icons::MAKE, // ๎™ณ
  289. "Makefile.ac" => Icons::MAKE, // ๎™ณ
  290. "Makefile.am" => Icons::MAKE, // ๎™ณ
  291. "Makefile.in" => Icons::MAKE, // ๎™ณ
  292. "MANIFEST" => Icons::LANG_PYTHON, // ๎˜†
  293. "MANIFEST.in" => Icons::LANG_PYTHON, // ๎˜†
  294. "npm-shrinkwrap.json" => Icons::NPM, // ๎œž
  295. "npmrc" => Icons::NPM, // ๎œž
  296. "package-lock.json" => Icons::NPM, // ๎œž
  297. "package.json" => Icons::NPM, // ๎œž
  298. "passwd" => Icons::LOCK, // ๏€ฃ
  299. "php.ini" => Icons::LANG_PHP, // ๎œฝ
  300. "PKGBUILD" => '\u{f303}', // ๏Œƒ
  301. "platformio.ini" => '\u{e682}', // ๎š‚
  302. "pom.xml" => '\u{e674}', // ๎™ด
  303. "Procfile" => '\u{e77b}', // ๎ป
  304. "profile" => Icons::SHELL, // ๓ฑ†ƒ
  305. "pyproject.toml" => Icons::LANG_PYTHON, // ๎˜†
  306. "Rakefile" => Icons::LANG_RUBY, // ๎ˆž
  307. "README" => Icons::README, // ๓ฐ‚บ
  308. "release.toml" => Icons::LANG_RUST, // ๎š‹
  309. "requirements.txt" => Icons::LANG_PYTHON, // ๎˜†
  310. "robots.txt" => '\u{f06a9}', // ๓ฐšฉ
  311. "rubydoc" => Icons::LANG_RUBYRAILS, // ๎œป
  312. "rvmrc" => Icons::LANG_RUBY, // ๎ˆž
  313. "settings.gradle.kts" => Icons::GRADLE, // ๎‰–
  314. "shadow" => Icons::LOCK, // ๏€ฃ
  315. "shells" => Icons::CONFIG, // ๎˜•
  316. "sudoers" => Icons::LOCK, // ๏€ฃ
  317. "timezone" => Icons::CLOCK, // ๏บ
  318. "tsconfig.json" => Icons::LANG_TYPESCRIPT,// ๎˜จ
  319. "Vagrantfile" => '\u{2371}', // โฑ
  320. "webpack.config.js" => '\u{f072b}', // ๓ฐœซ
  321. "yarn.lock" => Icons::YARN, // ๎šง
  322. "zlogin" => Icons::SHELL, // ๓ฑ†ƒ
  323. "zlogout" => Icons::SHELL, // ๓ฑ†ƒ
  324. "zprofile" => Icons::SHELL, // ๓ฑ†ƒ
  325. "zshenv" => Icons::SHELL, // ๓ฑ†ƒ
  326. "zshrc" => Icons::SHELL, // ๓ฑ†ƒ
  327. };
  328. /// Mapping from lowercase file extension to icons. If an image, video, or audio extension is add
  329. /// also update the extension filetype map.
  330. const EXTENSION_ICONS: Map<&'static str, char> = phf_map! {
  331. "3mf" => Icons::FILE_3D, // ๓ฐ†ง
  332. "7z" => Icons::COMPRESSED, // ๏
  333. "a" => Icons::OS_LINUX, // ๏…ผ
  334. "acc" => Icons::AUDIO, // ๏€
  335. "acf" => '\u{f1b6}', // ๏†ถ
  336. "age" => Icons::SHIELD_LOCK, // ๓ฐฆ
  337. "ai" => '\u{e7b4}', // ๎žด
  338. "aif" => Icons::AUDIO, // ๏€
  339. "aifc" => Icons::AUDIO, // ๏€
  340. "aiff" => Icons::AUDIO, // ๏€
  341. "alac" => Icons::AUDIO, // ๏€
  342. "android" => Icons::OS_ANDROID, // ๎œŽ
  343. "ape" => Icons::AUDIO, // ๏€
  344. "apk" => Icons::OS_ANDROID, // ๎œŽ
  345. "apple" => Icons::OS_APPLE, // ๏…น
  346. "ar" => Icons::COMPRESSED, // ๏
  347. "arj" => Icons::COMPRESSED, // ๏
  348. "arw" => Icons::IMAGE, // ๏‡…
  349. "asc" => Icons::SHIELD_LOCK, // ๓ฐฆ
  350. "asm" => Icons::LANG_ASSEMBLY, // ๎˜ท
  351. "asp" => '\u{f121}', // ๏„ก
  352. "avi" => Icons::VIDEO, // ๏€ฝ
  353. "avif" => Icons::IMAGE, // ๏‡…
  354. "avro" => Icons::JSON, // ๎˜‹
  355. "awk" => Icons::SHELL_CMD, // ๏’‰
  356. "bash" => Icons::SHELL_CMD, // ๏’‰
  357. "bat" => Icons::OS_WINDOWS_CMD, // ๎ฏ„
  358. "bats" => Icons::SHELL_CMD, // ๏’‰
  359. "bdf" => Icons::FONT, // ๏€ฑ
  360. "bib" => Icons::LANG_TEX, // ๎š›
  361. "bin" => Icons::BINARY, // ๎ซจ
  362. "blend" => '\u{f00ab}', // ๓ฐ‚ซ
  363. "bmp" => Icons::IMAGE, // ๏‡…
  364. "br" => Icons::COMPRESSED, // ๏
  365. "bst" => Icons::LANG_TEX, // ๎š›
  366. "bundle" => Icons::OS_APPLE, // ๏…น
  367. "bz" => Icons::COMPRESSED, // ๏
  368. "bz2" => Icons::COMPRESSED, // ๏
  369. "bz3" => Icons::COMPRESSED, // ๏
  370. "c" => Icons::LANG_C, // ๎˜ž
  371. "c++" => Icons::LANG_CPP, // ๎˜
  372. "cab" => Icons::OS_WINDOWS, // ๏…บ
  373. "cbr" => Icons::IMAGE, // ๏‡…
  374. "cbz" => Icons::IMAGE, // ๏‡…
  375. "cc" => Icons::LANG_CPP, // ๎˜
  376. "cert" => Icons::GIST_SECRET, // ๎ซบ
  377. "cfg" => Icons::CONFIG, // ๎˜•
  378. "cjs" => Icons::LANG_JAVASCRIPT, // ๎Ž
  379. "class" => Icons::LANG_JAVA, // ๎‰–
  380. "clj" => '\u{e768}', // ๎จ
  381. "cljs" => '\u{e76a}', // ๎ช
  382. "cls" => Icons::LANG_TEX, // ๎š›
  383. "cmake" => Icons::MAKE, // ๎™ณ
  384. "cmd" => Icons::OS_WINDOWS, // ๏…บ
  385. "coffee" => '\u{f0f4}', // ๏ƒด
  386. "com" => Icons::OS_WINDOWS_CMD, // ๎ฏ„
  387. "conf" => Icons::CONFIG, // ๎˜•
  388. "config" => Icons::CONFIG, // ๎˜•
  389. "cp" => Icons::LANG_CPP, // ๎˜
  390. "cpio" => Icons::COMPRESSED, // ๏
  391. "cpp" => Icons::LANG_CPP, // ๎˜
  392. "cr" => '\u{e62f}', // ๎˜ฏ
  393. "cr2" => Icons::IMAGE, // ๏‡…
  394. "crdownload" => Icons::DOWNLOAD, // ๓ฐ‡š
  395. "crt" => Icons::GIST_SECRET, // ๎ซบ
  396. "cs" => Icons::LANG_CSHARP, // ๓ฐŒ›
  397. "csh" => Icons::SHELL_CMD, // ๏’‰
  398. "cshtml" => Icons::RAZOR, // ๏‡บ
  399. "csproj" => Icons::LANG_CSHARP, // ๓ฐŒ›
  400. "css" => Icons::CSS3, // ๎‰
  401. "csv" => Icons::SHEET, // ๏‡ƒ
  402. "csx" => Icons::LANG_CSHARP, // ๓ฐŒ›
  403. "cts" => Icons::LANG_TYPESCRIPT, // ๎˜จ
  404. "cu" => '\u{e64b}', // ๎™‹
  405. "cue" => Icons::PLAYLIST, // ๓ฐฒน
  406. "cxx" => Icons::LANG_CPP, // ๎˜
  407. "d" => Icons::LANG_D, // ๎žฏ
  408. "dart" => '\u{e798}', // ๎ž˜
  409. "db" => Icons::DATABASE, // ๏‡€
  410. "deb" => '\u{e77d}', // ๎ฝ
  411. "desktop" => '\u{ebd1}', // ๎ฏ‘
  412. "di" => Icons::LANG_D, // ๎žฏ
  413. "diff" => Icons::DIFF, // ๏‘€
  414. "djv" => Icons::DOCUMENT, // ๏‡‚
  415. "djvu" => Icons::DOCUMENT, // ๏‡‚
  416. "dll" => Icons::LIBRARY, // ๎ฎœ
  417. "dmg" => Icons::DISK_IMAGE, // ๎‰ฑ
  418. "doc" => Icons::DOCUMENT, // ๏‡‚
  419. "docx" => Icons::DOCUMENT, // ๏‡‚
  420. "dot" => '\u{f1049}', // ๓ฑ‰
  421. "download" => Icons::DOWNLOAD, // ๓ฐ‡š
  422. "dockerfile" => Icons::DOCKER, // ๎™
  423. "dockerignore" => Icons::DOCKER, // ๎™
  424. "drawio" => '\u{ebba}', // ๎ฎบ
  425. "dump" => Icons::DATABASE, // ๎œ†
  426. "dvi" => Icons::IMAGE, // ๏‡…
  427. "dylib" => Icons::OS_APPLE, // ๏…น
  428. "ebook" => Icons::BOOK, // ๎Š‹
  429. "ebuild" => '\u{f30d}', // ๏Œ
  430. "editorconfig" => Icons::CONFIG, // ๎˜•
  431. "ejs" => '\u{e618}', // ๎˜˜
  432. "el" => Icons::EMACS, // ๎˜ฒ
  433. "elc" => Icons::EMACS, // ๎˜ฒ
  434. "elf" => Icons::BINARY, // ๎ซจ
  435. "elm" => '\u{e62c}', // ๎˜ฌ
  436. "eml" => '\u{f003}', // ๏€ƒ
  437. "env" => '\u{f462}', // ๏‘ข
  438. "eot" => Icons::FONT, // ๏€ฑ
  439. "eps" => Icons::VECTOR, // ๓ฐ•™
  440. "epub" => Icons::BOOK, // ๎Š‹
  441. "erb" => Icons::LANG_RUBYRAILS, // ๎œป
  442. "erl" => '\u{e7b1}', // ๎žฑ
  443. "ex" => Icons::LANG_ELIXIR, // ๎˜ญ
  444. "exe" => Icons::OS_WINDOWS_CMD, // ๎ฏ„
  445. "exs" => Icons::LANG_ELIXIR, // ๎˜ญ
  446. "f" => Icons::LANG_FORTRAN, // ๓ฑˆš
  447. "f90" => Icons::LANG_FORTRAN, // ๓ฑˆš
  448. "fbx" => Icons::FILE_3D, // ๓ฐ†ง
  449. "fdmdownload" => Icons::DOWNLOAD, // ๓ฐ‡š
  450. "fish" => Icons::SHELL_CMD, // ๏’‰
  451. "flac" => Icons::AUDIO, // ๏€
  452. "flv" => Icons::VIDEO, // ๏€ฝ
  453. "fnl" => Icons::LANG_FENNEL, // ๎šฏ
  454. "fnt" => Icons::FONT, // ๏€ฑ
  455. "fodg" => Icons::VECTOR, // ๓ฐ•™
  456. "fodp" => Icons::SLIDE, // ๏‡„
  457. "fods" => Icons::SHEET, // ๏‡ƒ
  458. "fodt" => Icons::DOCUMENT, // ๏‡‚
  459. "fon" => Icons::FONT, // ๏€ฑ
  460. "font" => Icons::FONT, // ๏€ฑ
  461. "for" => Icons::LANG_FORTRAN, // ๓ฑˆš
  462. "fs" => Icons::LANG_FSHARP, // ๎žง
  463. "fsi" => Icons::LANG_FSHARP, // ๎žง
  464. "fsproj" => Icons::LANG_FSHARP, // ๎žง
  465. "fsx" => Icons::LANG_FSHARP, // ๎žง
  466. "gcode" => '\u{f0af4}', // ๓ฐซด
  467. "gd" => Icons::GODOT, // ๎™Ÿ
  468. "gdoc" => Icons::DOCUMENT, // ๏‡‚
  469. "gem" => Icons::LANG_RUBY, // ๎ˆž
  470. "gemfile" => Icons::LANG_RUBY, // ๎ˆž
  471. "gemspec" => Icons::LANG_RUBY, // ๎ˆž
  472. "gform" => '\u{f298}', // ๏Š˜
  473. "gif" => Icons::IMAGE, // ๏‡…
  474. "git" => Icons::GIT, // ๏‡“
  475. "go" => Icons::LANG_GO, // ๎™ž
  476. "godot" => Icons::GODOT, // ๎™Ÿ
  477. "gpg" => Icons::SHIELD_LOCK, // ๓ฐฆ
  478. "gql" => Icons::GRAPHQL, // ๎™ข
  479. "gradle" => Icons::GRADLE, // ๎™ 
  480. "graphql" => Icons::GRAPHQL, // ๎™ข
  481. "groovy" => Icons::LANG_GROOVY, // ๎ต
  482. "gsheet" => Icons::SHEET, // ๏‡ƒ
  483. "gslides" => Icons::SLIDE, // ๏‡„
  484. "guardfile" => Icons::LANG_RUBY, // ๎ˆž
  485. "gv" => '\u{f1049}', // ๓ฑ‰
  486. "gvy" => Icons::LANG_GROOVY, // ๎ต
  487. "gz" => Icons::COMPRESSED, // ๏
  488. "h" => Icons::LANG_C, // ๎˜ž
  489. "h++" => Icons::LANG_CPP, // ๎˜
  490. "h264" => Icons::VIDEO, // ๏€ฝ
  491. "haml" => '\u{e664}', // ๎™ค
  492. "hbs" => Icons::MUSTACHE, // ๎˜
  493. "heic" => Icons::IMAGE, // ๏‡…
  494. "heics" => Icons::VIDEO, // ๏€ฝ
  495. "heif" => Icons::IMAGE, // ๏‡…
  496. "hex" => '\u{f12a7}', // ๓ฑŠง
  497. "hh" => Icons::LANG_CPP, // ๎˜
  498. "hpp" => Icons::LANG_CPP, // ๎˜
  499. "hs" => Icons::LANG_HASKELL, // ๎ท
  500. "htm" => Icons::HTML5, // ๏„ป
  501. "html" => Icons::HTML5, // ๏„ป
  502. "hxx" => Icons::LANG_CPP, // ๎˜
  503. "ical" => Icons::CALENDAR, // ๏ณ
  504. "icalendar" => Icons::CALENDAR, // ๏ณ
  505. "ico" => Icons::IMAGE, // ๏‡…
  506. "ics" => Icons::CALENDAR, // ๏ณ
  507. "ifb" => Icons::CALENDAR, // ๏ณ
  508. "image" => Icons::DISK_IMAGE, // ๎‰ฑ
  509. "img" => Icons::DISK_IMAGE, // ๎‰ฑ
  510. "iml" => Icons::INTELLIJ, // ๎žต
  511. "ini" => Icons::CONFIG, // ๎˜•
  512. "inl" => Icons::LANG_C, // ๎˜ž
  513. "ipynb" => '\u{e678}', // ๎™ธ
  514. "iso" => Icons::DISK_IMAGE, // ๎‰ฑ
  515. "j2c" => Icons::IMAGE, // ๏‡…
  516. "j2k" => Icons::IMAGE, // ๏‡…
  517. "jad" => Icons::LANG_JAVA, // ๎‰–
  518. "jar" => Icons::LANG_JAVA, // ๎‰–
  519. "java" => Icons::LANG_JAVA, // ๎‰–
  520. "jfi" => Icons::IMAGE, // ๏‡…
  521. "jfif" => Icons::IMAGE, // ๏‡…
  522. "jif" => Icons::IMAGE, // ๏‡…
  523. "jl" => '\u{e624}', // ๎˜ค
  524. "jmd" => Icons::MARKDOWN, // ๏’Š
  525. "jp2" => Icons::IMAGE, // ๏‡…
  526. "jpe" => Icons::IMAGE, // ๏‡…
  527. "jpeg" => Icons::IMAGE, // ๏‡…
  528. "jpf" => Icons::IMAGE, // ๏‡…
  529. "jpg" => Icons::IMAGE, // ๏‡…
  530. "jpx" => Icons::IMAGE, // ๏‡…
  531. "js" => Icons::LANG_JAVASCRIPT, // ๎Ž
  532. "json" => Icons::JSON, // ๎˜‹
  533. "jsx" => Icons::REACT, // ๎žบ
  534. "jxl" => Icons::IMAGE, // ๏‡…
  535. "kbx" => Icons::SHIELD_KEY, // ๓ฐฏ„
  536. "kdb" => Icons::KEYPASS, // ๏ˆพ
  537. "kdbx" => Icons::KEYPASS, // ๏ˆพ
  538. "key" => Icons::KEY, // ๎ฌ‘
  539. "ko" => Icons::OS_LINUX, // ๏…ผ
  540. "ksh" => Icons::SHELL_CMD, // ๏’‰
  541. "kt" => Icons::LANG_KOTLIN, // ๎˜ด
  542. "kts" => Icons::LANG_KOTLIN, // ๎˜ด
  543. "latex" => Icons::LANG_TEX, // ๎š›
  544. "ldb" => Icons::DATABASE, // ๎œ†
  545. "less" => '\u{e758}', // ๎˜
  546. "lhs" => Icons::LANG_HASKELL, // ๎ท
  547. "lib" => Icons::LIBRARY, // ๎ฎœ
  548. "license" => Icons::LICENSE, // ๏€ญ
  549. "lisp" => '\u{f0172}', // ๓ฐ…ฒ
  550. "localized" => Icons::OS_APPLE, // ๏…น
  551. "lock" => Icons::LOCK, // ๏€ฃ
  552. "log" => '\u{f18d}', // ๏†
  553. "ltx" => Icons::LANG_TEX, // ๎š›
  554. "lua" => '\u{e620}', // ๎˜ 
  555. "lz" => Icons::COMPRESSED, // ๏
  556. "lz4" => Icons::COMPRESSED, // ๏
  557. "lzh" => Icons::COMPRESSED, // ๏
  558. "lzma" => Icons::COMPRESSED, // ๏
  559. "lzo" => Icons::COMPRESSED, // ๏
  560. "m" => Icons::LANG_C, // ๎˜ž
  561. "m2ts" => Icons::VIDEO, // ๏€ฝ
  562. "m2v" => Icons::VIDEO, // ๏€ฝ
  563. "m3u" => Icons::PLAYLIST, // ๓ฐฒน
  564. "m3u8" => Icons::PLAYLIST, // ๓ฐฒน
  565. "m4a" => Icons::AUDIO, // ๏€
  566. "m4v" => Icons::VIDEO, // ๏€ฝ
  567. "magnet" => '\u{f076}', // ๏ถ
  568. "markdown" => Icons::MARKDOWN, // ๏’Š
  569. "md" => Icons::MARKDOWN, // ๏’Š
  570. "md5" => Icons::SHIELD_CHECK, // ๓ฐ•ฅ
  571. "mdb" => Icons::DATABASE, // ๎œ†
  572. "mid" => '\u{f08f2}', // ๓ฐฃฒ
  573. "mjs" => Icons::LANG_JAVASCRIPT, // ๎Ž
  574. "mk" => Icons::MAKE, // ๎™ณ
  575. "mka" => Icons::AUDIO, // ๏€
  576. "mkd" => Icons::MARKDOWN, // ๏’Š
  577. "mkv" => Icons::VIDEO, // ๏€ฝ
  578. "ml" => Icons::LANG_OCAML, // ๎™บ
  579. "mli" => Icons::LANG_OCAML, // ๎™บ
  580. "mll" => Icons::LANG_OCAML, // ๎™บ
  581. "mly" => Icons::LANG_OCAML, // ๎™บ
  582. "mm" => Icons::LANG_CPP, // ๎˜
  583. "mobi" => Icons::BOOK, // ๎Š‹
  584. "mov" => Icons::VIDEO, // ๏€ฝ
  585. "mp2" => Icons::AUDIO, // ๏€
  586. "mp3" => Icons::AUDIO, // ๏€
  587. "mp4" => Icons::VIDEO, // ๏€ฝ
  588. "mpeg" => Icons::VIDEO, // ๏€ฝ
  589. "mpg" => Icons::VIDEO, // ๏€ฝ
  590. "msi" => Icons::OS_WINDOWS, // ๏…บ
  591. "mts" => Icons::LANG_TYPESCRIPT, // ๎˜จ
  592. "mustache" => Icons::MUSTACHE, // ๎˜
  593. "nef" => Icons::IMAGE, // ๏‡…
  594. "nim" => Icons::LANG_NIM, // ๎™ท
  595. "nimble" => Icons::LANG_NIM, // ๎™ท
  596. "nims" => Icons::LANG_NIM, // ๎™ท
  597. "ninja" => '\u{f0774}', // ๓ฐด
  598. "nix" => '\u{f313}', // ๏Œ“
  599. "node" => Icons::NODEJS, // ๎œ˜
  600. "o" => Icons::BINARY, // ๎ซจ
  601. "obj" => Icons::FILE_3D, // ๓ฐ†ง
  602. "odf" => '\u{f0784}', // ๓ฐž„
  603. "odg" => Icons::VECTOR, // ๓ฐ•™
  604. "odp" => Icons::SLIDE, // ๏‡„
  605. "ods" => Icons::SHEET, // ๏‡ƒ
  606. "odt" => Icons::DOCUMENT, // ๏‡‚
  607. "ogg" => Icons::AUDIO, // ๏€
  608. "ogm" => Icons::VIDEO, // ๏€ฝ
  609. "ogv" => Icons::VIDEO, // ๏€ฝ
  610. "opus" => Icons::AUDIO, // ๏€
  611. "orf" => Icons::IMAGE, // ๏‡…
  612. "org" => '\u{e633}', // ๎˜ณ
  613. "otf" => Icons::FONT, // ๏€ฑ
  614. "out" => '\u{eb2c}', // ๎ฌฌ
  615. "p12" => Icons::KEY, // ๎ฌ‘
  616. "par" => Icons::COMPRESSED, // ๏
  617. "part" => Icons::DOWNLOAD, // ๓ฐ‡š
  618. "patch" => Icons::DIFF, // ๏‘€
  619. "pbm" => Icons::IMAGE, // ๏‡…
  620. "pcm" => Icons::AUDIO, // ๏€
  621. "pdf" => '\u{f1c1}', // ๏‡
  622. "pem" => Icons::KEY, // ๎ฌ‘
  623. "pfx" => Icons::KEY, // ๎ฌ‘
  624. "pgm" => Icons::IMAGE, // ๏‡…
  625. "phar" => Icons::LANG_PHP, // ๎œฝ
  626. "php" => Icons::LANG_PHP, // ๎œฝ
  627. "pkg" => '\u{eb29}', // ๎ฌฉ
  628. "pl" => Icons::LANG_PERL, // ๎™พ
  629. "plist" => Icons::OS_APPLE, // ๏…น
  630. "plx" => Icons::LANG_PERL, // ๎™พ
  631. "ply" => Icons::FILE_3D, // ๓ฐ†ง
  632. "pm" => Icons::LANG_PERL, // ๎™พ
  633. "png" => Icons::IMAGE, // ๏‡…
  634. "pnm" => Icons::IMAGE, // ๏‡…
  635. "pod" => Icons::LANG_PERL, // ๎™พ
  636. "pp" => '\u{e631}', // ๎˜ฑ
  637. "ppm" => Icons::IMAGE, // ๏‡…
  638. "pps" => Icons::SLIDE, // ๏‡„
  639. "ppsx" => Icons::SLIDE, // ๏‡„
  640. "ppt" => Icons::SLIDE, // ๏‡„
  641. "pptx" => Icons::SLIDE, // ๏‡„
  642. "properties" => Icons::JSON, // ๎˜‹
  643. "prql" => Icons::DATABASE, // ๎œ†
  644. "ps" => Icons::VECTOR, // ๓ฐ•™
  645. "ps1" => Icons::POWERSHELL, // ๎ฏ‡
  646. "psd" => '\u{e7b8}', // ๎žธ
  647. "psd1" => Icons::POWERSHELL, // ๎ฏ‡
  648. "psf" => Icons::FONT, // ๏€ฑ
  649. "psm1" => Icons::POWERSHELL, // ๎ฏ‡
  650. "pub" => Icons::PUBLIC_KEY, // ๓ฐท–
  651. "purs" => '\u{e630}', // ๎˜ฐ
  652. "pxm" => Icons::IMAGE, // ๏‡…
  653. "py" => Icons::LANG_PYTHON, // ๎˜†
  654. "pyc" => Icons::LANG_PYTHON, // ๎˜†
  655. "pyd" => Icons::LANG_PYTHON, // ๎˜†
  656. "pyi" => Icons::LANG_PYTHON, // ๎˜†
  657. "pyo" => Icons::LANG_PYTHON, // ๎˜†
  658. "qcow" => Icons::DISK_IMAGE, // ๎‰ฑ
  659. "qcow2" => Icons::DISK_IMAGE, // ๎‰ฑ
  660. "r" => Icons::LANG_R, // ๎šŠ
  661. "rar" => Icons::COMPRESSED, // ๏
  662. "raw" => Icons::IMAGE, // ๏‡…
  663. "razor" => Icons::RAZOR, // ๏‡บ
  664. "rb" => Icons::LANG_RUBY, // ๎ˆž
  665. "rdata" => Icons::LANG_R, // ๎šŠ
  666. "rdb" => '\u{e76d}', // ๎ญ
  667. "rdoc" => Icons::MARKDOWN, // ๏’Š
  668. "rds" => Icons::LANG_R, // ๎šŠ
  669. "readme" => Icons::README, // ๓ฐ‚บ
  670. "rkt" => Icons::LANG_SCHEME, // ๎šฑ
  671. "rlib" => Icons::LANG_RUST, // ๎š‹
  672. "rmd" => Icons::MARKDOWN, // ๎š‹
  673. "rmeta" => Icons::LANG_RUST, // ๎š‹
  674. "rpm" => '\u{e7bb}', // ๎žป
  675. "rs" => Icons::LANG_RUST, // ๎š‹
  676. "rspec" => Icons::LANG_RUBY, // ๎ˆž
  677. "rspec_parallel" => Icons::LANG_RUBY, // ๎ˆž
  678. "rspec_status" => Icons::LANG_RUBY, // ๎ˆž
  679. "rss" => '\u{f09e}', // ๏‚ž
  680. "rst" => Icons::TEXT, // ๏…œ
  681. "rtf" => Icons::TEXT, // ๏…œ
  682. "ru" => Icons::LANG_RUBY, // ๎ˆž
  683. "rubydoc" => Icons::LANG_RUBYRAILS, // ๎œป
  684. "s" => Icons::LANG_ASSEMBLY, // ๎˜ท
  685. "sal" => '\u{f147b}', // ๓ฑ‘ป
  686. "sass" => Icons::LANG_SASS, // ๎˜ƒ
  687. "sbt" => Icons::SUBTITLE, // ๓ฐจ–
  688. "scala" => '\u{e737}', // ๎œท
  689. "scm" => Icons::LANG_SCHEME, // ๎šฑ
  690. "scss" => Icons::LANG_SASS, // ๎˜ƒ
  691. "service" => '\u{eba2}', // ๎ฎข
  692. "sh" => Icons::SHELL_CMD, // ๏’‰
  693. "sha1" => Icons::SHIELD_CHECK, // ๓ฐ•ฅ
  694. "sha224" => Icons::SHIELD_CHECK, // ๓ฐ•ฅ
  695. "sha256" => Icons::SHIELD_CHECK, // ๓ฐ•ฅ
  696. "sha384" => Icons::SHIELD_CHECK, // ๓ฐ•ฅ
  697. "sha512" => Icons::SHIELD_CHECK, // ๓ฐ•ฅ
  698. "shell" => Icons::SHELL_CMD, // ๏’‰
  699. "shtml" => Icons::HTML5, // ๏„ป
  700. "sig" => Icons::SIGNED_FILE, // ๓ฑงƒ
  701. "signature" => Icons::SIGNED_FILE, // ๓ฑงƒ
  702. "sld" => Icons::LANG_SCHEME, // ๎šฑ
  703. "slim" => Icons::LANG_RUBYRAILS, // ๎œป
  704. "sln" => '\u{e70c}', // ๎œŒ
  705. "so" => Icons::OS_LINUX, // ๏…ผ
  706. "sql" => Icons::DATABASE, // ๎œ†
  707. "sqlite3" => '\u{e7c4}', // ๎Ÿ„
  708. "sr" => '\u{f147b}', // ๓ฑ‘ป
  709. "srt" => Icons::SUBTITLE, // ๓ฐจ–
  710. "ss" => Icons::LANG_SCHEME, // ๎šฑ
  711. "ssa" => Icons::SUBTITLE, // ๓ฐจ–
  712. "stl" => Icons::FILE_3D, // ๓ฐ†ง
  713. "sty" => Icons::LANG_TEX, // ๎š›
  714. "styl" => Icons::LANG_STYLUS, // ๎˜€
  715. "stylus" => Icons::LANG_STYLUS, // ๎˜€
  716. "sub" => Icons::SUBTITLE, // ๓ฐจ–
  717. "sublime-build" => Icons::SUBLIME, // ๎žช
  718. "sublime-keymap" => Icons::SUBLIME, // ๎žช
  719. "sublime-menu" => Icons::SUBLIME, // ๎žช
  720. "sublime-options"=> Icons::SUBLIME, // ๎žช
  721. "sublime-package"=> Icons::SUBLIME, // ๎žช
  722. "sublime-project"=> Icons::SUBLIME, // ๎žช
  723. "sublime-session"=> Icons::SUBLIME, // ๎žช
  724. "sublime-settings"=>Icons::SUBLIME, // ๎žช
  725. "sublime-snippet"=> Icons::SUBLIME, // ๎žช
  726. "sublime-theme" => Icons::SUBLIME, // ๎žช
  727. "svelte" => '\u{e697}', // ๎š—
  728. "svg" => Icons::VECTOR, // ๓ฐ•™
  729. "swift" => '\u{e755}', // ๎•
  730. "t" => Icons::LANG_PERL, // ๎™พ
  731. "tar" => Icons::COMPRESSED, // ๏
  732. "taz" => Icons::COMPRESSED, // ๏
  733. "tbz" => Icons::COMPRESSED, // ๏
  734. "tbz2" => Icons::COMPRESSED, // ๏
  735. "tc" => Icons::DISK_IMAGE, // ๎‰ฑ
  736. "tex" => Icons::LANG_TEX, // ๎š›
  737. "tf" => Icons::TERRAFORM, // ๓ฑข
  738. "tfstate" => Icons::TERRAFORM, // ๓ฑข
  739. "tfvars" => Icons::TERRAFORM, // ๓ฑข
  740. "tgz" => Icons::COMPRESSED, // ๏
  741. "tif" => Icons::IMAGE, // ๏‡…
  742. "tiff" => Icons::IMAGE, // ๏‡…
  743. "tlz" => Icons::COMPRESSED, // ๏
  744. "tml" => Icons::CONFIG, // ๎˜•
  745. "toml" => Icons::CONFIG, // ๎˜•
  746. "torrent" => '\u{e275}', // ๎‰ต
  747. "tres" => Icons::GODOT, // ๎™Ÿ
  748. "ts" => Icons::LANG_TYPESCRIPT, // ๎˜จ
  749. "tscn" => Icons::GODOT, // ๎™Ÿ
  750. "tsv" => Icons::SHEET, // ๏‡ƒ
  751. "tsx" => Icons::REACT, // ๎žบ
  752. "ttc" => Icons::FONT, // ๏€ฑ
  753. "ttf" => Icons::FONT, // ๏€ฑ
  754. "twig" => '\u{e61c}', // ๎˜œ
  755. "txt" => Icons::TEXT, // ๏…œ
  756. "typ" => Icons::TYPST, // ๐ญ
  757. "txz" => Icons::COMPRESSED, // ๏
  758. "tz" => Icons::COMPRESSED, // ๏
  759. "tzo" => Icons::COMPRESSED, // ๏
  760. "unity" => Icons::UNITY, // ๎œก
  761. "unity3d" => Icons::UNITY, // ๎œก
  762. "v" => Icons::LANG_V, // ๎šฌ
  763. "vdi" => Icons::DISK_IMAGE, // ๎‰ฑ
  764. "vhd" => Icons::DISK_IMAGE, // ๎‰ฑ
  765. "video" => Icons::VIDEO, // ๏€ฝ
  766. "vim" => Icons::VIM, // ๎Ÿ…
  767. "vmdk" => Icons::DISK_IMAGE, // ๎‰ฑ
  768. "vob" => Icons::VIDEO, // ๏€ฝ
  769. "vue" => '\u{f0844}', // ๓ฐก„
  770. "war" => Icons::LANG_JAVA, // ๎‰–
  771. "wav" => Icons::AUDIO, // ๏€
  772. "webm" => Icons::VIDEO, // ๏€ฝ
  773. "webmanifest" => Icons::JSON, // ๎˜‹
  774. "webp" => Icons::IMAGE, // ๏‡…
  775. "whl" => Icons::LANG_PYTHON, // ๎˜†
  776. "windows" => Icons::OS_WINDOWS, // ๏…บ
  777. "wma" => Icons::AUDIO, // ๏€
  778. "wmv" => Icons::VIDEO, // ๏€ฝ
  779. "woff" => Icons::FONT, // ๏€ฑ
  780. "woff2" => Icons::FONT, // ๏€ฑ
  781. "wv" => Icons::AUDIO, // ๏€
  782. "xcf" => Icons::IMAGE, // ๏‡…
  783. "xhtml" => Icons::HTML5, // ๏„ป
  784. "xlr" => Icons::SHEET, // ๏‡ƒ
  785. "xls" => Icons::SHEET, // ๏‡ƒ
  786. "xlsm" => Icons::SHEET, // ๏‡ƒ
  787. "xlsx" => Icons::SHEET, // ๏‡ƒ
  788. "xml" => Icons::XML, // ๓ฐ—€
  789. "xpm" => Icons::IMAGE, // ๏‡…
  790. "xul" => Icons::XML, // ๓ฐ—€
  791. "xz" => Icons::COMPRESSED, // ๏
  792. "yaml" => Icons::YAML, // ๎šจ
  793. "yml" => Icons::YAML, // ๎šจ
  794. "z" => Icons::COMPRESSED, // ๏
  795. "zig" => '\u{e6a9}', // ๎šฉ
  796. "zip" => Icons::COMPRESSED, // ๏
  797. "zsh" => Icons::SHELL_CMD, // ๏’‰
  798. "zsh-theme" => Icons::SHELL, // ๓ฑ†ƒ
  799. "zst" => Icons::COMPRESSED, // ๏
  800. };
  801. /// Converts the style used to paint a file name into the style that should be
  802. /// used to paint an icon.
  803. ///
  804. /// - The background colour should be preferred to the foreground colour, as
  805. /// if one is set, itโ€™s the more โ€œobviousโ€ colour choice.
  806. /// - If neither is set, just use the default style.
  807. /// - Attributes such as bold or underline should not be used to paint the
  808. /// icon, as they can make it look weird.
  809. pub fn iconify_style(style: Style) -> Style {
  810. style
  811. .background
  812. .or(style.foreground)
  813. .map(Style::from)
  814. .unwrap_or_default()
  815. }
  816. /// Lookup the icon for a file based on the file's name, if the entry is a
  817. /// directory, or by the lowercase file extension.
  818. pub fn icon_for_file(file: &File<'_>) -> char {
  819. if file.points_to_directory() {
  820. *DIRECTORY_ICONS.get(file.name.as_str()).unwrap_or_else(|| {
  821. if file.is_empty_dir() {
  822. &Icons::FOLDER_OPEN // ๏„•
  823. } else {
  824. &Icons::FOLDER // ๎—ฟ
  825. }
  826. })
  827. } else if let Some(icon) = FILENAME_ICONS.get(file.name.as_str()) {
  828. *icon
  829. } else if let Some(ext) = file.ext.as_ref() {
  830. *EXTENSION_ICONS.get(ext.as_str()).unwrap_or(&Icons::FILE) // ๏…›
  831. } else {
  832. Icons::FILE_OUTLINE // ๏€–
  833. }
  834. }