winbrew_windows\font/
user_fonts.rs1use anyhow::{Context, Result};
2use winreg::{
3 RegKey,
4 enums::{HKEY_CURRENT_USER, KEY_SET_VALUE},
5};
6
7pub(crate) const USER_FONTS_REGISTRY_PATH: &str =
8 r"Software\Microsoft\Windows NT\CurrentVersion\Fonts";
9
10pub(crate) fn register_user_font_value(value_name: &str, value_data: &str) -> Result<()> {
12 let hkcu = RegKey::predef(HKEY_CURRENT_USER);
13 let (fonts_key, _) = hkcu
14 .create_subkey(USER_FONTS_REGISTRY_PATH)
15 .context("failed to create Windows fonts registry key")?;
16
17 fonts_key
18 .set_value(value_name, &value_data)
19 .with_context(|| format!("failed to write registry entry '{}'", value_name))?;
20
21 Ok(())
22}
23
24pub(crate) fn unregister_user_font_value(value_name: &str) -> Result<()> {
26 let hkcu = RegKey::predef(HKEY_CURRENT_USER);
27
28 let Ok(fonts_key) = hkcu.open_subkey_with_flags(USER_FONTS_REGISTRY_PATH, KEY_SET_VALUE) else {
29 return Ok(());
30 };
31
32 match fonts_key.delete_value(value_name) {
33 Ok(()) => Ok(()),
34 Err(err) if err.kind() == std::io::ErrorKind::NotFound => Ok(()),
35 Err(err) => {
36 Err(err).with_context(|| format!("failed to remove registry entry '{}'", value_name))
37 }
38 }
39}