File tree 2 files changed +25
-2
lines changed
2 files changed +25
-2
lines changed Original file line number Diff line number Diff line change @@ -90,8 +90,8 @@ func (self *FilesController) GetKeybindings(opts types.KeybindingsOpts) []*types
90
90
},
91
91
{
92
92
Key : opts .GetKey (opts .Config .Universal .Edit ),
93
- Handler : self .withItems (self .edit ),
94
- GetDisabledReason : self .require ( self .itemsSelected (self .canEditFiles )),
93
+ Handler : self .withItems (self .editOrOpenDir ),
94
+ GetDisabledReason : self .any ( self . singleItemSelected (), self .itemsSelected (self .canEditFiles )),
95
95
Description : self .c .Tr .Edit ,
96
96
Tooltip : self .c .Tr .EditFileTooltip ,
97
97
DisplayOnScreen : true ,
@@ -913,6 +913,14 @@ func (self *FilesController) edit(nodes []*filetree.FileNode) error {
913
913
}))
914
914
}
915
915
916
+ func (self * FilesController ) editOrOpenDir (nodes []* filetree.FileNode ) error {
917
+ if len (nodes ) == 1 && ! nodes [0 ].IsFile () {
918
+ return self .c .Helpers ().Files .OpenDirInEditor (nodes [0 ].GetPath ())
919
+ } else {
920
+ return self .edit (nodes )
921
+ }
922
+ }
923
+
916
924
func (self * FilesController ) canEditFiles (nodes []* filetree.FileNode ) * types.DisabledReason {
917
925
if lo .NoneBy (nodes , func (node * filetree.FileNode ) bool { return node .IsFile () }) {
918
926
return & types.DisabledReason {
Original file line number Diff line number Diff line change @@ -44,6 +44,21 @@ func (self *ListControllerTrait[T]) require(callbacks ...func() *types.DisabledR
44
44
}
45
45
}
46
46
47
+ // Complement to require - returns nil if any of the provided callbacks return nil.
48
+ // If all callbacks return a non-nil DisabledReason, it returns the last one encountered.
49
+ func (self * ListControllerTrait [T ]) any (callbacks ... func () * types.DisabledReason ) func () * types.DisabledReason {
50
+ return func () * types.DisabledReason {
51
+ var disabledReason * types.DisabledReason
52
+ for _ , callback := range callbacks {
53
+ if disabledReason := callback (); disabledReason == nil {
54
+ return disabledReason
55
+ }
56
+ }
57
+
58
+ return disabledReason
59
+ }
60
+ }
61
+
47
62
// Convenience function for enforcing that a single item is selected.
48
63
// Also takes callbacks for additional disabled reasons, and passes the selected
49
64
// item into each one.
You can’t perform that action at this time.
0 commit comments