@@ -143,15 +143,25 @@ async fn main() -> Result<(), Box<dyn Error>> {
143
143
} ;
144
144
}
145
145
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 ( ) ;
147
149
148
150
let keyboard_devices: Vec < _ > = {
149
- if arg_devices . is_empty ( ) {
151
+ if arg_add_devices . is_empty ( ) {
150
152
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 ( )
152
159
} else {
153
160
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
+ } )
155
165
. collect ( )
156
166
}
157
167
} ;
@@ -309,7 +319,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
309
319
Ok ( device) => device
310
320
} ;
311
321
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) ) {
313
323
log:: info!( "Device '{}' at '{}' added." , name, node) ;
314
324
let _ = device. grab( ) ;
315
325
keyboard_states. insert( node. to_string( ) , KeyboardState :: new( ) ) ;
@@ -490,14 +500,22 @@ pub fn set_command_line_args() -> Command<'static> {
490
500
)
491
501
. arg ( arg ! ( -d - -debug) . required ( false ) . help ( "Enable debug mode." ) )
492
502
. arg (
493
- arg ! ( -D --device <DEVICE_NAME >)
503
+ arg ! ( -D --device <DEVICE_NAMES >)
494
504
. required ( false )
495
505
. takes_value ( true )
496
506
. multiple_occurrences ( true )
497
507
. help (
498
- "Specific keyboard devices to use. Seperate multiple devices with semicolon." ,
508
+ "Specific keyboard devices to use. Separate multiple devices with semicolon." ,
499
509
) ,
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. Separate multiple devices with semicolon."
517
+ )
518
+ ) ;
501
519
app
502
520
}
503
521
0 commit comments