@@ -79,6 +79,7 @@ impl FilePicker {
7979 match key. code {
8080 KeyCode :: Char ( 'q' ) => break ,
8181 KeyCode :: Char ( '?' ) => self . show_help = !self . show_help ,
82+ KeyCode :: Char ( 'a' ) if !self . show_help => self . select_all ( ) ,
8283 KeyCode :: Char ( 'x' )
8384 if !self . show_help && !self . selected_files . is_empty ( ) =>
8485 {
@@ -332,6 +333,21 @@ impl FilePicker {
332333 Ok ( ( ) )
333334 }
334335
336+ fn select_all ( & mut self ) {
337+ let before = self . selected_files . len ( ) ;
338+
339+ for path in & self . files {
340+ if path. is_file ( ) && !self . selected_files . contains ( path) {
341+ self . selected_files . push ( path. clone ( ) ) ;
342+ }
343+ }
344+
345+ // If this was previously empty, move the buffer cursor to the first item
346+ if before == 0 && !self . selected_files . is_empty ( ) {
347+ self . selected_list_state . select ( Some ( 0 ) ) ;
348+ }
349+ }
350+
335351 fn go_up ( & mut self ) -> Result < ( ) > {
336352 if let Some ( parent) = self . current_dir . parent ( ) {
337353 self . current_dir = parent. to_path_buf ( ) ;
@@ -360,6 +376,8 @@ impl FilePicker {
360376 Line :: from( " Select/open directory" ) ,
361377 Line :: from( Span :: styled( "x" , Style :: default ( ) . fg( Color :: Yellow ) ) ) ,
362378 Line :: from( " Unselect file" ) ,
379+ Line :: from( Span :: styled( "a" , Style :: default ( ) . fg( Color :: Yellow ) ) ) ,
380+ Line :: from( " Select all files" ) ,
363381 Line :: from( Span :: styled(
364382 "Backspace" ,
365383 Style :: default ( ) . fg( Color :: Yellow ) ,
0 commit comments