WIP WIP: keymap generation test passes meta: Update features and version WiP: cargo.lock WIP: don't crash WIP: no outlines parsing: New tests WIP: base level works WIP: remove old keyboard symbols correctly input WIP: lodaing files WIP: fallback works Valid fallback
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
/*! XDG directory handling. */
 | 
						|
 | 
						|
/* Based on dirs-sys https://github.com/soc/dirs-sys-rs
 | 
						|
 * by "Simon Ochsenreither <simon@ochsenreither.de>",
 | 
						|
 * Licensed under either of
 | 
						|
 | 
						|
    Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
 | 
						|
    MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
 | 
						|
 | 
						|
at your option.
 | 
						|
 * 
 | 
						|
 * Based on dirs https://github.com/soc/dirs-rs
 | 
						|
 * by "Simon Ochsenreither <simon@ochsenreither.de>",
 | 
						|
 * Licensed under either of
 | 
						|
 | 
						|
    Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
 | 
						|
    MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
 | 
						|
 | 
						|
at your option.
 | 
						|
 * 
 | 
						|
 * Based on xdg https://github.com/whitequark/rust-xdg
 | 
						|
 * by "Ben Longbons <b.r.longbons@gmail.com>",
 | 
						|
 *    "whitequark <whitequark@whitequark.org>",
 | 
						|
rust-xdg is distributed under the terms of both the MIT license and the Apache License (Version 2.0).
 | 
						|
 * 
 | 
						|
 * The above crates were used to get
 | 
						|
 * a version without all the excessive dependencies.
 | 
						|
 */
 | 
						|
 | 
						|
use std::env;
 | 
						|
use std::ffi::OsString;
 | 
						|
use std::path::{ Path, PathBuf };
 | 
						|
 | 
						|
 | 
						|
fn is_absolute_path(path: OsString) -> Option<PathBuf> {
 | 
						|
    let path = PathBuf::from(path);
 | 
						|
    if path.is_absolute() {
 | 
						|
        Some(path)
 | 
						|
    } else {
 | 
						|
        None
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
fn home_dir() -> Option<PathBuf> {
 | 
						|
    return env::var_os("HOME")
 | 
						|
        .and_then(|h| if h.is_empty() { None } else { Some(h) })
 | 
						|
        .map(PathBuf::from);
 | 
						|
}
 | 
						|
 | 
						|
fn data_dir() -> Option<PathBuf> {
 | 
						|
    env::var_os("XDG_DATA_HOME")
 | 
						|
        .and_then(is_absolute_path)
 | 
						|
        .or_else(|| home_dir().map(|h| h.join(".local/share")))
 | 
						|
}
 | 
						|
 | 
						|
/// Returns the path to the directory within the data dir
 | 
						|
pub fn data_path<P>(path: P) -> Option<PathBuf>
 | 
						|
    where P: AsRef<Path>
 | 
						|
{
 | 
						|
    data_dir().map(|dir| {
 | 
						|
        dir.join(path.as_ref())
 | 
						|
    })
 | 
						|
}
 |