Skip to content

Commit

Permalink
nerd icon filetype association
Browse files Browse the repository at this point in the history
  • Loading branch information
Redhawk18 committed Mar 11, 2024
1 parent 0b71e39 commit 88133e0
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 5 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ dark-light = "1.0"
iced = { version = "0.12", features = ["tokio"] }
iced_aw = { version = "0.8", features = ["icons", "menu","tab_bar"], default-features = false }
log = "0.4"
pattern_code = "0.1"
pretty_env_logger = "0.5"
rfd = { version = "0.13", features = ["xdg-portal", "tokio"], default-features = false}
slotmap = "1.0"
Expand Down
1 change: 1 addition & 0 deletions gui/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ dark-light.workspace = true
iced.workspace = true
iced_aw.workspace = true
log.workspace = true
pattern_code.workspace = true
rfd.workspace = true
slotmap.workspace = true
snafu.workspace = true
Expand Down
87 changes: 82 additions & 5 deletions gui/src/widgets/tab_bar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ use iced::{
widget::{column, text_editor, Column},
Element, Length, Renderer, Theme,
};
use iced_aw::{TabBar, TabLabel};
use iced_aw::{
core::icons::nerd::{icon_to_char, Nerd},
TabBar, TabLabel,
};
use std::path::PathBuf;

pub(crate) fn tab_bar<'a>(
active: usize,
Expand All @@ -23,12 +27,21 @@ fn head(active: usize, data: &[&Buffer]) -> TabBar<Message, usize, Theme, Render
for (i, tab) in data.iter().enumerate() {
match tab {
Buffer::File(file_buffer) => {
let filename = match &file_buffer.path {
Some(path) => path.file_name().unwrap().to_str().unwrap(),
None => "New Tab",
let file_name = if let Some(path) = &file_buffer.path {
path.file_name()
.expect("path is some, filename should not be none")
.to_string_lossy()
.to_string()
} else {
"New Tab".to_string()
};
let file_icon = if let Some(path) = &file_buffer.path {
path_to_char(path)
} else {
icon_to_char(Nerd::File)
};

tab_bar = tab_bar.push(i, TabLabel::Text(String::from(filename)));
tab_bar = tab_bar.push(i, TabLabel::IconText(file_icon, file_name));
}
}
}
Expand All @@ -46,3 +59,67 @@ fn body<'a>(active: usize, data: &[&'a Buffer]) -> Element<'a, Message> {
.into(),
}
}

/// Maps the file name to [`pattern_code::Langauges`]'s and matchs and returns the icon's char
/// value
fn path_to_char(path: &PathBuf) -> char {
icon_to_char(match pattern_code::path_to_language(path) {
pattern_code::Language::Assembly => Nerd::FileBinary,
pattern_code::Language::Bash => Nerd::Bash,
pattern_code::Language::Batch => Nerd::Powershell,
pattern_code::Language::C => Nerd::LanguageC,
pattern_code::Language::Cargo => Nerd::ICustomToml,
pattern_code::Language::Cargolock => Nerd::Lock,
pattern_code::Language::CMake => Nerd::Gear,
pattern_code::Language::CPP => Nerd::LanguageCpp,
pattern_code::Language::CSS => Nerd::LanguageCssthree,
pattern_code::Language::DockerCompose => Nerd::Docker,
pattern_code::Language::Dockerfile => Nerd::Docker,
pattern_code::Language::DockerIgnore => Nerd::Docker,
pattern_code::Language::Elixir => Nerd::ISetiElixirScript,
pattern_code::Language::Elm => Nerd::ICustomElm,
pattern_code::Language::Env => Nerd::Gear,
pattern_code::Language::Erlang => Nerd::File,
pattern_code::Language::GitIgnore => Nerd::Git,
pattern_code::Language::Go => Nerd::LanguageGo,
pattern_code::Language::H => Nerd::LanguageC,
pattern_code::Language::Haskell => Nerd::LanguageHaskell,
pattern_code::Language::HPP => Nerd::LanguageCpp,
pattern_code::Language::HTML => Nerd::LanguageHtmlfive,
pattern_code::Language::Java => Nerd::LanguageJava,
pattern_code::Language::JavaScript => Nerd::LanguageJavascript,
pattern_code::Language::Json => Nerd::Json,
pattern_code::Language::Jupyter => Nerd::LanguagePython,
pattern_code::Language::Kotlin => Nerd::LanguageKotlin,
pattern_code::Language::Lisp => Nerd::ICustomCommonLisp,
pattern_code::Language::Lua => Nerd::LanguageLua,
pattern_code::Language::Makefile => Nerd::ISetiMakefile,
pattern_code::Language::Markdown => Nerd::MarkdownOne,
pattern_code::Language::Nix => Nerd::Nix,
pattern_code::Language::OCaml => Nerd::ISetiOcaml,
pattern_code::Language::Perl => Nerd::ISetiPerl,
pattern_code::Language::PHP => Nerd::LanguagePhp,
pattern_code::Language::PowerShell => Nerd::TerminalPowershell,
pattern_code::Language::Python => Nerd::LanguagePython,
pattern_code::Language::R => Nerd::LanguageR,
pattern_code::Language::Racket => Nerd::Code,
pattern_code::Language::ReadMe => Nerd::MarkdownOne,
pattern_code::Language::Ruby => Nerd::LanguageRuby,
pattern_code::Language::Rust => Nerd::LanguageRust,
pattern_code::Language::Shell => Nerd::Terminal,
pattern_code::Language::SQL => Nerd::Database,
pattern_code::Language::Svelte => Nerd::ISetiSvelte,
pattern_code::Language::SVG => Nerd::Svg,
pattern_code::Language::Swift => Nerd::LanguageSwift,
pattern_code::Language::Text => Nerd::Text,
pattern_code::Language::Toml => Nerd::ICustomToml,
pattern_code::Language::Typescript => Nerd::LanguageTypescript,
pattern_code::Language::Vue => Nerd::Vuejs,
pattern_code::Language::XAML => Nerd::LanguageXaml,
pattern_code::Language::XML => Nerd::Xml,
pattern_code::Language::Yaml => Nerd::Code,
pattern_code::Language::Zig => Nerd::ISetiZig,
pattern_code::Language::Zsh => Nerd::TerminalBash,
pattern_code::Language::Unknown => Nerd::File,
})
}

0 comments on commit 88133e0

Please sign in to comment.