get_char

Function get_char 

Source
pub fn get_char<T: UnicodeProvider>(provider: &T, key: Option<&str>) -> char
Expand description

Get character using global config

Convenience function that gets a character using the global configuration. This is equivalent to calling get_global_config().get_char(provider, key).

§Arguments

  • provider - The Unicode provider (symbol enum)
  • key - Optional override key for custom character mappings

§Examples

use unicode_rs::prelude::*;

// Set global theme
set_global_config(UnicodeConfig::with_theme(UnicodeTheme::Rich));

// Get characters using global config
let check = get_char(&Symbol::Check, None);
let arrow = get_char(&Arrow::Right, None);

// Use custom override
let bullet = get_char(&Symbol::Check, Some("bullet"));

§Thread Safety

This function is thread-safe as it uses the thread-safe global configuration.

Examples found in repository?
examples/basic_usage.rs (line 74)
8fn main() {
9    println!("Unicode-rs Basic Usage Example");
10    println!("==============================\n");
11
12    // Demonstrate different themes for the same symbol
13    println!("Symbol themes:");
14    println!(
15        "  Minimal: {}",
16        Symbol::Check.get_char(UnicodeTheme::Minimal)
17    );
18    println!("  Basic:   {}", Symbol::Check.get_char(UnicodeTheme::Basic));
19    println!("  Rich:    {}", Symbol::Check.get_char(UnicodeTheme::Rich));
20    println!("  Fancy:   {}", Symbol::Check.get_char(UnicodeTheme::Fancy));
21    println!();
22
23    // Show various symbol categories
24    println!("Symbol categories:");
25
26    // Symbols
27    println!("  Symbols:");
28    println!("    Check: {}", Symbol::Check.get_char(UnicodeTheme::Rich));
29    println!("    X:     {}", Symbol::X.get_char(UnicodeTheme::Rich));
30    println!(
31        "    !:     {}",
32        Symbol::Exclamation.get_char(UnicodeTheme::Rich)
33    );
34    println!(
35        "    ?:     {}",
36        Symbol::Question.get_char(UnicodeTheme::Rich)
37    );
38    println!();
39
40    // Arrows
41    println!("  Arrows:");
42    println!("    Up:    {}", Arrow::Up.get_char(UnicodeTheme::Rich));
43    println!("    Down:  {}", Arrow::Down.get_char(UnicodeTheme::Rich));
44    println!("    Left:  {}", Arrow::Left.get_char(UnicodeTheme::Rich));
45    println!("    Right: {}", Arrow::Right.get_char(UnicodeTheme::Rich));
46    println!();
47
48    // Git symbols
49    println!("  Git Status:");
50    println!(
51        "    Modified:  {}",
52        GitStatus::Modified.get_char(UnicodeTheme::Rich)
53    );
54    println!(
55        "    Added:     {}",
56        GitStatus::Added.get_char(UnicodeTheme::Rich)
57    );
58    println!(
59        "    Deleted:   {}",
60        GitStatus::Deleted.get_char(UnicodeTheme::Rich)
61    );
62    println!(
63        "    Untracked: {}",
64        GitStatus::Untracked.get_char(UnicodeTheme::Rich)
65    );
66    println!();
67
68    // Demonstrate global configuration
69    println!("Global configuration example:");
70
71    // Set global theme to minimal
72    set_global_config(UnicodeConfig::with_theme(UnicodeTheme::Minimal));
73    println!("  With Minimal theme:");
74    println!("    Check: {}", get_char(&Symbol::Check, None));
75    println!("    Arrow: {}", get_char(&Arrow::Right, None));
76
77    // Set global theme to rich with fallback
78    set_global_config(
79        UnicodeConfig::with_theme(UnicodeTheme::Rich)
80            .with_fallback()
81            .with_override("custom_check", '√'),
82    );
83    println!("  With Rich theme + fallback:");
84    println!("    Check: {}", get_char(&Symbol::Check, None));
85    println!(
86        "    Custom: {}",
87        get_char(&Symbol::Check, Some("custom_check"))
88    );
89
90    println!("\nExample complete!");
91}
More examples
Hide additional examples
examples/git_status.rs (line 86)
14fn main() {
15    println!("Git Status Display Example");
16    println!("==========================\n");
17
18    // Sample file statuses
19    let files = vec![
20        FileStatus {
21            path: "src/main.rs".to_string(),
22            status: GitStatus::Modified,
23        },
24        FileStatus {
25            path: "README.md".to_string(),
26            status: GitStatus::Added,
27        },
28        FileStatus {
29            path: "old_file.txt".to_string(),
30            status: GitStatus::Deleted,
31        },
32        FileStatus {
33            path: "new_feature.rs".to_string(),
34            status: GitStatus::Untracked,
35        },
36        FileStatus {
37            path: "Cargo.toml".to_string(),
38            status: GitStatus::Modified,
39        },
40    ];
41
42    // Display with different themes
43    let themes = vec![
44        ("Minimal (ASCII)", UnicodeTheme::Minimal),
45        ("Basic Unicode", UnicodeTheme::Basic),
46        ("Rich Unicode", UnicodeTheme::Rich),
47        ("Fancy Unicode", UnicodeTheme::Fancy),
48    ];
49
50    for (theme_name, theme) in themes {
51        println!("{} theme:", theme_name);
52        println!("{}:", "─".repeat(theme_name.len() + 7));
53
54        for file in &files {
55            let status_char = file.status.get_char(theme);
56            let status_name = format!("{:?}", file.status);
57            println!("  {} {} ({})", status_char, file.path, status_name);
58        }
59        println!();
60    }
61
62    // Demonstrate branch and diff symbols
63    println!("Branch and Diff Symbols:");
64    println!("========================");
65
66    let theme = UnicodeTheme::Rich;
67
68    println!("Branch symbols:");
69    println!("  Current: {}", GitBranch::Current.get_char(theme));
70    println!("  Remote:  {}", GitBranch::Remote.get_char(theme));
71    println!("  Local:   {}", GitBranch::Local.get_char(theme));
72    println!();
73
74    println!("Diff symbols:");
75    println!("  Added:   {}", GitDiff::Added.get_char(theme));
76    println!("  Removed: {}", GitDiff::Removed.get_char(theme));
77    println!("  Modified: {}", GitDiff::Modified.get_char(theme));
78    println!();
79
80    // Create a more realistic git status display
81    println!("Realistic Git Status Display:");
82    println!("============================");
83
84    set_global_config(UnicodeConfig::with_theme(UnicodeTheme::Rich));
85
86    println!("On branch {} main", get_char(&GitBranch::Current, None));
87    println!("Your branch is up to date with 'origin/main'.\n");
88
89    println!("Changes to be committed:");
90    println!("  (use \"git reset HEAD <file>...\" to unstage)\n");
91    for file in files
92        .iter()
93        .filter(|f| matches!(f.status, GitStatus::Added))
94    {
95        println!(
96            "        {} {}",
97            get_char(&GitStatus::Added, None),
98            file.path
99        );
100    }
101
102    println!("\nChanges not staged for commit:");
103    println!("  (use \"git add <file>...\" to update what will be committed)");
104    println!("  (use \"git checkout -- <file>...\" to discard changes in working directory)\n");
105    for file in files
106        .iter()
107        .filter(|f| matches!(f.status, GitStatus::Modified | GitStatus::Deleted))
108    {
109        println!("        {} {}", get_char(&file.status, None), file.path);
110    }
111
112    println!("\nUntracked files:");
113    println!("  (use \"git add <file>...\" to include in what will be committed)\n");
114    for file in files
115        .iter()
116        .filter(|f| matches!(f.status, GitStatus::Untracked))
117    {
118        println!("        {} {}", get_char(&file.status, None), file.path);
119    }
120}
examples/file_browser.rs (line 128)
34fn main() {
35    println!("File Browser Example");
36    println!("===================\n");
37
38    // Sample file entries
39    let files = vec![
40        FileEntry::new("src", true),
41        FileEntry::new("target", true),
42        FileEntry::new("examples", true),
43        FileEntry::new("main.rs", false),
44        FileEntry::new("lib.rs", false),
45        FileEntry::new("Cargo.toml", false),
46        FileEntry::new("README.md", false),
47        FileEntry::new("package.json", false),
48        FileEntry::new("index.html", false),
49        FileEntry::new("style.css", false),
50        FileEntry::new("script.js", false),
51        FileEntry::new("image.png", false),
52        FileEntry::new("document.pdf", false),
53        FileEntry::new("archive.zip", false),
54        FileEntry::new("config.yaml", false),
55        FileEntry::new("data.json", false),
56        FileEntry::new("test.py", false),
57        FileEntry::new("app.go", false),
58        FileEntry::new("component.tsx", false),
59        FileEntry::new("unknown_file", false),
60    ];
61
62    // Display with different themes
63    let themes = vec![
64        ("Minimal (ASCII)", UnicodeTheme::Minimal),
65        ("Rich Unicode", UnicodeTheme::Rich),
66    ];
67
68    for (theme_name, theme) in themes {
69        println!("{} theme:", theme_name);
70        println!("{}:", "─".repeat(theme_name.len() + 7));
71
72        for file in &files {
73            let icon = if file.is_directory {
74                FileType::Directory.get_char(theme)
75            } else if let Some(ext) = &file.extension {
76                let ft = get_file_type_from_extension(ext);
77                ft.get_char(theme)
78            } else {
79                let ft = get_file_type_from_filename(&file.name);
80                ft.get_char(theme)
81            };
82
83            let file_type_name = if file.is_directory {
84                "Directory".to_string()
85            } else if let Some(ext) = &file.extension {
86                let ft = get_file_type_from_extension(ext);
87                format!("{:?}", ft)
88            } else {
89                let ft = get_file_type_from_filename(&file.name);
90                format!("{:?}", ft)
91            };
92
93            println!("  {} {} ({})", icon, file.name, file_type_name);
94        }
95        println!();
96    }
97
98    // Demonstrate language-specific file types
99    println!("Language-specific file types:");
100    println!("============================");
101
102    let theme = UnicodeTheme::Rich;
103    let languages = vec![
104        ("Rust", LanguageType::Rust),
105        ("JavaScript/TypeScript", LanguageType::JavaScript),
106        ("Python", LanguageType::Python),
107        ("Go", LanguageType::Go),
108        ("HTML", LanguageType::Html),
109        ("CSS", LanguageType::Css),
110        ("JSON", LanguageType::Json),
111        ("YAML", LanguageType::Yaml),
112        ("Markdown", LanguageType::Markdown),
113        ("Shell", LanguageType::Shell),
114    ];
115
116    for (name, lang_type) in languages {
117        println!("  {} {}", lang_type.get_char(theme), name);
118    }
119    println!();
120
121    // Create a more realistic file browser display
122    println!("Realistic File Browser Display:");
123    println!("==============================");
124
125    set_global_config(UnicodeConfig::with_theme(UnicodeTheme::Rich));
126
127    println!("📁 /home/user/project");
128    println!("├── {} src/", get_char(&FileType::Directory, None));
129    println!("│   ├── {} main.rs", get_char(&LanguageType::Rust, None));
130    println!("│   ├── {} lib.rs", get_char(&LanguageType::Rust, None));
131    println!("│   └── {} mod.rs", get_char(&LanguageType::Rust, None));
132    println!("├── {} examples/", get_char(&FileType::Directory, None));
133    println!("│   └── {} basic.rs", get_char(&LanguageType::Rust, None));
134    println!("├── {} target/", get_char(&FileType::Directory, None));
135    println!("├── {} Cargo.toml", get_char(&FileType::Config, None));
136    println!("├── {} README.md", get_char(&LanguageType::Markdown, None));
137    println!("├── {} package.json", get_char(&LanguageType::Json, None));
138    println!("└── {} .gitignore", get_char(&FileType::Config, None));
139
140    println!(
141        "\nFile count: {} directories, {} files",
142        files.iter().filter(|f| f.is_directory).count(),
143        files.iter().filter(|f| !f.is_directory).count()
144    );
145}