Rust图标库devicons的使用:为开发者提供丰富的编程语言和工具图标集
Rust图标库devicons的使用:为开发者提供丰富的编程语言和工具图标集
特性
- 🦞 图标检索: 根据文件名/扩展名获取文件或目录图标
- 🦞 图标颜色: 根据指定的主题检索与图标相关联的颜色
- 🦞 文件类型支持: 支持广泛的文件类型和文件名约定(dockerfile, makefile等)
- 🦞 可定制主题: 支持浅色和深色主题
安装
cargo add devicons
注意: 你需要使用NerdFont来正确显示图标。
使用示例
以下是使用devicons
检索深色主题文件图标的简单示例:
use std::path::Path;
use devicons::{File, Theme, icon_for_file, FileIcon};
fn main() {
// 从路径获取图标并指定主题
let path = Path::new("Cargo.toml");
let icon = icon_for_file(path, Some(Theme::Dark));
// 从字符串获取图标并指定主题
let icon = icon_for_file("Cargo.toml", Some(Theme::Dark));
// 从路径获取图标并使用默认主题
let icon = FileIcon::from(path);
// 直接从文件名获取图标
let icon = FileIcon::from("Cargo.toml");
println!("File: {}", path.to_string_lossy());
println!("Icon: {}", icon.icon);
println!("Color: {}", icon.color);
}
完整示例
以下是一个更完整的示例,展示如何使用devicons库来显示不同文件的图标和颜色:
use std::path::Path;
use devicons::{icon_for_file, Theme};
fn main() {
// 定义要检查的文件列表
let files = vec![
"Cargo.toml", // Rust包配置文件
"main.rs", // Rust源文件
"README.md", // Markdown文档
"Dockerfile", // Docker配置文件
"Makefile", // Make构建文件
"index.html", // HTML文件
"styles.css", // CSS样式表
"app.js", // JavaScript文件
"database.sql", // SQL脚本
"image.png", // 图片文件
];
// 打印表头
println!("{:<15} {:<5} {:<7} {:<7}", "Filename", "Icon", "Light", "Dark");
println!("{:-<15} {:-<5} {:-<7} {:-<7}", "", "", "", "");
// 遍历文件并显示图标信息
for file in files {
let path = Path::new(file);
// 获取浅色主题图标
let light_icon = icon_for_file(path, Some(Theme::Light));
// 获取深色主题图标
let dark_icon = icon_for_file(path, Some(Theme::Dark));
println!(
"{:<15} {:<5} {:<7} {:<7}",
file,
light_icon.icon,
light_icon.color,
dark_icon.color
);
}
}
扩展示例
下面是一个更复杂的示例,展示如何将devicons集成到文件浏览器中:
use std::path::{Path, PathBuf};
use std::fs;
use devicons::{icon_for_file, Theme};
fn display_directory(path: &Path, depth: usize) {
let indent = " ".repeat(depth);
if let Ok(entries) = fs::read_dir(path) {
for entry in entries {
if let Ok(entry) = entry {
let path = entry.path();
let icon = icon_for_file(&path, Some(Theme::Dark));
if path.is_dir() {
println!("{}{} {}", indent, icon.icon, path.display());
display_directory(&path, depth + 1);
} else {
println!("{}{} {} ({})",
indent,
icon.icon,
path.display(),
icon.color
);
}
}
}
}
}
fn main() {
let path = PathBuf::from("."); // 当前目录
println!("文件浏览器示例:");
display_directory(&path, 0);
}
许可证
该项目采用Apache 2.0 License许可。
1 回复
Rust图标库devicons的使用指南
devicons是一个为开发者提供的图标库,包含了丰富的编程语言、工具和技术栈的图标集合。这个库特别适合用于开发工具、文档、技术博客或任何需要显示技术相关图标的场景。
安装方法
在Cargo.toml中添加依赖:
[dependencies]
devicons = "0.2"
基本使用方法
1. 获取单个图标
use devicons::DevIcon;
fn main() {
// 获取Rust语言的图标
let rust_icon = DevIcon::Rust;
println!("Rust图标: {}", rust_icon.symbol());
println!("Rust图标颜色: {}", rust_icon.color());
}
2. 遍历所有可用图标
use devicons::DevIcon;
fn main() {
for icon in DevIcon::all() {
println!("{}: {} ({})", icon.name(), icon.symbol(), icon.color());
}
}
实际应用示例
在CLI工具中显示图标
use devicons::{DevIcon, colored::Colorize};
fn main() {
let files = vec![
("main.rs", DevIcon::Rust),
("index.html", DevIcon::Html),
("style.css", DevIcon::Css),
("app.js", DevIcon::Javascript),
];
for (name, icon) in files {
println!("{} {}", icon.symbol().color(icon.color()), name);
}
}
生成技术栈徽章
use devicons::DevIcon;
fn tech_stack_badge(icons: &[DevIcon]) -> String {
icons.iter()
.map(|icon| format!("<span style=\"color:{};\">{}</span>", icon.color(), icon.symbol()))
.collect::<Vec<_>>()
.join(" ")
}
fn main() {
let stack = vec![
DevIcon::Rust,
DevIcon::React,
DevIcon::Postgresql,
DevIcon::Docker,
];
println!("我的技术栈: {}", tech_stack_badge(&stack));
}
支持的图标类型
devicons库包含大量图标,主要包括:
- 编程语言:Rust、Python、Java、JavaScript等
- 框架:React、Vue、Angular等
- 工具:Git、Docker、VSCode等
- 数据库:PostgreSQL、MongoDB、Redis等
- 操作系统:Linux、Apple、Windows等
高级用法
自定义颜色
use devicons::DevIcon;
fn main() {
let mut rust_icon = DevIcon::Rust;
// 覆盖默认颜色
rust_icon.set_color("#FF0000");
println!("{}", rust_icon.symbol());
}
与tui-rs结合使用
use devicons::DevIcon;
use tui::{
widgets::{Block, Borders, Paragraph},
style::{Style, Color},
text::Span,
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 初始化tui...
let rust_icon = DevIcon::Rust;
let span = Span::styled(
rust_icon.symbol(),
Style::default().fg(Color::Rgb(
rust_icon.color_rgb().0,
rust_icon.color_rgb().1,
rust_icon.color_rgb().2,
)),
);
// 在tui界面中使用...
Ok(())
}
完整示例demo
下面是一个完整的CLI应用程序示例,展示了如何使用devicons库来显示项目文件结构:
use devicons::{DevIcon, colored::Colorize};
use std::path::Path;
// 根据文件扩展名获取对应的图标
fn get_file_icon(filename: &str) -> Option<DevIcon> {
let path = Path::new(filename);
match path.extension()?.to_str()? {
"rs" => Some(DevIcon::Rust),
"js" => Some(DevIcon::Javascript),
"py" => Some(DevIcon::Python),
"java" => Some(DevIcon::Java),
"html" => Some(DevIcon::Html),
"css" => Some(DevIcon::Css),
"json" => Some(DevIcon::Json),
"md" => Some(DevIcon::Markdown),
"toml" => Some(DevIcon::Config),
"sh" => Some(DevIcon::Shell),
_ => None,
}
}
fn main() {
// 模拟项目文件结构
let project_files = vec![
"src/main.rs",
"src/lib.rs",
"index.html",
"styles/main.css",
"scripts/app.js",
"README.md",
"Cargo.toml",
"build.sh",
"config.json"
];
println!("项目文件结构:");
for file in project_files {
if let Some(icon) = get_file_icon(file) {
// 使用彩色图标显示文件
println!(" {} {}", icon.symbol().color(icon.color()), file);
} else {
// 没有对应图标的文件
println!(" 📄 {}", file);
}
}
// 显示技术栈
println!("\n项目技术栈:");
let stack = vec![
DevIcon::Rust,
DevIcon::Javascript,
DevIcon::Html,
DevIcon::Css,
DevIcon::Git,
];
for tech in stack {
print!("{} ", tech.symbol().color(tech.color()));
}
println!();
}
这个完整示例展示了:
- 根据文件扩展名自动匹配对应图标
- 在终端中彩色显示文件图标
- 显示项目技术栈
- 处理没有对应图标的情况
devicons库为Rust开发者提供了一种简单的方式来获取和使用各种开发相关的图标,可以大大提升应用程序或文档的视觉效果和专业性。