# dmenu_facade This is a small library that allows dmenu to be used from a rust-project. It currently only works on linux and depends on dmenu being in the users \$PATH. **DISCLAIMER: dmenu_facade uses the shell to interact with dmenu, look through the source if this makes you uncomfortable** I mainly created this library for myself, since i wanted to start writing rust binaries instead of some of my scripts. For some of these scripts i wanted to have the ease of using dmenu as user interactions. # How to use dmenu_facade is pretty easy to use. It's used as a builder pattern with an execute method to finalize the instruction. It includes most of the args from `man dmenu`. It takes a list of items that must implement the `Display` trait and returns the picked item by reference or as owned depending on which function is called. If more that one item's `Display` output is equal, the last item in the `Vec` will be returned. ## Example ```rs use dmenu_facade::*; use std::error::Error; use std::fmt::Display; pub fn main() -> Result<(), Box> { let items = vec![ TestStruct { id: 0, text: "Hello".to_string(), }, TestStruct { id: 1, text: "World".to_string(), }, TestStruct { id: 2, text: "!".to_string(), }, ]; println!( "id: {}", DMenu::default().execute_consume(items).unwrap().id ); Ok(()) } // Just a test struct to see that it can work with more complex structs, as long as they implement Display struct TestStruct { id: i32, text: String, } impl Display for TestStruct { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { self.text.fmt(f) } } ```