diff --git a/CHANGELOG.md b/CHANGELOG.md index a20bede..48dfb69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,11 @@ CHANGELOG ``` - Support `border-{up,down}` as the synonyms for `border-{top,bottom}` in `--preview-window` +- Added support for ANSI `strikethrough` + ```sh + printf "\e[9mdeleted" | fzf --ansi + fzf --color fg+:strikethrough + ``` 0.32.1 ------ diff --git a/go.mod b/go.mod index 3eb1516..41b40ad 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,7 @@ module github.com/junegunn/fzf require ( - github.com/gdamore/tcell v1.4.0 + github.com/gdamore/tcell/v2 v2.5.3 github.com/mattn/go-isatty v0.0.14 github.com/mattn/go-runewidth v0.0.13 github.com/mattn/go-shellwords v1.0.12 diff --git a/go.sum b/go.sum index f81baf2..8a875d5 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,11 @@ github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell v1.4.0 h1:vUnHwJRvcPQa3tzi+0QI4U9JINXYJlOz9yiaiPQ2wMU= -github.com/gdamore/tcell v1.4.0/go.mod h1:vxEiSDZdW3L+Uhjii9c3375IlDmR05bzxY404ZVSMo0= -github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/gdamore/tcell/v2 v2.5.3 h1:b9XQrT6QGbgI7JvZOJXFNczOQeIYbo8BfeSMzt2sAV0= +github.com/gdamore/tcell/v2 v2.5.3/go.mod h1:wSkrPaXoiIWZqW/g7Px4xc79di6FTcpB8tvaKJ6uGBo= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= @@ -19,11 +17,13 @@ github.com/saracen/walker v0.1.2/go.mod h1:0oKYMsKVhSJ+ful4p/XbjvXbMgLEkLITZaxoz golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12 h1:QyVthZKMsyaQwBTJE04jdNN0Pp5Fn9Qga0mrgxyERQM= golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/man/man1/fzf.1 b/man/man1/fzf.1 index bc066de..970ba08 100644 --- a/man/man1/fzf.1 +++ b/man/man1/fzf.1 @@ -21,7 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. .. -.TH fzf 1 "Aug 2022" "fzf 0.32.1" "fzf - a command-line fuzzy finder" +.TH fzf 1 "Aug 2022" "fzf 0.32.2" "fzf - a command-line fuzzy finder" .SH NAME fzf - a command-line fuzzy finder @@ -378,6 +378,7 @@ color mappings. \fBreverse\fR \fBdim\fR \fBitalic\fR + \fBstrikethrough\fR .B EXAMPLES: diff --git a/src/ansi.go b/src/ansi.go index ff12db0..24acc39 100644 --- a/src/ansi.go +++ b/src/ansi.go @@ -55,6 +55,9 @@ func (s *ansiState) ToString() string { if s.attr&tui.Reverse > 0 { ret += "7;" } + if s.attr&tui.StrikeThrough > 0 { + ret += "9;" + } ret += toAnsiString(s.fg, 30) + toAnsiString(s.bg, 40) return "\x1b[" + strings.TrimSuffix(ret, ";") + "m" @@ -376,6 +379,8 @@ func interpretCode(ansiCode string, prevState *ansiState) ansiState { state.attr = state.attr | tui.Blink case 7: state.attr = state.attr | tui.Reverse + case 9: + state.attr = state.attr | tui.StrikeThrough case 23: // tput rmso state.attr = state.attr &^ tui.Italic case 24: // tput rmul diff --git a/src/options.go b/src/options.go index 707efb2..46bda82 100644 --- a/src/options.go +++ b/src/options.go @@ -700,6 +700,8 @@ func parseTheme(defaultTheme *tui.ColorTheme, str string) *tui.ColorTheme { cattr.Attr |= tui.Blink case "reverse": cattr.Attr |= tui.Reverse + case "strikethrough": + cattr.Attr |= tui.StrikeThrough case "black": cattr.Color = tui.Color(0) case "red": diff --git a/src/tui/dummy.go b/src/tui/dummy.go index 686a100..297a887 100644 --- a/src/tui/dummy.go +++ b/src/tui/dummy.go @@ -14,16 +14,17 @@ func (a Attr) Merge(b Attr) Attr { const ( AttrUndefined = Attr(0) - AttrRegular = Attr(1 << 7) - AttrClear = Attr(1 << 8) + AttrRegular = Attr(1 << 8) + AttrClear = Attr(1 << 9) - Bold = Attr(1) - Dim = Attr(1 << 1) - Italic = Attr(1 << 2) - Underline = Attr(1 << 3) - Blink = Attr(1 << 4) - Blink2 = Attr(1 << 5) - Reverse = Attr(1 << 6) + Bold = Attr(1) + Dim = Attr(1 << 1) + Italic = Attr(1 << 2) + Underline = Attr(1 << 3) + Blink = Attr(1 << 4) + Blink2 = Attr(1 << 5) + Reverse = Attr(1 << 6) + StrikeThrough = Attr(1 << 7) ) func (r *FullscreenRenderer) Init() {} diff --git a/src/tui/light.go b/src/tui/light.go index b4117bc..0546caa 100644 --- a/src/tui/light.go +++ b/src/tui/light.go @@ -856,6 +856,9 @@ func attrCodes(attr Attr) []string { if (attr & Reverse) > 0 { codes = append(codes, "7") } + if (attr & StrikeThrough) > 0 { + codes = append(codes, "9") + } return codes } diff --git a/src/tui/tcell.go b/src/tui/tcell.go index 6f9b53a..a873378 100644 --- a/src/tui/tcell.go +++ b/src/tui/tcell.go @@ -8,8 +8,8 @@ import ( "runtime" - "github.com/gdamore/tcell" - "github.com/gdamore/tcell/encoding" + "github.com/gdamore/tcell/v2" + "github.com/gdamore/tcell/v2/encoding" "github.com/mattn/go-runewidth" "github.com/rivo/uniseg" @@ -19,12 +19,20 @@ func HasFullscreenRenderer() bool { return true } -func (p ColorPair) style() tcell.Style { - style := tcell.StyleDefault - return style.Foreground(tcell.Color(p.Fg())).Background(tcell.Color(p.Bg())) +func asTcellColor(color Color) tcell.Color { + value := uint64(tcell.ColorValid) + uint64(color) + if color.is24() { + value = value | uint64(tcell.ColorIsRGB) + } + return tcell.Color(value) } -type Attr tcell.Style +func (p ColorPair) style() tcell.Style { + style := tcell.StyleDefault + return style.Foreground(asTcellColor(p.Fg())).Background(asTcellColor(p.Bg())) +} + +type Attr int32 type TcellWindow struct { color bool @@ -72,12 +80,13 @@ func (w *TcellWindow) FinishFill() { } const ( - Bold Attr = Attr(tcell.AttrBold) - Dim = Attr(tcell.AttrDim) - Blink = Attr(tcell.AttrBlink) - Reverse = Attr(tcell.AttrReverse) - Underline = Attr(tcell.AttrUnderline) - Italic = Attr(tcell.AttrItalic) + Bold Attr = Attr(tcell.AttrBold) + Dim = Attr(tcell.AttrDim) + Blink = Attr(tcell.AttrBlink) + Reverse = Attr(tcell.AttrReverse) + Underline = Attr(tcell.AttrUnderline) + StrikeThrough = Attr(tcell.AttrStrikeThrough) + Italic = Attr(tcell.AttrItalic) ) const ( @@ -561,6 +570,7 @@ func (w *TcellWindow) printString(text string, pair ColorPair) { style = style. Reverse(a&Attr(tcell.AttrReverse) != 0). Underline(a&Attr(tcell.AttrUnderline) != 0). + StrikeThrough(a&Attr(tcell.AttrStrikeThrough) != 0). Italic(a&Attr(tcell.AttrItalic) != 0). Blink(a&Attr(tcell.AttrBlink) != 0). Dim(a&Attr(tcell.AttrDim) != 0) @@ -612,6 +622,7 @@ func (w *TcellWindow) fillString(text string, pair ColorPair) FillReturn { Dim(a&Attr(tcell.AttrDim) != 0). Reverse(a&Attr(tcell.AttrReverse) != 0). Underline(a&Attr(tcell.AttrUnderline) != 0). + StrikeThrough(a&Attr(tcell.AttrStrikeThrough) != 0). Italic(a&Attr(tcell.AttrItalic) != 0) gr := uniseg.NewGraphemes(text) diff --git a/src/tui/tcell_test.go b/src/tui/tcell_test.go index 96ea7ed..0d50bb7 100644 --- a/src/tui/tcell_test.go +++ b/src/tui/tcell_test.go @@ -5,7 +5,7 @@ package tui import ( "testing" - "github.com/gdamore/tcell" + "github.com/gdamore/tcell/v2" "github.com/junegunn/fzf/src/util" )