mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-07-30 03:23:08 +03:00
copy selected text to clipboard
This commit is contained in:
committed by
Jesse Duffield
parent
3621084096
commit
b6454755ca
@ -194,6 +194,22 @@ func (p *PatchParser) Render(firstLineIndex int, lastLineIndex int, incLineIndic
|
||||
return result
|
||||
}
|
||||
|
||||
// RenderLines returns the coloured string of diff part from firstLineIndex to
|
||||
// lastLineIndex
|
||||
func (p *PatchParser) RenderLines(firstLineIndex, lastLineIndex int) string {
|
||||
renderedLines := make([]string, lastLineIndex-firstLineIndex+1)
|
||||
for index := firstLineIndex; index <= lastLineIndex; index++ {
|
||||
renderedLines[index-firstLineIndex] = p.PatchLines[index].render(
|
||||
false, false,
|
||||
)
|
||||
}
|
||||
result := strings.Join(renderedLines, "\n")
|
||||
if strings.TrimSpace(utils.Decolorise(result)) == "" {
|
||||
return ""
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// GetNextStageableLineIndex takes a line index and returns the line index of the next stageable line
|
||||
// note this will actually include the current index if it is stageable
|
||||
func (p *PatchParser) GetNextStageableLineIndex(currentIndex int) int {
|
||||
|
@ -1303,6 +1303,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
|
||||
Modifier: gocui.ModNone,
|
||||
Handler: gui.handleSelectNextHunk,
|
||||
},
|
||||
{
|
||||
ViewName: "main",
|
||||
Contexts: []string{string(MAIN_PATCH_BUILDING_CONTEXT_KEY), string(MAIN_STAGING_CONTEXT_KEY)},
|
||||
Key: gui.getKey(config.Universal.CopyToClipboard),
|
||||
Modifier: gocui.ModNone,
|
||||
Handler: gui.copySelectedToClipboard,
|
||||
},
|
||||
{
|
||||
ViewName: "main",
|
||||
Contexts: []string{string(MAIN_STAGING_CONTEXT_KEY)},
|
||||
|
@ -180,6 +180,11 @@ func (s *State) RenderForLineIndices(includedLineIndices []int) string {
|
||||
return s.patchParser.Render(firstLineIdx, lastLineIdx, includedLineIndices)
|
||||
}
|
||||
|
||||
func (s *State) RenderSelected() string {
|
||||
firstLineIdx, lastLineIdx := s.SelectedRange()
|
||||
return s.patchParser.RenderLines(firstLineIdx, lastLineIdx)
|
||||
}
|
||||
|
||||
func (s *State) SelectBottom() {
|
||||
s.SetLineSelectMode()
|
||||
s.SelectLine(len(s.patchParser.PatchLines) - 1)
|
||||
|
@ -2,11 +2,13 @@ package gui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/go-errors/errors"
|
||||
"github.com/jesseduffield/gocui"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/patch"
|
||||
"github.com/jesseduffield/lazygit/pkg/gui/lbl"
|
||||
"github.com/jesseduffield/lazygit/pkg/utils"
|
||||
)
|
||||
|
||||
// Currently there are two 'pseudo-panels' that make use of this 'pseudo-panel'.
|
||||
@ -86,6 +88,22 @@ func (gui *Gui) handleSelectNextHunk() error {
|
||||
})
|
||||
}
|
||||
|
||||
func (gui *Gui) copySelectedToClipboard() error {
|
||||
return gui.withLBLActiveCheck(func(state *LblPanelState) error {
|
||||
|
||||
colorSelected := state.RenderSelected()
|
||||
selected := strings.TrimSpace(utils.Decolorise(colorSelected))
|
||||
|
||||
if err := gui.OSCommand.WithSpan(
|
||||
gui.Tr.Spans.CopySelectedTextToClipboard,
|
||||
).CopyToClipboard(selected); err != nil {
|
||||
return gui.surfaceError(err)
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (gui *Gui) refreshAndFocusLblPanel(state *LblPanelState) error {
|
||||
if err := gui.refreshMainViewForLineByLine(state); err != nil {
|
||||
return err
|
||||
|
@ -479,6 +479,7 @@ type Spans struct {
|
||||
GitFlowFinish string
|
||||
GitFlowStart string
|
||||
CopyToClipboard string
|
||||
CopySelectedTextToClipboard string
|
||||
RemovePatchFromCommit string
|
||||
MovePatchToSelectedCommit string
|
||||
MovePatchIntoIndex string
|
||||
@ -999,6 +1000,7 @@ func englishTranslationSet() TranslationSet {
|
||||
GitFlowFinish: "Git flow finish",
|
||||
GitFlowStart: "Git Flow start",
|
||||
CopyToClipboard: "Copy to clipboard",
|
||||
CopySelectedTextToClipboard: "Copy Selected Text to clipboard",
|
||||
RemovePatchFromCommit: "Remove patch from commit",
|
||||
MovePatchToSelectedCommit: "Move patch to selected commit",
|
||||
MovePatchIntoIndex: "Move patch into index",
|
||||
|
Reference in New Issue
Block a user