mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-05-12 04:45:47 +02:00
Use AutoRenderHyperLinks in confirmation view
This allows us to get rid of the underlineLinks function.
This commit is contained in:
parent
26e3a93fc3
commit
825f5c0a91
3 changed files with 2 additions and 86 deletions
|
@ -221,7 +221,7 @@ func (self *ConfirmationHelper) CreatePopupPanel(ctx goContext.Context, opts typ
|
||||||
confirmationView.RenderTextArea()
|
confirmationView.RenderTextArea()
|
||||||
} else {
|
} else {
|
||||||
self.c.ResetViewOrigin(confirmationView)
|
self.c.ResetViewOrigin(confirmationView)
|
||||||
self.c.SetViewContent(confirmationView, style.AttrBold.Sprint(underlineLinks(opts.Prompt)))
|
self.c.SetViewContent(confirmationView, style.AttrBold.Sprint(opts.Prompt))
|
||||||
}
|
}
|
||||||
|
|
||||||
self.setKeyBindings(cancel, opts)
|
self.setKeyBindings(cancel, opts)
|
||||||
|
@ -233,28 +233,6 @@ func (self *ConfirmationHelper) CreatePopupPanel(ctx goContext.Context, opts typ
|
||||||
self.c.Context().Push(self.c.Contexts().Confirmation)
|
self.c.Context().Push(self.c.Contexts().Confirmation)
|
||||||
}
|
}
|
||||||
|
|
||||||
func underlineLinks(text string) string {
|
|
||||||
result := ""
|
|
||||||
remaining := text
|
|
||||||
for {
|
|
||||||
linkStart := strings.Index(remaining, "https://")
|
|
||||||
if linkStart == -1 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
linkEnd := strings.IndexAny(remaining[linkStart:], " \n>")
|
|
||||||
if linkEnd == -1 {
|
|
||||||
linkEnd = len(remaining)
|
|
||||||
} else {
|
|
||||||
linkEnd += linkStart
|
|
||||||
}
|
|
||||||
underlinedLink := style.PrintSimpleHyperlink(remaining[linkStart:linkEnd])
|
|
||||||
result += remaining[:linkStart] + underlinedLink
|
|
||||||
remaining = remaining[linkEnd:]
|
|
||||||
}
|
|
||||||
return result + remaining
|
|
||||||
}
|
|
||||||
|
|
||||||
func (self *ConfirmationHelper) setKeyBindings(cancel goContext.CancelFunc, opts types.CreatePopupPanelOpts) {
|
func (self *ConfirmationHelper) setKeyBindings(cancel goContext.CancelFunc, opts types.CreatePopupPanelOpts) {
|
||||||
var onConfirm func() error
|
var onConfirm func() error
|
||||||
if opts.HandleConfirmPrompt != nil {
|
if opts.HandleConfirmPrompt != nil {
|
||||||
|
|
|
@ -1,63 +0,0 @@
|
||||||
package helpers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/gookit/color"
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"github.com/xo/terminfo"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Test_underlineLinks(t *testing.T) {
|
|
||||||
scenarios := []struct {
|
|
||||||
name string
|
|
||||||
text string
|
|
||||||
expectedResult string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "empty string",
|
|
||||||
text: "",
|
|
||||||
expectedResult: "",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "no links",
|
|
||||||
text: "abc",
|
|
||||||
expectedResult: "abc",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "entire string is a link",
|
|
||||||
text: "https://example.com",
|
|
||||||
expectedResult: "\x1b]8;;https://example.com\x1b\\https://example.com\x1b]8;;\x1b\\",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "link preceded and followed by text",
|
|
||||||
text: "bla https://example.com xyz",
|
|
||||||
expectedResult: "bla \x1b]8;;https://example.com\x1b\\https://example.com\x1b]8;;\x1b\\ xyz",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "more than one link",
|
|
||||||
text: "bla https://link1 blubb https://link2 xyz",
|
|
||||||
expectedResult: "bla \x1b]8;;https://link1\x1b\\https://link1\x1b]8;;\x1b\\ blubb \x1b]8;;https://link2\x1b\\https://link2\x1b]8;;\x1b\\ xyz",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "link in angle brackets",
|
|
||||||
text: "See <https://example.com> for details",
|
|
||||||
expectedResult: "See <\x1b]8;;https://example.com\x1b\\https://example.com\x1b]8;;\x1b\\> for details",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "link followed by newline",
|
|
||||||
text: "URL: https://example.com\nNext line",
|
|
||||||
expectedResult: "URL: \x1b]8;;https://example.com\x1b\\https://example.com\x1b]8;;\x1b\\\nNext line",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
oldColorLevel := color.ForceSetColorLevel(terminfo.ColorLevelMillions)
|
|
||||||
defer color.ForceSetColorLevel(oldColorLevel)
|
|
||||||
|
|
||||||
for _, s := range scenarios {
|
|
||||||
t.Run(s.name, func(t *testing.T) {
|
|
||||||
result := underlineLinks(s.text)
|
|
||||||
assert.Equal(t, s.expectedResult, result)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -158,6 +158,7 @@ func (gui *Gui) createAllViews() error {
|
||||||
|
|
||||||
gui.Views.Confirmation.Visible = false
|
gui.Views.Confirmation.Visible = false
|
||||||
gui.Views.Confirmation.Editor = gocui.EditorFunc(gui.promptEditor)
|
gui.Views.Confirmation.Editor = gocui.EditorFunc(gui.promptEditor)
|
||||||
|
gui.Views.Confirmation.AutoRenderHyperLinks = true
|
||||||
|
|
||||||
gui.Views.Suggestions.Visible = false
|
gui.Views.Suggestions.Visible = false
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue