mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-05-11 04:15:48 +02:00
Merge a42b16438e
into ef1da6f704
This commit is contained in:
commit
2da0e9f41a
6 changed files with 29 additions and 6 deletions
|
@ -425,7 +425,7 @@ os:
|
|||
# Whether lazygit suspends until an edit process returns
|
||||
editInTerminal: false
|
||||
|
||||
# For opening a directory in an editor
|
||||
# For opening a directory in an editor. Should contain "{{dir}}".
|
||||
openDirInEditor: ""
|
||||
|
||||
# A built-in preset that sets all of the above settings. Supported presets
|
||||
|
|
|
@ -555,7 +555,7 @@ os:
|
|||
# Whether lazygit suspends until an edit process returns
|
||||
editInTerminal: false
|
||||
|
||||
# For opening a directory in an editor
|
||||
# For opening a directory in an editor. Should contain "{{dir}}".
|
||||
openDirInEditor: ""
|
||||
|
||||
# A built-in preset that sets all of the above settings. Supported presets
|
||||
|
|
|
@ -570,7 +570,7 @@ type OSConfig struct {
|
|||
// [dev] We're naming this `editInTerminal` for backwards compatibility
|
||||
SuspendOnEdit *bool `yaml:"editInTerminal,omitempty"`
|
||||
|
||||
// For opening a directory in an editor
|
||||
// For opening a directory in an editor. Should contain "{{dir}}".
|
||||
OpenDirInEditor string `yaml:"openDirInEditor,omitempty"`
|
||||
|
||||
// A built-in preset that sets all of the above settings. Supported presets
|
||||
|
|
|
@ -90,8 +90,8 @@ func (self *FilesController) GetKeybindings(opts types.KeybindingsOpts) []*types
|
|||
},
|
||||
{
|
||||
Key: opts.GetKey(opts.Config.Universal.Edit),
|
||||
Handler: self.withItems(self.edit),
|
||||
GetDisabledReason: self.require(self.itemsSelected(self.canEditFiles)),
|
||||
Handler: self.withItems(self.editOrOpenDir),
|
||||
GetDisabledReason: self.any(self.singleItemSelected(), self.itemsSelected(self.canEditFiles)),
|
||||
Description: self.c.Tr.Edit,
|
||||
Tooltip: self.c.Tr.EditFileTooltip,
|
||||
DisplayOnScreen: true,
|
||||
|
@ -913,6 +913,14 @@ func (self *FilesController) edit(nodes []*filetree.FileNode) error {
|
|||
}))
|
||||
}
|
||||
|
||||
func (self *FilesController) editOrOpenDir(nodes []*filetree.FileNode) error {
|
||||
if len(nodes) == 1 && !nodes[0].IsFile() {
|
||||
return self.c.Helpers().Files.OpenDirInEditor(nodes[0].GetPath())
|
||||
} else {
|
||||
return self.edit(nodes)
|
||||
}
|
||||
}
|
||||
|
||||
func (self *FilesController) canEditFiles(nodes []*filetree.FileNode) *types.DisabledReason {
|
||||
if lo.NoneBy(nodes, func(node *filetree.FileNode) bool { return node.IsFile() }) {
|
||||
return &types.DisabledReason{
|
||||
|
|
|
@ -44,6 +44,21 @@ func (self *ListControllerTrait[T]) require(callbacks ...func() *types.DisabledR
|
|||
}
|
||||
}
|
||||
|
||||
// Complement to require - returns nil if any of the provided callbacks return nil.
|
||||
// If all callbacks return a non-nil DisabledReason, it returns the last one encountered.
|
||||
func (self *ListControllerTrait[T]) any(callbacks ...func() *types.DisabledReason) func() *types.DisabledReason {
|
||||
return func() *types.DisabledReason {
|
||||
var disabledReason *types.DisabledReason
|
||||
for _, callback := range callbacks {
|
||||
if disabledReason := callback(); disabledReason == nil {
|
||||
return disabledReason
|
||||
}
|
||||
}
|
||||
|
||||
return disabledReason
|
||||
}
|
||||
}
|
||||
|
||||
// Convenience function for enforcing that a single item is selected.
|
||||
// Also takes callbacks for additional disabled reasons, and passes the selected
|
||||
// item into each one.
|
||||
|
|
|
@ -1543,7 +1543,7 @@
|
|||
},
|
||||
"openDirInEditor": {
|
||||
"type": "string",
|
||||
"description": "For opening a directory in an editor"
|
||||
"description": "For opening a directory in an editor. Should contain \"{{dir}}\"."
|
||||
},
|
||||
"editPreset": {
|
||||
"type": "string",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue