summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2022-03-29 21:35:36 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2022-03-29 21:35:36 +0900
commitef67a45702c01ff93e0ea99a51594c8160f66cc1 (patch)
treef7339a0133e7328dd8fbafdf56d8fc5e0dadfabd /src/util
parentb88eb72ac29b92c82a0d7c7f8d7b65380720b02c (diff)
Add --ellipsis=.. option
Close #2432 Also see - #1769 - https://github.com/junegunn/fzf/pull/1844#issuecomment-586663660
Diffstat (limited to 'src/util')
-rw-r--r--src/util/util.go17
-rw-r--r--src/util/util_test.go10
2 files changed, 27 insertions, 0 deletions
diff --git a/src/util/util.go b/src/util/util.go
index c3995bfd..a1c37f7a 100644
--- a/src/util/util.go
+++ b/src/util/util.go
@@ -34,6 +34,23 @@ func RunesWidth(runes []rune, prefixWidth int, tabstop int, limit int) (int, int
return width, -1
}
+// Truncate returns the truncated runes and its width
+func Truncate(input string, limit int) ([]rune, int) {
+ runes := []rune{}
+ width := 0
+ gr := uniseg.NewGraphemes(input)
+ for gr.Next() {
+ rs := gr.Runes()
+ w := runewidth.StringWidth(string(rs))
+ if width+w > limit {
+ return runes, width
+ }
+ width += w
+ runes = append(runes, rs...)
+ }
+ return runes, width
+}
+
// Max returns the largest integer
func Max(first int, second int) int {
if first >= second {
diff --git a/src/util/util_test.go b/src/util/util_test.go
index 45a5a2d0..20bdb92a 100644
--- a/src/util/util_test.go
+++ b/src/util/util_test.go
@@ -54,3 +54,13 @@ func TestRunesWidth(t *testing.T) {
}
}
}
+
+func TestTruncate(t *testing.T) {
+ truncated, width := Truncate("가나다라마", 7)
+ if string(truncated) != "가나다" {
+ t.Errorf("Expected: 가나다, actual: %s", string(truncated))
+ }
+ if width != 6 {
+ t.Errorf("Expected: 6, actual: %d", width)
+ }
+}