@@ -143,16 +143,21 @@ 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 ( ) ;
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]" ) ) ;
147
152
148
153
let keyboard_devices: Vec < _ > = {
149
- if arg_devices . is_empty ( ) {
154
+ if arg_add_devices . is_empty ( ) {
150
155
log:: trace!( "Attempting to find all keyboard file descriptors." ) ;
151
- evdev:: enumerate ( ) . filter ( |( _, dev) | check_device_is_keyboard ( dev) ) . collect ( )
152
- } else {
153
156
evdev:: enumerate ( )
154
- . filter ( |( _, dev) | arg_devices . contains ( & dev. name ( ) . unwrap_or ( "" ) ) )
157
+ . filter ( |( _, dev) | ! to_ignore ( dev) && check_device_is_keyboard ( dev ) )
155
158
. collect ( )
159
+ } else {
160
+ evdev:: enumerate ( ) . filter ( |( _, dev) | !to_ignore ( dev) && to_add ( dev) ) . collect ( )
156
161
}
157
162
} ;
158
163
@@ -308,8 +313,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
308
313
} ,
309
314
Ok ( device) => device
310
315
} ;
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]" ) ;
313
318
log:: info!( "Device '{}' at '{}' added." , name, node) ;
314
319
let _ = device. grab( ) ;
315
320
keyboard_states. insert( node. to_string( ) , KeyboardState :: new( ) ) ;
@@ -490,14 +495,22 @@ pub fn set_command_line_args() -> Command<'static> {
490
495
)
491
496
. arg ( arg ! ( -d - -debug) . required ( false ) . help ( "Enable debug mode." ) )
492
497
. arg (
493
- arg ! ( -D --device <DEVICE_NAME >)
498
+ arg ! ( -D --device <DEVICE_NAMES >)
494
499
. required ( false )
495
500
. takes_value ( true )
496
501
. multiple_occurrences ( true )
497
502
. help (
498
- "Specific keyboard devices to use. Seperate multiple devices with semicolon." ,
503
+ "Specific keyboard devices to use. Separate multiple devices with semicolon." ,
499
504
) ,
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
+ ) ;
501
514
app
502
515
}
503
516
0 commit comments