mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	move custom command action into its own file
This commit is contained in:
		
							
								
								
									
										53
									
								
								pkg/gui/controllers/custom_command_action.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								pkg/gui/controllers/custom_command_action.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| package controllers | ||||
|  | ||||
| import ( | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/jesseduffield/generics/slices" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/types" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/utils" | ||||
| 	"github.com/samber/lo" | ||||
| ) | ||||
|  | ||||
| type CustomCommandAction struct { | ||||
| 	c *ControllerCommon | ||||
| } | ||||
|  | ||||
| func (self *CustomCommandAction) Call() error { | ||||
| 	return self.c.Prompt(types.PromptOpts{ | ||||
| 		Title:               self.c.Tr.CustomCommand, | ||||
| 		FindSuggestionsFunc: self.GetCustomCommandsHistorySuggestionsFunc(), | ||||
| 		HandleConfirm: func(command string) error { | ||||
| 			if self.shouldSaveCommand(command) { | ||||
| 				self.c.GetAppState().CustomCommandsHistory = utils.Limit( | ||||
| 					lo.Uniq(append(self.c.GetAppState().CustomCommandsHistory, command)), | ||||
| 					1000, | ||||
| 				) | ||||
| 			} | ||||
|  | ||||
| 			err := self.c.SaveAppState() | ||||
| 			if err != nil { | ||||
| 				self.c.Log.Error(err) | ||||
| 			} | ||||
|  | ||||
| 			self.c.LogAction(self.c.Tr.Actions.CustomCommand) | ||||
| 			return self.c.RunSubprocessAndRefresh( | ||||
| 				self.c.OS().Cmd.NewShell(command), | ||||
| 			) | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (self *CustomCommandAction) GetCustomCommandsHistorySuggestionsFunc() func(string) []*types.Suggestion { | ||||
| 	// reversing so that we display the latest command first | ||||
| 	history := slices.Reverse(self.c.GetAppState().CustomCommandsHistory) | ||||
|  | ||||
| 	return helpers.FuzzySearchFunc(history) | ||||
| } | ||||
|  | ||||
| // this mimics the shell functionality `ignorespace` | ||||
| // which doesn't save a command to history if it starts with a space | ||||
| func (self *CustomCommandAction) shouldSaveCommand(command string) bool { | ||||
| 	return !strings.HasPrefix(command, " ") | ||||
| } | ||||
| @@ -1,13 +1,7 @@ | ||||
| package controllers | ||||
|  | ||||
| import ( | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/jesseduffield/generics/slices" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/types" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/utils" | ||||
| 	"github.com/samber/lo" | ||||
| ) | ||||
|  | ||||
| type GlobalController struct { | ||||
| @@ -35,41 +29,7 @@ func (self *GlobalController) GetKeybindings(opts types.KeybindingsOpts) []*type | ||||
| } | ||||
|  | ||||
| func (self *GlobalController) customCommand() error { | ||||
| 	return self.c.Prompt(types.PromptOpts{ | ||||
| 		Title:               self.c.Tr.CustomCommand, | ||||
| 		FindSuggestionsFunc: self.GetCustomCommandsHistorySuggestionsFunc(), | ||||
| 		HandleConfirm: func(command string) error { | ||||
| 			if self.shouldSaveCommand(command) { | ||||
| 				self.c.GetAppState().CustomCommandsHistory = utils.Limit( | ||||
| 					lo.Uniq(append(self.c.GetAppState().CustomCommandsHistory, command)), | ||||
| 					1000, | ||||
| 				) | ||||
| 			} | ||||
|  | ||||
| 			err := self.c.SaveAppState() | ||||
| 			if err != nil { | ||||
| 				self.c.Log.Error(err) | ||||
| 			} | ||||
|  | ||||
| 			self.c.LogAction(self.c.Tr.Actions.CustomCommand) | ||||
| 			return self.c.RunSubprocessAndRefresh( | ||||
| 				self.c.OS().Cmd.NewShell(command), | ||||
| 			) | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // this mimics the shell functionality `ignorespace` | ||||
| // which doesn't save a command to history if it starts with a space | ||||
| func (self *GlobalController) shouldSaveCommand(command string) bool { | ||||
| 	return !strings.HasPrefix(command, " ") | ||||
| } | ||||
|  | ||||
| func (self *GlobalController) GetCustomCommandsHistorySuggestionsFunc() func(string) []*types.Suggestion { | ||||
| 	// reversing so that we display the latest command first | ||||
| 	history := slices.Reverse(self.c.GetAppState().CustomCommandsHistory) | ||||
|  | ||||
| 	return helpers.FuzzySearchFunc(history) | ||||
| 	return (&CustomCommandAction{c: self.c}).Call() | ||||
| } | ||||
|  | ||||
| func (self *GlobalController) Context() types.Context { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user