summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Vanherp <emil@vanherp.me>2022-08-20 23:23:03 +0200
committerJunegunn Choi <junegunn.c@gmail.com>2022-08-26 09:27:49 +0900
commit4bef330ce15d3ae80959415c24aba4700f5cbe35 (patch)
treed8147880cf4dc4387d3d6506c89d607e5f018703
parent8a5f7199649d56a92474676c9cf626204e3e8bcb (diff)
Add support for ANSI strike-through (#2932)
Close #2932 Co-authored-by: Emil Vanherp <emil@vanherp.me>
-rw-r--r--CHANGELOG.md5
-rw-r--r--go.mod2
-rw-r--r--go.sum10
-rw-r--r--man/man1/fzf.13
-rw-r--r--src/ansi.go5
-rw-r--r--src/options.go2
-rw-r--r--src/tui/dummy.go21
-rw-r--r--src/tui/light.go3
-rw-r--r--src/tui/tcell.go31
-rw-r--r--src/tui/tcell_test.go2
10 files changed, 56 insertions, 28 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a20bede7..48dfb69e 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 3eb15167..41b40ad0 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 f81baf26..8a875d5d 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 bc066de8..970ba08e 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 ff12db02..24acc396 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 707efb2d..46bda82c 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 686a1009..297a887e 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)
-
- 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)
+ 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)
+ StrikeThrough = Attr(1 << 7)
)
func (r *FullscreenRenderer) Init() {}
diff --git a/src/tui/light.go b/src/tui/light.go
index b4117bce..0546caa8 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 6f9b53a9..a873378d 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 asTcellColor(color Color) tcell.Color {
+ value := uint64(tcell.ColorValid) + uint64(color)
+ if color.is24() {
+ value = value | uint64(tcell.ColorIsRGB)
+ }
+ return tcell.Color(value)
+}
+
func (p ColorPair) style() tcell.Style {
style := tcell.StyleDefault
- return style.Foreground(tcell.Color(p.Fg())).Background(tcell.Color(p.Bg()))
+ return style.Foreground(asTcellColor(p.Fg())).Background(asTcellColor(p.Bg()))
}
-type Attr tcell.Style
+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 96ea7ed3..0d50bb76 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"
)