@@ -143,15 +143,25 @@ 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 ( ) ;
147149
148150 let keyboard_devices: Vec < _ > = {
149- if arg_devices . is_empty ( ) {
151+ if arg_add_devices . is_empty ( ) {
150152 log:: trace!( "Attempting to find all keyboard file descriptors." ) ;
151- evdev:: enumerate ( ) . filter ( |( _, dev) | check_device_is_keyboard ( dev) ) . collect ( )
153+ evdev:: enumerate ( )
154+ . filter ( |( _, dev) | {
155+ !arg_ignore_devices. contains ( & dev. name ( ) . unwrap_or ( "" ) )
156+ && check_device_is_keyboard ( dev)
157+ } )
158+ . collect ( )
152159 } else {
153160 evdev:: enumerate ( )
154- . filter ( |( _, dev) | arg_devices. contains ( & dev. name ( ) . unwrap_or ( "" ) ) )
161+ . filter ( |( _, dev) | {
162+ !arg_ignore_devices. contains ( & dev. name ( ) . unwrap_or ( "" ) )
163+ && arg_add_devices. contains ( & dev. name ( ) . unwrap_or ( "" ) )
164+ } )
155165 . collect ( )
156166 }
157167 } ;
@@ -309,7 +319,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
309319 Ok ( device) => device
310320 } ;
311321 let name = device. name( ) . unwrap_or( "[unknown]" ) ;
312- if arg_devices . contains( & name) || check_device_is_keyboard( & device) {
322+ if !arg_ignore_devices . contains( & name) && ( arg_add_devices . contains ( & name ) || check_device_is_keyboard( & device) ) {
313323 log:: info!( "Device '{}' at '{}' added." , name, node) ;
314324 let _ = device. grab( ) ;
315325 keyboard_states. insert( node. to_string( ) , KeyboardState :: new( ) ) ;
@@ -490,14 +500,22 @@ pub fn set_command_line_args() -> Command<'static> {
490500 )
491501 . arg ( arg ! ( -d - -debug) . required ( false ) . help ( "Enable debug mode." ) )
492502 . arg (
493- arg ! ( -D --device <DEVICE_NAME >)
503+ arg ! ( -D --device <DEVICE_NAMES >)
494504 . required ( false )
495505 . takes_value ( true )
496506 . multiple_occurrences ( true )
497507 . help (
498508 "Specific keyboard devices to use. Seperate multiple devices with semicolon." ,
499509 ) ,
500- ) ;
510+ )
511+ . arg ( arg ! ( -I --ignore-device <DEVICE_NAMES >)
512+ . required ( false )
513+ . takes_value ( true )
514+ . multiple_occurrences ( true )
515+ . help (
516+ "Specific keyboard devices to ignore. Seperate multiple devices with semicolon."
517+ )
518+ ) ;
501519 app
502520}
503521
0 commit comments