@@ -64,6 +64,10 @@ struct Args {
6464 /// Take a list of devices from the user
6565 #[ arg( short = 'D' , long, num_args = 0 .., value_delimiter = ' ' ) ]
6666 device : Vec < String > ,
67+
68+ /// Take a list of devices to ignore from the user
69+ #[ arg( short = 'I' , long, num_args = 0 .., value_delimiter = ' ' ) ]
70+ ignoredevice : Vec < String > ,
6771}
6872
6973#[ tokio:: main]
@@ -118,16 +122,22 @@ async fn main() -> Result<(), Box<dyn Error>> {
118122
119123 let mut modes = load_config ( ) ;
120124 let mut mode_stack: Vec < usize > = vec ! [ 0 ] ;
121- let arg_devices: Vec < String > = args. device ;
125+ let arg_add_devices = args. device ;
126+ let arg_ignore_devices = args. ignoredevice ;
127+
128+ let to_add =
129+ |dev : & Device | arg_add_devices. contains ( & dev. name ( ) . unwrap_or ( "[unknown]" ) . to_string ( ) ) ;
130+ let to_ignore =
131+ |dev : & Device | arg_ignore_devices. contains ( & dev. name ( ) . unwrap_or ( "[unknown]" ) . to_string ( ) ) ;
122132
123133 let keyboard_devices: Vec < _ > = {
124- if arg_devices . is_empty ( ) {
134+ if arg_add_devices . is_empty ( ) {
125135 log:: trace!( "Attempting to find all keyboard file descriptors." ) ;
126- evdev:: enumerate ( ) . filter ( |( _, dev) | check_device_is_keyboard ( dev) ) . collect ( )
127- } else {
128136 evdev:: enumerate ( )
129- . filter ( |( _, dev) | arg_devices . contains ( & dev. name ( ) . unwrap_or ( "" ) . to_string ( ) ) )
137+ . filter ( |( _, dev) | ! to_ignore ( dev) && check_device_is_keyboard ( dev ) )
130138 . collect ( )
139+ } else {
140+ evdev:: enumerate ( ) . filter ( |( _, dev) | !to_ignore ( dev) && to_add ( dev) ) . collect ( )
131141 }
132142 } ;
133143
@@ -279,8 +289,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
279289 } ,
280290 Ok ( device) => device
281291 } ;
282- let name = device . name ( ) . unwrap_or ( "[unknown]" ) . to_string ( ) ;
283- if arg_devices . contains ( & name) || check_device_is_keyboard ( & device) {
292+ if !to_ignore ( & device ) && ( to_add ( & device ) || check_device_is_keyboard ( & device ) ) {
293+ let name = device. name ( ) . unwrap_or ( "[unknown]" ) ;
284294 log:: info!( "Device '{}' at '{}' added." , name, node) ;
285295 let _ = device. grab( ) ;
286296 keyboard_states. insert( node. to_string( ) , KeyboardState :: new( ) ) ;
0 commit comments