@@ -4,7 +4,7 @@ use yazi_fs::File;
44use yazi_macro:: { act, succ} ;
55use yazi_parser:: mgr:: { OpenDoOpt , OpenOpt } ;
66use yazi_proxy:: MgrProxy ;
7- use yazi_shared:: { data:: Data , url :: UrlCow } ;
7+ use yazi_shared:: data:: Data ;
88use yazi_vfs:: VfsFile ;
99
1010use crate :: { Actor , Ctx , mgr:: Quit } ;
@@ -17,27 +17,28 @@ impl Actor for Open {
1717 const NAME : & str = "open" ;
1818
1919 fn act ( cx : & mut Ctx , mut opt : Self :: Options ) -> Result < Data > {
20- act ! ( mgr: escape_visual, cx) ?;
21-
22- let Some ( hovered) = cx. hovered ( ) . map ( |h| h. url_owned ( ) ) . map ( UrlCow :: from) else { succ ! ( ) } ;
23-
2420 if !opt. interactive && ARGS . chooser_file . is_some ( ) {
2521 succ ! ( if !opt. targets. is_empty( ) {
2622 Quit :: with_selected( opt. targets)
2723 } else if opt. hovered {
28- Quit :: with_selected( [ hovered] )
24+ Quit :: with_selected( cx . hovered( ) . map ( |h| & h . url ) )
2925 } else {
26+ act!( mgr: escape_visual, cx) ?;
3027 Quit :: with_selected( cx. tab( ) . selected_or_hovered( ) )
3128 } ) ;
3229 }
3330
3431 if opt. targets . is_empty ( ) {
3532 opt. targets = if opt. hovered {
36- vec ! [ hovered . clone( ) ]
33+ cx . hovered ( ) . map ( |h| vec ! [ h . url . clone( ) . into ( ) ] ) . unwrap_or_default ( )
3734 } else {
35+ act ! ( mgr: escape_visual, cx) ?;
3836 cx. tab ( ) . selected_or_hovered ( ) . cloned ( ) . map ( Into :: into) . collect ( )
3937 } ;
4038 }
39+ if opt. targets . is_empty ( ) {
40+ succ ! ( ) ;
41+ }
4142
4243 let todo: Vec < _ > = opt
4344 . targets
@@ -49,7 +50,7 @@ impl Actor for Open {
4950
5051 let cwd = cx. cwd ( ) . clone ( ) ;
5152 if todo. is_empty ( ) {
52- return act ! ( mgr: open_do, cx, OpenDoOpt { cwd, hovered , targets: opt. targets, interactive: opt. interactive } ) ;
53+ return act ! ( mgr: open_do, cx, OpenDoOpt { cwd, targets: opt. targets, interactive: opt. interactive } ) ;
5354 }
5455
5556 let scheduler = cx. tasks . scheduler . clone ( ) ;
@@ -61,12 +62,7 @@ impl Actor for Open {
6162 }
6263 }
6364 if scheduler. fetch_mimetype ( files) . await {
64- MgrProxy :: open_do ( OpenDoOpt {
65- cwd,
66- hovered,
67- targets : opt. targets ,
68- interactive : opt. interactive ,
69- } ) ;
65+ MgrProxy :: open_do ( OpenDoOpt { cwd, targets : opt. targets , interactive : opt. interactive } ) ;
7066 }
7167 } ) ;
7268 succ ! ( ) ;
0 commit comments