Repository: rsteube/carapace
Pull request #808 (2023-07-13 12:30:06)

action: prefix - fix value handling
- e.g. `carapace.ActionFiles().Prefix("file://")`



Patch:
diff --git a/action.go b/action.go
index 67086ea..961109f 100644
--- a/action.go
+++ b/action.go
@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"os"
 	"runtime"
+	"strings"
 	"time"
 
 	"github.com/rsteube/carapace/internal/cache"
@@ -128,6 +129,14 @@ func (a Action) NoSpace(suffixes ...rune) Action {
 //	carapace.ActionValues("melon", "drop", "fall").Prefix("water")
 func (a Action) Prefix(prefix string) Action {
 	return ActionCallback(func(c Context) Action {
+		switch {
+		case strings.HasPrefix(c.Value, prefix):
+			c.Value = strings.TrimPrefix(c.Value, prefix)
+		case strings.HasPrefix(prefix, c.Value):
+			c.Value = ""
+		default:
+			return ActionValues()
+		}
 		return a.Invoke(c).Prefix(prefix).ToA()
 	})
 }
diff --git a/docs/src/carapace/action/prefix.cast b/docs/src/carapace/action/prefix.cast
index 3501ac1..bff60dd 100644
--- a/docs/src/carapace/action/prefix.cast
+++ b/docs/src/carapace/action/prefix.cast
@@ -1,47 +1,55 @@
-{"version": 2, "width": 108, "height": 24, "timestamp": 1688566269, "env": {"SHELL": "elvish", "TERM": "tmux-256color"}}
-[0.056957, "o", "\u001b[?7h\u001b[7m⏎\u001b[m                                                                                                           \r \r\u001b[?7l\u001b[?2004h\u001b[?25l\r???>                                                                                                   ???> \r\u001b[5C\u001b[?25h"]
-[0.057709, "o", "\u001b[?25l\r\u001b[5C\u001b[K\r\u001b[5C\u001b[?25h"]
-[0.072111, "o", "\u001b[?25l\r\r\u001b[5C\u001b[?25h"]
-[0.072299, "o", "\u001b[?25l\r\u001b[K\r\n\u001b[0;1;36mcarapace\u001b[0;m on \u001b[0;1;35m doc-update\u001b[0;m \u001b[0;1;31m[$!]\u001b[0;m via \u001b[0;1;36m🐹 v1.20.4 \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \r\u001b[6C\u001b[?25h"]
-[0.496779, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[0;31me\u001b[0;m\r\u001b[7C\u001b[?25h"]
-[0.496896, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
-[0.497261, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
-[0.509038, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
-[0.50919, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
-[0.654767, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[7C\u001b[0;31mx\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[8C\u001b[?25h"]
-[0.740991, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\u001b[0;32mexa\u001b[0;m\r\u001b[9C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[9C\u001b[?25h"]
-[0.904113, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\u001b[0;31mexam\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[10C\u001b[?25h"]
-[0.957707, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[10C\u001b[0;31mp\u001b[0;m\r\u001b[11C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[11C\u001b[?25h"]
-[1.074537, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[11C\u001b[0;31ml\u001b[0;m\r\u001b[12C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[12C\u001b[?25h"]
-[1.170095, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\u001b[0;32mexample\u001b[0;m\r\u001b[13C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[13C\u001b[?25h"]
-[1.242821, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[13C \r\u001b[14C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[14C\u001b[?25h"]
-[1.358988, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[14Cm\r\u001b[15C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[15C\u001b[?25h"]
-[1.437099, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[15Co\r\u001b[16C\u001b[?25h"]
-[1.437567, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[16C\u001b[?25h"]
-[1.439896, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[16C\u001b[?25h"]
-[1.440129, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[16C\u001b[?25h"]
-[1.555507, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[16Cdifier \r\u001b[23C\u001b[?25h"]
-[2.104454, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[23C-\r\u001b[24C\u001b[?25h"]
-[2.245374, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[24C-\r\u001b[25C\u001b[?25h"]
-[2.24588, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[25C\u001b[?25h"]
-[2.774179, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[25Cp\r\u001b[26C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[26C\u001b[?25h"]
-[2.88486, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[26Cr\r\u001b[27C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[27C\u001b[?25h"]
-[3.130998, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[27Cefix \r\u001b[32C\u001b[?25h"]
-[3.667567, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[32Cwater\r\u001b[37C\u001b[?25h"]
-[4.434503, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[32C\u001b[K\u001b[0;4mwaterdrop \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7mdrop\u001b[0;m  fall  melon\u001b[1A\r\u001b[22C\u001b[?25h"]
-[6.272316, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[37C\u001b[K\u001b[0;4mfall \r\n\r\n\u001b[0;m\u001b[Kdrop  \u001b[0;7mfall\u001b[0;m  melon\u001b[1A\r\u001b[22C\u001b[?25h"]
-[7.77969, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[37C\u001b[K\u001b[0;4mmelon \r\n\r\n\u001b[6C\u001b[0;m\u001b[Kfall  \u001b[0;7mmelon\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"]
-[9.892044, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[32C\u001b[Kwatermelon \r\n\u001b[J\u001b[A\r\u001b[43C\u001b[?25h"]
-[10.498365, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[6C\u001b[?25h"]
-[10.499661, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[6C\u001b[?25h"]
-[10.517766, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[6C\u001b[?25h"]
-[10.51791, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[6C\u001b[?25h"]
-[11.063615, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[0;31me\u001b[0;m\r\u001b[7C\u001b[?25h"]
-[11.063696, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
-[11.227834, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[7C\u001b[0;31mx\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[8C\u001b[?25h"]
-[11.404788, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[8C\u001b[0;31mi\u001b[0;m\r\u001b[9C\u001b[?25h"]
-[11.404864, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[9C\u001b[?25h"]
-[11.490781, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\u001b[0;32mexit\u001b[0;m\r\u001b[10C\u001b[?25h"]
-[11.491038, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[10C\u001b[?25h"]
-[11.606204, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\r\u001b[?25h"]
-[11.606283, "o", "\u001b[?7h\u001b[?2004l\r"]
+{"version": 2, "width": 108, "height": 24, "timestamp": 1689251913, "env": {"SHELL": "elvish", "TERM": "tmux-256color"}}
+[0.067008, "o", "\u001b[?7h\u001b[7m⏎\u001b[m                                                                                                           \r \r\u001b[?7l\u001b[?2004h\u001b[?25l\r???>                                                                                                   ???> \r\u001b[5C\u001b[?25h"]
+[0.06805, "o", "\u001b[?25l\r\u001b[5C\u001b[K\r\u001b[5C\u001b[?25h"]
+[0.077461, "o", "\u001b[?25l\r\r\u001b[5C\u001b[?25h"]
+[0.07766, "o", "\u001b[?25l\r\u001b[K\r\n\u001b[0;1;36mcarapace/example\u001b[0;m on \u001b[0;1;35m action-prefix\u001b[0;m \u001b[0;1;31m[$?]\u001b[0;m via \u001b[0;1;36m🐹 v1.20.5 \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \r\u001b[6C\u001b[?25h"]
+[0.595493, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[0;31me\u001b[0;m\r\u001b[7C\u001b[?25h"]
+[0.596478, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
+[0.608163, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
+[0.608304, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
+[0.771297, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[7C\u001b[0;31mx\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[8C\u001b[?25h"]
+[0.897155, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\u001b[0;32mexa\u001b[0;m\r\u001b[9C\u001b[?25h"]
+[0.897453, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[9C\u001b[?25h"]
+[1.008183, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\u001b[0;31mexam\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[10C\u001b[?25h"]
+[1.057745, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[10C\u001b[0;31mp\u001b[0;m\r\u001b[11C\u001b[?25h"]
+[1.058931, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[11C\u001b[?25h"]
+[1.059241, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[11C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[11C\u001b[?25h"]
+[1.059622, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[11C\u001b[?25h"]
+[1.060461, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[11C\u001b[?25h"]
+[1.060529, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[11C\u001b[?25h"]
+[1.237211, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[11C\u001b[0;31ml\u001b[0;m\r\u001b[12C\u001b[?25h"]
+[1.424847, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\u001b[0;32mexample\u001b[0;m\r\u001b[13C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[13C\u001b[?25h"]
+[1.595612, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[13C \r\u001b[14C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[14C\u001b[?25h"]
+[1.742788, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[14Cm\r\u001b[15C\u001b[?25h"]
+[1.742864, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[15C\u001b[?25h"]
+[1.824182, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[15Co\r\u001b[16C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[16C\u001b[?25h"]
+[1.962866, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[16Cdifier \r\u001b[23C\u001b[?25h"]
+[2.263993, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[23C-\r\u001b[24C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[24C\u001b[?25h"]
+[2.396336, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[24C-\r\u001b[25C\u001b[?25h"]
+[2.396514, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[25C\u001b[?25h"]
+[2.626554, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[25Cp\r\u001b[26C\u001b[?25h"]
+[2.715719, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[26Cr\r\u001b[27C\u001b[?25h"]
+[2.71598, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[27C\u001b[?25h"]
+[2.924548, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[27Cefix \r\u001b[32C\u001b[?25h"]
+[3.332851, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[32Cfile://\r\u001b[39C\u001b[?25h"]
+[3.850567, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[32C\u001b[K\u001b[0;4mfile://README.md \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7;38;2;255;184;108mREADME.md\u001b[0;m  \u001b[0;38;2;189;147;249m_test/\u001b[0;m  \u001b[0;38;2;189;147;249mcmd/\u001b[0;m  \u001b[0;38;2;255;184;108mmain.go\u001b[0;m  \u001b[0;38;2;255;184;108mmain_test.go\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"]
+[4.581885, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[39C\u001b[K\u001b[0;4m_test/\r\n\r\n\u001b[0;m\u001b[K\u001b[0;38;2;255;184;108mREADME.md\u001b[0;m  \u001b[0;7;38;2;189;147;249m_test/\u001b[0;m  \u001b[0;38;2;189;147;249mcmd/\u001b[0;m  \u001b[0;38;2;255;184;108mmain.go\u001b[0;m  \u001b[0;38;2;255;184;108mmain_test.go\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"]
+[4.75631, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[39C\u001b[K\u001b[0;4mcmd/\r\n\r\n\u001b[11C\u001b[0;m\u001b[K\u001b[0;38;2;189;147;249m_test/\u001b[0;m  \u001b[0;7;38;2;189;147;249mcmd/\u001b[0;m  \u001b[0;38;2;255;184;108mmain.go\u001b[0;m  \u001b[0;38;2;255;184;108mmain_test.go\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"]
+[4.953955, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[32C\u001b[Kfile://cmd/\r\n\u001b[J\u001b[A\r\u001b[43C\u001b[?25h"]
+[5.105939, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[32C\u001b[K\u001b[0;4mfile://cmd/_test/\r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7;38;2;189;147;249m_test/        \u001b[0;m  \u001b[0;38;2;255;184;108mflag.go        \u001b[0;m  \u001b[0;38;2;255;184;108minterspersed_test.go\u001b[0;m  \u001b[0;38;2;255;184;108mmultiparts_test.go\r\n\u001b[0;38;2;189;147;249m_test_files/  \u001b[0;m  \u001b[0;38;2;255;184;108mhelp_test.go   \u001b[0;m  \u001b[0;38;2;255;184;108mmodifier.go         \u001b[0;m  \u001b[0;38;2;255;184;108mroot.go           \r\naction.go     \u001b[0;m  \u001b[0;38;2;255;184;108minjection.go   \u001b[0;m  \u001b[0;38;2;255;184;108mmodifier_test.go    \u001b[0;m  \u001b[0;38;2;255;184;108mroot_test.go      \r\naction_test.go\u001b[0;m  \u001b[0;38;2;255;184;108minterspersed.go\u001b[0;m  \u001b[0;38;2;255;184;108mmultiparts.go       \u001b[0;m  \u001b[0;38;2;255;184;108mspecial.go        \u001b[0;m\u001b[4A\r\u001b[22C\u001b[?25h"]
+[5.106801, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[4A\r\u001b[22C\u001b[?25h"]
+[5.107167, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[4A\r\u001b[22C\u001b[?25h"]
+[5.745288, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[48C\u001b[K\u001b[0;4m_files/\r\n\r\n\u001b[0;m\u001b[K\u001b[0;38;2;189;147;249m_test/        \u001b[0;m  \u001b[0;38;2;255;184;108mflag.go        \u001b[0;m  \u001b[0;38;2;255;184;108minterspersed_test.go\u001b[0;m  \u001b[0;38;2;255;184;108mmultiparts_test.go\r\n\u001b[0;m\u001b[K\u001b[0;7;38;2;189;147;249m_test_files/  \u001b[0;m  \u001b[0;38;2;255;184;108mhelp_test.go   \u001b[0;m  \u001b[0;38;2;255;184;108mmodifier.go         \u001b[0;m  \u001b[0;38;2;255;184;108mroot.go           \r\n\r\n\u001b[0;m\u001b[4A\r\u001b[22C\u001b[?25h"]
+[6.225643, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[32C\u001b[Kfile://cmd/_test_files/\r\n\u001b[J\u001b[A\r\u001b[55C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[55C\u001b[?25h"]
+[6.67073, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[32C\u001b[K\u001b[0;4mfile://cmd/_test_files/files_linux.go \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7;38;2;255;184;108mfiles_linux.go\u001b[0;m  \u001b[0;38;2;255;184;108mgo.mod\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"]
+[7.578326, "o", "\u001b[?25l\u001b[3A\r\r\n\r\n\u001b[32C\u001b[Kfile://cmd/_test_files/files_linux.go \r\n\u001b[J\u001b[A\r\u001b[70C\u001b[?25h"]
+[7.578411, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[70C\u001b[?25h"]
+[9.138121, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[6C\u001b[?25h"]
+[9.138685, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[6C\u001b[?25h"]
+[9.157986, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[6C\u001b[?25h"]
+[9.674165, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[0;31me\u001b[0;m\r\u001b[7C\u001b[?25h"]
+[9.674261, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[7C\u001b[?25h"]
+[9.882009, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[7C\u001b[0;31mx\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[8C\u001b[?25h"]
+[10.049316, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[8C\u001b[0;31mi\u001b[0;m\r\u001b[9C\u001b[?25h"]
+[10.169171, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[6C\u001b[K\u001b[0;32mexit\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\u001b[10C\u001b[?25h"]
+[10.32004, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\r\u001b[?25h\u001b[?7h\u001b[?2004l\r"]
diff --git a/docs/src/carapace/action/prefix.md b/docs/src/carapace/action/prefix.md
index 9e847a5..1468483 100644
--- a/docs/src/carapace/action/prefix.md
+++ b/docs/src/carapace/action/prefix.md
@@ -3,11 +3,7 @@
 [`Prefix`] adds a prefix to the inserted values.
 
 ```go
-carapace.ActionValues(
-	"melon",
-	"drop",
-	"fall",
-).Prefix("water")
+carapace.ActionFiles().Prefix("file://")
 ```
 
 ![](./prefix.cast)
diff --git a/example/cmd/modifier.go b/example/cmd/modifier.go
index 8a288cb..e9b775c 100644
--- a/example/cmd/modifier.go
+++ b/example/cmd/modifier.go
@@ -125,11 +125,7 @@ func init() {
 			"dir/subdir1/fileB.txt",
 			"dir/subdir2/fileC.txt",
 		).MultiParts("/"),
-		"prefix": carapace.ActionValues(
-			"melon",
-			"drop",
-			"fall",
-		).Prefix("water"),
+		"prefix": carapace.ActionFiles().Prefix("file://"),
 		"retain": carapace.ActionValuesDescribed(
 			"1", "one",
 			"2", "two",


Test patch:
diff --git a/example/cmd/modifier_test.go b/example/cmd/modifier_test.go
index 7075dd4..86369ee 100644
--- a/example/cmd/modifier_test.go
+++ b/example/cmd/modifier_test.go
@@ -122,3 +122,33 @@ func TestMultiParts(t *testing.T) {
 				Usage("MultiParts()"))
 	})
 }
+
+func TestPrefix(t *testing.T) {
+	sandbox.Package(t, "github.com/rsteube/carapace/example")(func(s *sandbox.Sandbox) {
+		s.Files("subdir/file1.txt", "")
+
+		s.Run("modifier", "--prefix", "").
+			Expect(carapace.ActionValues("subdir/").
+				StyleF(style.ForPath).
+				Prefix("file://").
+				NoSpace('/').
+				Usage("Prefix()").
+				Tag("files"))
+
+		s.Run("modifier", "--prefix", "file").
+			Expect(carapace.ActionValues("subdir/").
+				StyleF(style.ForPath).
+				Prefix("file://").
+				NoSpace('/').
+				Usage("Prefix()").
+				Tag("files"))
+
+		s.Run("modifier", "--prefix", "file://subdir/f").
+			Expect(carapace.ActionValues("file1.txt").
+				StyleF(style.ForPath).
+				Prefix("file://subdir/").
+				NoSpace('/').
+				Usage("Prefix()").
+				Tag("files"))
+	})
+}