124 lines
5.2 KiB
Python
124 lines
5.2 KiB
Python
import os
|
|
|
|
def get_file_icon(name, is_folder, with_color=False):
|
|
"""Return a Nerd Font glyph based on file type or extension, optionally with color markup."""
|
|
icon = ""
|
|
color = ""
|
|
|
|
if is_folder:
|
|
icon = "\uf07b" # Nerd Font folder icon
|
|
color = "#FFB86C" # Folder color (orange/yellow)
|
|
else:
|
|
# Get the file extension
|
|
_, ext = os.path.splitext(name.lower())
|
|
|
|
# Map extensions to icons and colors
|
|
icons = {
|
|
# Documents
|
|
".pdf": ("\uf1c1", "#8BE9FD"), # PDF - cyan
|
|
".doc": ("\uf1c2", "#8BE9FD"), ".docx": ("\uf1c2", "#8BE9FD"), # Word - cyan
|
|
".xls": ("\uf1c3", "#8BE9FD"), ".xlsx": ("\uf1c3", "#8BE9FD"), # Excel - cyan
|
|
".ppt": ("\uf1c4", "#8BE9FD"), ".pptx": ("\uf1c4", "#8BE9FD"), # PowerPoint - cyan
|
|
".txt": ("\uf15c", "#8BE9FD"), # Text - cyan
|
|
".md": ("\uf48a", "#8BE9FD"), # Markdown - cyan
|
|
".rtf": ("\uf15c", "#8BE9FD"), # RTF - cyan
|
|
".odt": ("\uf1c2", "#8BE9FD"), # ODT - cyan
|
|
|
|
# Code/Development
|
|
".py": ("\ue73c", "#BD93F9"), # Python - purple
|
|
".js": ("\ue781", "#BD93F9"), # JavaScript - purple
|
|
".ts": ("\ue628", "#BD93F9"), # TypeScript - purple
|
|
".html": ("\uf13b", "#BD93F9"), ".htm": ("\uf13b", "#BD93F9"), # HTML - purple
|
|
".css": ("\uf13c", "#BD93F9"), # CSS - purple
|
|
".json": ("\ue60b", "#BD93F9"), # JSON - purple
|
|
".xml": ("\uf121", "#BD93F9"), # XML - purple
|
|
".yml": ("\uf481", "#BD93F9"), ".yaml": ("\uf481", "#BD93F9"), # YAML - purple
|
|
".sh": ("\uf489", "#BD93F9"), # Shell script - purple
|
|
".bat": ("\uf489", "#BD93F9"), # Batch - purple
|
|
".ps1": ("\uf489", "#BD93F9"), # PowerShell - purple
|
|
".cpp": ("\ue61d", "#BD93F9"), ".c": ("\ue61e", "#BD93F9"), # C/C++ - purple
|
|
".java": ("\ue738", "#BD93F9"), # Java - purple
|
|
".rb": ("\ue739", "#BD93F9"), # Ruby - purple
|
|
".go": ("\ue724", "#BD93F9"), # Go - purple
|
|
".php": ("\ue73d", "#BD93F9"), # PHP - purple
|
|
|
|
# Images
|
|
".jpg": ("\uf1c5", "#50FA7B"), ".jpeg": ("\uf1c5", "#50FA7B"), # JPEG - green
|
|
".png": ("\uf1c5", "#50FA7B"), # PNG - green
|
|
".gif": ("\uf1c5", "#50FA7B"), # GIF - green
|
|
".svg": ("\uf1c5", "#50FA7B"), # SVG - green
|
|
".bmp": ("\uf1c5", "#50FA7B"), # BMP - green
|
|
".tiff": ("\uf1c5", "#50FA7B"), ".tif": ("\uf1c5", "#50FA7B"), # TIFF - green
|
|
".ico": ("\uf1c5", "#50FA7B"), # ICO - green
|
|
|
|
# Media
|
|
".mp3": ("\uf1c7", "#FF79C6"), # Audio - pink
|
|
".wav": ("\uf1c7", "#FF79C6"), # Audio - pink
|
|
".ogg": ("\uf1c7", "#FF79C6"), # Audio - pink
|
|
".mp4": ("\uf1c8", "#FF79C6"), # Video - pink
|
|
".avi": ("\uf1c8", "#FF79C6"), # Video - pink
|
|
".mov": ("\uf1c8", "#FF79C6"), # Video - pink
|
|
".mkv": ("\uf1c8", "#FF79C6"), # Video - pink
|
|
".wmv": ("\uf1c8", "#FF79C6"), # Video - pink
|
|
|
|
# Archives
|
|
".zip": ("\uf1c6", "#FF5555"), # ZIP - red
|
|
".rar": ("\uf1c6", "#FF5555"), # RAR - red
|
|
".7z": ("\uf1c6", "#FF5555"), # 7z - red
|
|
".tar": ("\uf1c6", "#FF5555"), ".gz": ("\uf1c6", "#FF5555"), # TAR/GZ - red
|
|
".bz2": ("\uf1c6", "#FF5555"), # BZ2 - red
|
|
|
|
# Others
|
|
".exe": ("\uf085", "#F8F8F2"), # Executable - white
|
|
".iso": ("\uf0a0", "#F8F8F2"), # ISO - white
|
|
".dll": ("\uf085", "#F8F8F2"), # DLL - white
|
|
".db": ("\uf1c0", "#F8F8F2"), # Database - white
|
|
".sql": ("\uf1c0", "#F8F8F2"), # SQL - white
|
|
}
|
|
|
|
# Set default icon and color for unknown file types
|
|
icon = "\uf15b" # Default file icon
|
|
color = "#F8F8F2" # Default color (white)
|
|
|
|
# Get icon and color from the map if the extension exists
|
|
if ext in icons:
|
|
icon, color = icons[ext]
|
|
|
|
# Return either plain icon or with color markup
|
|
if with_color:
|
|
return f"[{color}]{icon}[/]"
|
|
else:
|
|
return icon
|
|
|
|
def get_icon_class(name, is_folder):
|
|
"""Determine CSS class for the icon based on file type."""
|
|
if is_folder:
|
|
return "folder-icon"
|
|
|
|
# Get the file extension
|
|
_, ext = os.path.splitext(name.lower())
|
|
|
|
# Document files
|
|
if ext in [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt", ".md", ".rtf", ".odt"]:
|
|
return "document-icon"
|
|
|
|
# Code files
|
|
elif ext in [".py", ".js", ".ts", ".html", ".htm", ".css", ".json", ".xml", ".yml", ".yaml",
|
|
".sh", ".bat", ".ps1", ".cpp", ".c", ".java", ".rb", ".go", ".php"]:
|
|
return "code-icon"
|
|
|
|
# Image files
|
|
elif ext in [".jpg", ".jpeg", ".png", ".gif", ".svg", ".bmp", ".tiff", ".tif", ".ico"]:
|
|
return "image-icon"
|
|
|
|
# Archive files
|
|
elif ext in [".zip", ".rar", ".7z", ".tar", ".gz", ".bz2"]:
|
|
return "archive-icon"
|
|
|
|
# Media files
|
|
elif ext in [".mp3", ".wav", ".ogg", ".mp4", ".avi", ".mov", ".mkv", ".wmv"]:
|
|
return "media-icon"
|
|
|
|
# Default for other file types
|
|
return ""
|