mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	This commit is contained in:
		| @@ -106,6 +106,7 @@ git: | ||||
|   parseEmoji: false | ||||
|   diffContextSize: 3 # how many lines of context are shown around a change in diffs | ||||
| os: | ||||
|   copyToClipboardCmd: '' # See 'Custom Command for Copying to Clipboard' section | ||||
|   editPreset: '' # see 'Configuring File Editing' section | ||||
|   edit: '' | ||||
|   editAtLine: '' | ||||
| @@ -278,6 +279,20 @@ os: | ||||
|   open: 'open {{filename}}' | ||||
| ``` | ||||
|  | ||||
| ### Custom Command for Copying to Clipboard | ||||
| ```yaml | ||||
| os: | ||||
|   copyToClipboardCmd: '' | ||||
| ``` | ||||
| Specify an external command to invoke when copying to clipboard is requested. `{{text}` will be replaced by text to be copied. Default is to copy to system clipboard. | ||||
|  | ||||
| If you are working on a terminal that supports OSC52, the following command will let you take advantage of it: | ||||
| ``` | ||||
| os: | ||||
|   copyToClipboardCmd: printf "\033]52;c;$(printf {{text}} | base64)\a" > /dev/tty | ||||
| ``` | ||||
|  | ||||
|  | ||||
| ### Configuring File Editing | ||||
|  | ||||
| There are two commands for opening files, `o` for "open" and `e` for "edit". `o` | ||||
|   | ||||
| @@ -267,6 +267,13 @@ func (c *OSCommand) CopyToClipboard(str string) error { | ||||
| 	escaped := strings.Replace(str, "\n", "\\n", -1) | ||||
| 	truncated := utils.TruncateWithEllipsis(escaped, 40) | ||||
| 	c.LogCommand(fmt.Sprintf("Copying '%s' to clipboard", truncated), false) | ||||
| 	if c.UserConfig.OS.CopyToClipboardCmd != "" { | ||||
| 		cmdStr := utils.ResolvePlaceholderString(c.UserConfig.OS.CopyToClipboardCmd, map[string]string{ | ||||
| 			"text": c.Cmd.Quote(str), | ||||
| 		}) | ||||
| 		return c.Cmd.NewShell(cmdStr).Run() | ||||
| 	} | ||||
|  | ||||
| 	return clipboard.WriteAll(str) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -346,6 +346,9 @@ type OSConfig struct { | ||||
| 	// OpenLinkCommand is the command for opening a link | ||||
| 	// Deprecated: use OpenLink instead. | ||||
| 	OpenLinkCommand string `yaml:"openLinkCommand,omitempty"` | ||||
|  | ||||
| 	// CopyToClipboardCmd is the command for copying to clipboard | ||||
| 	CopyToClipboardCmd string `yaml:"copyToClipboardCmd,omitempty"` | ||||
| } | ||||
|  | ||||
| type CustomCommandAfterHook struct { | ||||
|   | ||||
							
								
								
									
										44
									
								
								pkg/integration/tests/misc/copy_to_clipboard.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								pkg/integration/tests/misc/copy_to_clipboard.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| package misc | ||||
|  | ||||
| import ( | ||||
| 	"github.com/jesseduffield/lazygit/pkg/config" | ||||
| 	. "github.com/jesseduffield/lazygit/pkg/integration/components" | ||||
| ) | ||||
|  | ||||
| // We're emulating the clipboard by writing to a file called clipboard | ||||
|  | ||||
| var CopyToClipboard = NewIntegrationTest(NewIntegrationTestArgs{ | ||||
| 	Description:  "Copy a branch name to the clipboard using custom clipboard command template", | ||||
| 	ExtraCmdArgs: []string{}, | ||||
| 	Skip:         false, | ||||
| 	SetupConfig: func(config *config.AppConfig) { | ||||
| 		config.UserConfig.OS.CopyToClipboardCmd = "echo {{text}} > clipboard" | ||||
| 	}, | ||||
|  | ||||
| 	SetupRepo: func(shell *Shell) { | ||||
| 		shell.NewBranch("branch-a") | ||||
| 	}, | ||||
|  | ||||
| 	Run: func(t *TestDriver, keys config.KeybindingConfig) { | ||||
| 		t.Views().Branches(). | ||||
| 			Focus(). | ||||
| 			Lines( | ||||
| 				Contains("branch-a").IsSelected(), | ||||
| 			). | ||||
| 			Press(keys.Universal.CopyToClipboard) | ||||
|  | ||||
| 		t.Views().Files(). | ||||
| 			Focus() | ||||
|  | ||||
| 		t.GlobalPress(keys.Files.RefreshFiles) | ||||
|  | ||||
| 		// Expect to see the clipboard file with contents | ||||
| 		t.Views().Files(). | ||||
| 			IsFocused(). | ||||
| 			Lines( | ||||
| 				Contains("clipboard").IsSelected(), | ||||
| 			) | ||||
|  | ||||
| 		t.Views().Main().Content(Contains("branch-a")) | ||||
| 	}, | ||||
| }) | ||||
| @@ -1,49 +0,0 @@ | ||||
| package patch_building | ||||
|  | ||||
| import ( | ||||
| 	"github.com/jesseduffield/lazygit/pkg/config" | ||||
| 	. "github.com/jesseduffield/lazygit/pkg/integration/components" | ||||
| ) | ||||
|  | ||||
| var CopyPatchToClipboard = NewIntegrationTest(NewIntegrationTestArgs{ | ||||
| 	Description:  "Create a patch from the commits and copy the patch to clipbaord.", | ||||
| 	ExtraCmdArgs: []string{}, | ||||
| 	Skip:         true, // skipping because CI doesn't have clipboard functionality | ||||
| 	SetupConfig:  func(config *config.AppConfig) {}, | ||||
| 	SetupRepo: func(shell *Shell) { | ||||
| 		shell.NewBranch("branch-a") | ||||
| 		shell.CreateFileAndAdd("file1", "first line\n") | ||||
| 		shell.Commit("first commit") | ||||
|  | ||||
| 		shell.NewBranch("branch-b") | ||||
| 		shell.UpdateFileAndAdd("file1", "first line\nsecond line\n") | ||||
| 		shell.Commit("update") | ||||
|  | ||||
| 		shell.Checkout("branch-a") | ||||
| 	}, | ||||
| 	Run: func(t *TestDriver, keys config.KeybindingConfig) { | ||||
| 		t.Views().Branches(). | ||||
| 			Focus(). | ||||
| 			Lines( | ||||
| 				Contains("branch-a").IsSelected(), | ||||
| 				Contains("branch-b"), | ||||
| 			). | ||||
| 			Press(keys.Universal.NextItem). | ||||
| 			PressEnter(). | ||||
| 			PressEnter() | ||||
| 		t.Views(). | ||||
| 			CommitFiles(). | ||||
| 			Lines( | ||||
| 				Contains("M file1").IsSelected(), | ||||
| 			). | ||||
| 			PressPrimaryAction() | ||||
|  | ||||
| 		t.Views().Information().Content(Contains("Building patch")) | ||||
|  | ||||
| 		t.Common().SelectPatchOption(Contains("copy patch to clipboard")) | ||||
|  | ||||
| 		t.ExpectToast(Contains("Patch copied to clipboard")) | ||||
|  | ||||
| 		t.ExpectClipboard(Contains("diff --git a/file1 b/file1")) | ||||
| 	}, | ||||
| }) | ||||
| @@ -138,12 +138,12 @@ var tests = []*components.IntegrationTest{ | ||||
| 	interactive_rebase.SwapInRebaseWithConflictAndEdit, | ||||
| 	interactive_rebase.SwapWithConflict, | ||||
| 	misc.ConfirmOnQuit, | ||||
| 	misc.CopyToClipboard, | ||||
| 	misc.InitialOpen, | ||||
| 	misc.RecentReposOnLaunch, | ||||
| 	patch_building.Apply, | ||||
| 	patch_building.ApplyInReverse, | ||||
| 	patch_building.ApplyInReverseWithConflict, | ||||
| 	patch_building.CopyPatchToClipboard, | ||||
| 	patch_building.MoveToEarlierCommit, | ||||
| 	patch_building.MoveToEarlierCommitNoKeepEmpty, | ||||
| 	patch_building.MoveToIndex, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user