@@ -143,16 +143,21 @@ async fn main() -> Result<(), Box<dyn Error>> {
143143 } ;
144144 }
145145
146- let arg_devices: Vec < & str > = args. values_of ( "device" ) . unwrap_or_default ( ) . collect ( ) ;
146+ let arg_add_devices: Vec < & str > = args. values_of ( "device" ) . unwrap_or_default ( ) . collect ( ) ;
147+ let arg_ignore_devices: Vec < & str > =
148+ args. values_of ( "ignore-device" ) . unwrap_or_default ( ) . collect ( ) ;
149+
150+ let to_add = |dev : & Device | arg_add_devices. contains ( & dev. name ( ) . unwrap_or ( "[unknown]" ) ) ;
151+ let to_ignore = |dev : & Device | arg_ignore_devices. contains ( & dev. name ( ) . unwrap_or ( "[unknown]" ) ) ;
147152
148153 let keyboard_devices: Vec < _ > = {
149- if arg_devices . is_empty ( ) {
154+ if arg_add_devices . is_empty ( ) {
150155 log:: trace!( "Attempting to find all keyboard file descriptors." ) ;
151- evdev:: enumerate ( ) . filter ( |( _, dev) | check_device_is_keyboard ( dev) ) . collect ( )
152- } else {
153156 evdev:: enumerate ( )
154- . filter ( |( _, dev) | arg_devices . contains ( & dev. name ( ) . unwrap_or ( "" ) ) )
157+ . filter ( |( _, dev) | ! to_ignore ( dev) && check_device_is_keyboard ( dev ) )
155158 . collect ( )
159+ } else {
160+ evdev:: enumerate ( ) . filter ( |( _, dev) | !to_ignore ( dev) && to_add ( dev) ) . collect ( )
156161 }
157162 } ;
158163
@@ -308,8 +313,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
308313 } ,
309314 Ok ( device) => device
310315 } ;
311- let name = device . name ( ) . unwrap_or ( "[unknown]" ) ;
312- if arg_devices . contains ( & name) || check_device_is_keyboard ( & device) {
316+ if !to_ignore ( & device ) && ( to_add ( & device ) || check_device_is_keyboard ( & device ) ) {
317+ let name = device. name ( ) . unwrap_or ( "[unknown]" ) ;
313318 log:: info!( "Device '{}' at '{}' added." , name, node) ;
314319 let _ = device. grab( ) ;
315320 keyboard_states. insert( node. to_string( ) , KeyboardState :: new( ) ) ;
@@ -490,14 +495,22 @@ pub fn set_command_line_args() -> Command<'static> {
490495 )
491496 . arg ( arg ! ( -d - -debug) . required ( false ) . help ( "Enable debug mode." ) )
492497 . arg (
493- arg ! ( -D --device <DEVICE_NAME >)
498+ arg ! ( -D --device <DEVICE_NAMES >)
494499 . required ( false )
495500 . takes_value ( true )
496501 . multiple_occurrences ( true )
497502 . help (
498- "Specific keyboard devices to use. Seperate multiple devices with semicolon." ,
503+ "Specific keyboard devices to use. Separate multiple devices with semicolon." ,
499504 ) ,
500- ) ;
505+ )
506+ . arg ( arg ! ( -I --ignore-device <DEVICE_NAMES >)
507+ . required ( false )
508+ . takes_value ( true )
509+ . multiple_occurrences ( true )
510+ . help (
511+ "Specific keyboard devices to ignore. Separate multiple devices with semicolon."
512+ )
513+ ) ;
501514 app
502515}
503516
0 commit comments