FileSystemColorProvider.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452
  1. // This code is adapted from https://github.com/devblackops/Terminal-Icons (which also uses the MIT license).
  2. using System.Diagnostics.CodeAnalysis;
  3. using System.IO.Abstractions;
  4. namespace Terminal.Gui;
  5. /// <summary>Provides a way to get the color of a file or directory.</summary>
  6. public class FileSystemColorProvider
  7. {
  8. /// <summary>Mapping of file extension to color.</summary>
  9. public Dictionary<string, Color> ExtensionToColor = new ()
  10. {
  11. { ".7z", StringToColor ("#DAA520") },
  12. { ".bz", StringToColor ("#DAA520") },
  13. { ".tar", StringToColor ("#DAA520") },
  14. { ".zip", StringToColor ("#DAA520") },
  15. { ".gz", StringToColor ("#DAA520") },
  16. { ".xz", StringToColor ("#DAA520") },
  17. { ".br", StringToColor ("#DAA520") },
  18. { ".bzip2", StringToColor ("#DAA520") },
  19. { ".gzip", StringToColor ("#DAA520") },
  20. { ".brotli", StringToColor ("#DAA520") },
  21. { ".rar", StringToColor ("#DAA520") },
  22. { ".tgz", StringToColor ("#DAA520") },
  23. { ".bat", StringToColor ("#008000") },
  24. { ".cmd", StringToColor ("#008000") },
  25. { ".exe", StringToColor ("#00FA9A") },
  26. { ".pl", StringToColor ("#8A2BE2") },
  27. { ".sh", StringToColor ("#FF4500") },
  28. { ".msi", StringToColor ("#FFC77A") },
  29. { ".msix", StringToColor ("#FFC77A") },
  30. { ".msixbundle", StringToColor ("#FFC77A") },
  31. { ".appx", StringToColor ("#FFC77A") },
  32. { ".AppxBundle", StringToColor ("#FFC77A") },
  33. { ".deb", StringToColor ("#FFC77A") },
  34. { ".rpm", StringToColor ("#FFC77A") },
  35. { ".ps1", StringToColor ("#00BFFF") },
  36. { ".psm1", StringToColor ("#00BFFF") },
  37. { ".psd1", StringToColor ("#00BFFF") },
  38. { ".ps1xml", StringToColor ("#00BFFF") },
  39. { ".psc1", StringToColor ("#00BFFF") },
  40. { ".pssc", StringToColor ("#00BFFF") },
  41. { ".js", StringToColor ("#F0E68C") },
  42. { ".esx", StringToColor ("#F0E68C") },
  43. { ".mjs", StringToColor ("#F0E68C") },
  44. { ".java", StringToColor ("#F89820") },
  45. { ".jar", StringToColor ("#F89820") },
  46. { ".gradle", StringToColor ("#39D52D") },
  47. { ".py", StringToColor ("#4B8BBE") },
  48. { ".ipynb", StringToColor ("#4B8BBE") },
  49. { ".jsx", StringToColor ("#20B2AA") },
  50. { ".tsx", StringToColor ("#20B2AA") },
  51. { ".ts", StringToColor ("#F0E68C") },
  52. { ".dll", StringToColor ("#87CEEB") },
  53. { ".clixml", StringToColor ("#00BFFF") },
  54. { ".csv", StringToColor ("#9ACD32") },
  55. { ".tsv", StringToColor ("#9ACD32") },
  56. { ".ini", StringToColor ("#6495ED") },
  57. { ".dlc", StringToColor ("#6495ED") },
  58. { ".config", StringToColor ("#6495ED") },
  59. { ".conf", StringToColor ("#6495ED") },
  60. { ".properties", StringToColor ("#6495ED") },
  61. { ".prop", StringToColor ("#6495ED") },
  62. { ".settings", StringToColor ("#6495ED") },
  63. { ".option", StringToColor ("#6495ED") },
  64. { ".reg", StringToColor ("#6495ED") },
  65. { ".props", StringToColor ("#6495ED") },
  66. { ".toml", StringToColor ("#6495ED") },
  67. { ".prefs", StringToColor ("#6495ED") },
  68. { ".sln.dotsettings", StringToColor ("#6495ED") },
  69. { ".sln.dotsettings.user", StringToColor ("#6495ED") },
  70. { ".cfg", StringToColor ("#6495ED") },
  71. { ".c", StringToColor ("#A9A9A9") },
  72. { ".cpp", StringToColor ("#A9A9A9") },
  73. { ".go", StringToColor ("#20B2AA") },
  74. { ".php", StringToColor ("#6A5ACD") },
  75. { ".csproj", StringToColor ("#EE82EE") },
  76. { ".ruleset", StringToColor ("#EE82EE") },
  77. { ".sln", StringToColor ("#EE82EE") },
  78. { ".slnf", StringToColor ("#EE82EE") },
  79. { ".suo", StringToColor ("#EE82EE") },
  80. { ".vb", StringToColor ("#EE82EE") },
  81. { ".vbs", StringToColor ("#EE82EE") },
  82. { ".vcxitems", StringToColor ("#EE82EE") },
  83. { ".vcxitems.filters", StringToColor ("#EE82EE") },
  84. { ".vcxproj", StringToColor ("#EE82EE") },
  85. { ".vsxproj.filters", StringToColor ("#EE82EE") },
  86. { ".cs", StringToColor ("#7B68EE") },
  87. { ".csx", StringToColor ("#7B68EE") },
  88. { ".hs", StringToColor ("#9932CC") },
  89. { ".xaml", StringToColor ("#87CEFA") },
  90. { ".rs", StringToColor ("#FF4500") },
  91. { ".pdb", StringToColor ("#FFD700") },
  92. { ".sql", StringToColor ("#FFD700") },
  93. { ".pks", StringToColor ("#FFD700") },
  94. { ".pkb", StringToColor ("#FFD700") },
  95. { ".accdb", StringToColor ("#FFD700") },
  96. { ".mdb", StringToColor ("#FFD700") },
  97. { ".sqlite", StringToColor ("#FFD700") },
  98. { ".pgsql", StringToColor ("#FFD700") },
  99. { ".postgres", StringToColor ("#FFD700") },
  100. { ".psql", StringToColor ("#FFD700") },
  101. { ".patch", StringToColor ("#FF4500") },
  102. { ".user", StringToColor ("#00BFFF") },
  103. { ".code-workspace", StringToColor ("#00BFFF") },
  104. { ".log", StringToColor ("#F0E68C") },
  105. { ".txt", StringToColor ("#00CED1") },
  106. { ".srt", StringToColor ("#00CED1") },
  107. { ".lrc", StringToColor ("#00CED1") },
  108. { ".ass", StringToColor ("#C50000") },
  109. { ".html", StringToColor ("#CD5C5C") },
  110. { ".htm", StringToColor ("#CD5C5C") },
  111. { ".xhtml", StringToColor ("#CD5C5C") },
  112. { ".html_vm", StringToColor ("#CD5C5C") },
  113. { ".asp", StringToColor ("#CD5C5C") },
  114. { ".css", StringToColor ("#87CEFA") },
  115. { ".sass", StringToColor ("#FF00FF") },
  116. { ".scss", StringToColor ("#FF00FF") },
  117. { ".less", StringToColor ("#6B8E23") },
  118. { ".md", StringToColor ("#00BFFF") },
  119. { ".markdown", StringToColor ("#00BFFF") },
  120. { ".rst", StringToColor ("#00BFFF") },
  121. { ".hbs", StringToColor ("#E37933") },
  122. { ".json", StringToColor ("#FFD700") },
  123. { ".tsbuildinfo", StringToColor ("#FFD700") },
  124. { ".yml", StringToColor ("#FF6347") },
  125. { ".yaml", StringToColor ("#FF6347") },
  126. { ".lua", StringToColor ("#87CEFA") },
  127. { ".clj", StringToColor ("#00FF7F") },
  128. { ".cljs", StringToColor ("#00FF7F") },
  129. { ".cljc", StringToColor ("#00FF7F") },
  130. { ".groovy", StringToColor ("#87CEFA") },
  131. { ".vue", StringToColor ("#20B2AA") },
  132. { ".dart", StringToColor ("#4682B4") },
  133. { ".ex", StringToColor ("#8B4513") },
  134. { ".exs", StringToColor ("#8B4513") },
  135. { ".eex", StringToColor ("#8B4513") },
  136. { ".leex", StringToColor ("#8B4513") },
  137. { ".erl", StringToColor ("#FF6347") },
  138. { ".elm", StringToColor ("#9932CC") },
  139. { ".applescript", StringToColor ("#4682B4") },
  140. { ".xml", StringToColor ("#98FB98") },
  141. { ".plist", StringToColor ("#98FB98") },
  142. { ".xsd", StringToColor ("#98FB98") },
  143. { ".dtd", StringToColor ("#98FB98") },
  144. { ".xsl", StringToColor ("#98FB98") },
  145. { ".xslt", StringToColor ("#98FB98") },
  146. { ".resx", StringToColor ("#98FB98") },
  147. { ".iml", StringToColor ("#98FB98") },
  148. { ".xquery", StringToColor ("#98FB98") },
  149. { ".tmLanguage", StringToColor ("#98FB98") },
  150. { ".manifest", StringToColor ("#98FB98") },
  151. { ".project", StringToColor ("#98FB98") },
  152. { ".chm", StringToColor ("#87CEEB") },
  153. { ".pdf", StringToColor ("#CD5C5C") },
  154. { ".xls", StringToColor ("#9ACD32") },
  155. { ".xlsx", StringToColor ("#9ACD32") },
  156. { ".pptx", StringToColor ("#DC143C") },
  157. { ".ppt", StringToColor ("#DC143C") },
  158. { ".pptm", StringToColor ("#DC143C") },
  159. { ".potx", StringToColor ("#DC143C") },
  160. { ".potm", StringToColor ("#DC143C") },
  161. { ".ppsx", StringToColor ("#DC143C") },
  162. { ".ppsm", StringToColor ("#DC143C") },
  163. { ".pps", StringToColor ("#DC143C") },
  164. { ".ppam", StringToColor ("#DC143C") },
  165. { ".ppa", StringToColor ("#DC143C") },
  166. { ".doc", StringToColor ("#00BFFF") },
  167. { ".docx", StringToColor ("#00BFFF") },
  168. { ".rtf", StringToColor ("#00BFFF") },
  169. { ".mp3", StringToColor ("#DB7093") },
  170. { ".flac", StringToColor ("#DB7093") },
  171. { ".m4a", StringToColor ("#DB7093") },
  172. { ".wma", StringToColor ("#DB7093") },
  173. { ".aiff", StringToColor ("#DB7093") },
  174. { ".wav", StringToColor ("#DB7093") },
  175. { ".aac", StringToColor ("#DB7093") },
  176. { ".opus", StringToColor ("#DB7093") },
  177. { ".png", StringToColor ("#20B2AA") },
  178. { ".jpeg", StringToColor ("#20B2AA") },
  179. { ".jpg", StringToColor ("#20B2AA") },
  180. { ".gif", StringToColor ("#20B2AA") },
  181. { ".ico", StringToColor ("#20B2AA") },
  182. { ".tif", StringToColor ("#20B2AA") },
  183. { ".tiff", StringToColor ("#20B2AA") },
  184. { ".psd", StringToColor ("#20B2AA") },
  185. { ".psb", StringToColor ("#20B2AA") },
  186. { ".ami", StringToColor ("#20B2AA") },
  187. { ".apx", StringToColor ("#20B2AA") },
  188. { ".bmp", StringToColor ("#20B2AA") },
  189. { ".bpg", StringToColor ("#20B2AA") },
  190. { ".brk", StringToColor ("#20B2AA") },
  191. { ".cur", StringToColor ("#20B2AA") },
  192. { ".dds", StringToColor ("#20B2AA") },
  193. { ".dng", StringToColor ("#20B2AA") },
  194. { ".eps", StringToColor ("#20B2AA") },
  195. { ".exr", StringToColor ("#20B2AA") },
  196. { ".fpx", StringToColor ("#20B2AA") },
  197. { ".gbr", StringToColor ("#20B2AA") },
  198. { ".jbig2", StringToColor ("#20B2AA") },
  199. { ".jb2", StringToColor ("#20B2AA") },
  200. { ".jng", StringToColor ("#20B2AA") },
  201. { ".jxr", StringToColor ("#20B2AA") },
  202. { ".pbm", StringToColor ("#20B2AA") },
  203. { ".pgf", StringToColor ("#20B2AA") },
  204. { ".pic", StringToColor ("#20B2AA") },
  205. { ".raw", StringToColor ("#20B2AA") },
  206. { ".webp", StringToColor ("#20B2AA") },
  207. { ".svg", StringToColor ("#F4A460") },
  208. { ".webm", StringToColor ("#FFA500") },
  209. { ".mkv", StringToColor ("#FFA500") },
  210. { ".flv", StringToColor ("#FFA500") },
  211. { ".vob", StringToColor ("#FFA500") },
  212. { ".ogv", StringToColor ("#FFA500") },
  213. { ".ogg", StringToColor ("#FFA500") },
  214. { ".gifv", StringToColor ("#FFA500") },
  215. { ".avi", StringToColor ("#FFA500") },
  216. { ".mov", StringToColor ("#FFA500") },
  217. { ".qt", StringToColor ("#FFA500") },
  218. { ".wmv", StringToColor ("#FFA500") },
  219. { ".yuv", StringToColor ("#FFA500") },
  220. { ".rm", StringToColor ("#FFA500") },
  221. { ".rmvb", StringToColor ("#FFA500") },
  222. { ".mp4", StringToColor ("#FFA500") },
  223. { ".mpg", StringToColor ("#FFA500") },
  224. { ".mp2", StringToColor ("#FFA500") },
  225. { ".mpeg", StringToColor ("#FFA500") },
  226. { ".mpe", StringToColor ("#FFA500") },
  227. { ".mpv", StringToColor ("#FFA500") },
  228. { ".m2v", StringToColor ("#FFA500") },
  229. { ".ics", StringToColor ("#00CED1") },
  230. { ".cer", StringToColor ("#FF6347") },
  231. { ".cert", StringToColor ("#FF6347") },
  232. { ".crt", StringToColor ("#FF6347") },
  233. { ".pfx", StringToColor ("#FF6347") },
  234. { ".pem", StringToColor ("#66CDAA") },
  235. { ".pub", StringToColor ("#66CDAA") },
  236. { ".key", StringToColor ("#66CDAA") },
  237. { ".asc", StringToColor ("#66CDAA") },
  238. { ".gpg", StringToColor ("#66CDAA") },
  239. { ".woff", StringToColor ("#DC143C") },
  240. { ".woff2", StringToColor ("#DC143C") },
  241. { ".ttf", StringToColor ("#DC143C") },
  242. { ".eot", StringToColor ("#DC143C") },
  243. { ".suit", StringToColor ("#DC143C") },
  244. { ".otf", StringToColor ("#DC143C") },
  245. { ".bmap", StringToColor ("#DC143C") },
  246. { ".fnt", StringToColor ("#DC143C") },
  247. { ".odttf", StringToColor ("#DC143C") },
  248. { ".ttc", StringToColor ("#DC143C") },
  249. { ".font", StringToColor ("#DC143C") },
  250. { ".fonts", StringToColor ("#DC143C") },
  251. { ".sui", StringToColor ("#DC143C") },
  252. { ".ntf", StringToColor ("#DC143C") },
  253. { ".mrg", StringToColor ("#DC143C") },
  254. { ".rb", StringToColor ("#FF0000") },
  255. { ".erb", StringToColor ("#FF0000") },
  256. { ".gemfile", StringToColor ("#FF0000") },
  257. { "Rakefile", StringToColor ("#FF0000") },
  258. { ".fs", StringToColor ("#00BFFF") },
  259. { ".fsx", StringToColor ("#00BFFF") },
  260. { ".fsi", StringToColor ("#00BFFF") },
  261. { ".fsproj", StringToColor ("#00BFFF") },
  262. { ".dockerignore", StringToColor ("#4682B4") },
  263. { ".dockerfile", StringToColor ("#4682B4") },
  264. { ".vscodeignore", StringToColor ("#6495ED") },
  265. { ".vsixmanifest", StringToColor ("#6495ED") },
  266. { ".vsix", StringToColor ("#6495ED") },
  267. { ".code-workplace", StringToColor ("#6495ED") },
  268. { ".sublime-project", StringToColor ("#F4A460") },
  269. { ".sublime-workspace", StringToColor ("#F4A460") },
  270. { ".lock", StringToColor ("#DAA520") },
  271. { ".tf", StringToColor ("#948EEC") },
  272. { ".tfvars", StringToColor ("#948EEC") },
  273. { ".auto.tfvars", StringToColor ("#948EEC") },
  274. { ".bicep", StringToColor ("#00BFFF") },
  275. { ".vmdk", StringToColor ("#E1E3E6") },
  276. { ".vhd", StringToColor ("#E1E3E6") },
  277. { ".vhdx", StringToColor ("#E1E3E6") },
  278. { ".img", StringToColor ("#E1E3E6") },
  279. { ".iso", StringToColor ("#E1E3E6") },
  280. { ".R", StringToColor ("#276DC3") },
  281. { ".Rmd", StringToColor ("#276DC3") },
  282. { ".Rproj", StringToColor ("#276DC3") },
  283. { ".jl", StringToColor ("#9259a3") },
  284. { ".vim", StringToColor ("#019833") },
  285. { ".pp", StringToColor ("#FFA61A") },
  286. { ".epp", StringToColor ("#FFA61A") },
  287. { ".scala", StringToColor ("#DE3423") },
  288. { ".sc", StringToColor ("#DE3423") },
  289. { ".iLogicVb", StringToColor ("#A63B22") }
  290. };
  291. /// <summary>Mapping of file/dir name to color.</summary>
  292. public Dictionary<string, Color> FilenameToColor { get; set; } = new ()
  293. {
  294. { "docs", StringToColor ("#00BFFF") },
  295. { "documents", StringToColor ("#00BFFF") },
  296. { "desktop", StringToColor ("#00FBFF") },
  297. { "benchmark", StringToColor ("#F08519") },
  298. { "demo", StringToColor ("#5F3EC3") },
  299. { "samples", StringToColor ("#5F3EC3") },
  300. { "contacts", StringToColor ("#00FBFF") },
  301. { "apps", StringToColor ("#FF143C") },
  302. { "applications", StringToColor ("#FF143C") },
  303. { "artifacts", StringToColor ("#D49653") },
  304. { "shortcuts", StringToColor ("#FF143C") },
  305. { "links", StringToColor ("#FF143C") },
  306. { "fonts", StringToColor ("#DC143C") },
  307. { "images", StringToColor ("#9ACD32") },
  308. { "photos", StringToColor ("#9ACD32") },
  309. { "pictures", StringToColor ("#9ACD32") },
  310. { "videos", StringToColor ("#FFA500") },
  311. { "movies", StringToColor ("#FFA500") },
  312. { "media", StringToColor ("#D3D3D3") },
  313. { "music", StringToColor ("#DB7093") },
  314. { "songs", StringToColor ("#DB7093") },
  315. { "onedrive", StringToColor ("#D3D3D3") },
  316. { "downloads", StringToColor ("#D3D3D3") },
  317. { "src", StringToColor ("#00FF7F") },
  318. { "development", StringToColor ("#00FF7F") },
  319. { "projects", StringToColor ("#00FF7F") },
  320. { "bin", StringToColor ("#00FFF7") },
  321. { "tests", StringToColor ("#87CEEB") },
  322. { "windows", StringToColor ("#00A8E8") },
  323. { "users", StringToColor ("#F4F4F4") },
  324. { "favorites", StringToColor ("#F7D72C") },
  325. { "output", StringToColor ("#00FF7F") },
  326. { ".config", StringToColor ("#87CEAF") },
  327. { ".cache", StringToColor ("#87ECAF") },
  328. { ".vscode", StringToColor ("#87CEFA") },
  329. { ".vscode-insiders", StringToColor ("#24BFA5") },
  330. { ".git", StringToColor ("#FF4500") },
  331. { ".github", StringToColor ("#C0C0C0") },
  332. { "github", StringToColor ("#C0C0C0") },
  333. { "node_modules", StringToColor ("#6B8E23") },
  334. { ".terraform", StringToColor ("#948EEC") },
  335. { ".azure", StringToColor ("#00BFFF") },
  336. { ".aws", StringToColor ("#EC912D") },
  337. { ".kube", StringToColor ("#326DE6") },
  338. { ".docker", StringToColor ("#2391E6") },
  339. { ".gitattributes", StringToColor ("#FF4500") },
  340. { ".gitconfig", StringToColor ("#FF4500") },
  341. { ".gitignore", StringToColor ("#FF4500") },
  342. { ".gitmodules", StringToColor ("#FF4500") },
  343. { ".gitkeep", StringToColor ("#FF4500") },
  344. { "git-history", StringToColor ("#FF4500") },
  345. { "LICENSE", StringToColor ("#CD5C5C") },
  346. { "LICENSE.md", StringToColor ("#CD5C5C") },
  347. { "LICENSE.txt", StringToColor ("#CD5C5C") },
  348. { "CHANGELOG.md", StringToColor ("#98FB98") },
  349. { "CHANGELOG.txt", StringToColor ("#98FB98") },
  350. { "CHANGELOG", StringToColor ("#98FB98") },
  351. { "README.md", StringToColor ("#00FFFF") },
  352. { "README.txt", StringToColor ("#00FFFF") },
  353. { "README", StringToColor ("#00FFFF") },
  354. { ".DS_Store", StringToColor ("#696969") },
  355. { ".tsbuildinfo", StringToColor ("#F4A460") },
  356. { ".jscsrc", StringToColor ("#F4A460") },
  357. { ".jshintrc", StringToColor ("#F4A460") },
  358. { "tsconfig.json", StringToColor ("#F4A460") },
  359. { "tslint.json", StringToColor ("#F4A460") },
  360. { "composer.lock", StringToColor ("#F4A460") },
  361. { ".jsbeautifyrc", StringToColor ("#F4A460") },
  362. { ".esformatter", StringToColor ("#F4A460") },
  363. { "cdp.pid", StringToColor ("#F4A460") },
  364. { ".htaccess", StringToColor ("#9ACD32") },
  365. { ".jshintignore", StringToColor ("#87CEEB") },
  366. { ".buildignore", StringToColor ("#87CEEB") },
  367. { ".mrconfig", StringToColor ("#87CEEB") },
  368. { ".yardopts", StringToColor ("#87CEEB") },
  369. { "manifest.mf", StringToColor ("#87CEEB") },
  370. { ".clang-format", StringToColor ("#87CEEB") },
  371. { ".clang-tidy", StringToColor ("#87CEEB") },
  372. { "favicon.ico", StringToColor ("#FFD700") },
  373. { ".travis.yml", StringToColor ("#FFE4B5") },
  374. { ".gitlab-ci.yml", StringToColor ("#FF4500") },
  375. { ".jenkinsfile", StringToColor ("#6495ED") },
  376. { "bitbucket-pipelines.yml", StringToColor ("#87CEFA") },
  377. { "bitbucket-pipelines.yaml", StringToColor ("#87CEFA") },
  378. { ".azure-pipelines.yml", StringToColor ("#00BFFF") },
  379. { "firebase.json", StringToColor ("#FFA500") },
  380. { ".firebaserc", StringToColor ("#FFA500") },
  381. { ".bowerrc", StringToColor ("#CD5C5C") },
  382. { "bower.json", StringToColor ("#CD5C5C") },
  383. { "code_of_conduct.md", StringToColor ("#FFFFE0") },
  384. { "code_of_conduct.txt", StringToColor ("#FFFFE0") },
  385. { "Dockerfile", StringToColor ("#4682B4") },
  386. { "docker-compose.yml", StringToColor ("#4682B4") },
  387. { "docker-compose.yaml", StringToColor ("#4682B4") },
  388. { "docker-compose.dev.yml", StringToColor ("#4682B4") },
  389. { "docker-compose.local.yml", StringToColor ("#4682B4") },
  390. { "docker-compose.ci.yml", StringToColor ("#4682B4") },
  391. { "docker-compose.override.yml", StringToColor ("#4682B4") },
  392. { "docker-compose.staging.yml", StringToColor ("#4682B4") },
  393. { "docker-compose.prod.yml", StringToColor ("#4682B4") },
  394. { "docker-compose.production.yml", StringToColor ("#4682B4") },
  395. { "docker-compose.test.yml", StringToColor ("#4682B4") },
  396. { "vue.config.js", StringToColor ("#778899") },
  397. { "vue.config.ts", StringToColor ("#778899") },
  398. { "gulpfile.js", StringToColor ("#CD5C5C") },
  399. { "gulpfile.ts", StringToColor ("#CD5C5C") },
  400. { "gulpfile.babel.js", StringToColor ("#CD5C5C") },
  401. { "gruntfile.js", StringToColor ("#CD5C5C") },
  402. { "package.json", StringToColor ("#6B8E23") },
  403. { "package-lock.json", StringToColor ("#6B8E23") },
  404. { ".nvmrc", StringToColor ("#6B8E23") },
  405. { ".esmrc", StringToColor ("#6B8E23") },
  406. { ".nmpignore", StringToColor ("#00BFFF") },
  407. { ".npmrc", StringToColor ("#00BFFF") },
  408. { "authors", StringToColor ("#FF6347") },
  409. { "authors.md", StringToColor ("#FF6347") },
  410. { "authors.txt", StringToColor ("#FF6347") },
  411. { ".terraform.lock.hcl", StringToColor ("#948EEC") },
  412. { "gradlew", StringToColor ("#39D52D") }
  413. };
  414. /// <summary>Gets the color to use.</summary>
  415. /// <param name="file"></param>
  416. /// <returns></returns>
  417. public Color? GetColor (IFileSystemInfo file)
  418. {
  419. if (FilenameToColor.TryGetValue (file.Name, out Color nameColor))
  420. {
  421. return nameColor;
  422. }
  423. if (ExtensionToColor.TryGetValue (file.Extension, out Color extColor))
  424. {
  425. return extColor;
  426. }
  427. return null;
  428. }
  429. private static Color StringToColor (string str)
  430. {
  431. if (!Color.TryParse (str, out Color? c))
  432. {
  433. ThrowFormatException (str);
  434. }
  435. return c.Value;
  436. [DoesNotReturn]
  437. static void ThrowFormatException (string s)
  438. {
  439. throw new FormatException ($"Failed to parse Color from {s}");
  440. }
  441. }
  442. }