Skip to content

Commit 36cad0a

Browse files
authored
Merge pull request #3146 from carapace-sh/bsd
added bsd group
2 parents 45090dd + e646457 commit 36cad0a

File tree

8 files changed

+124
-18
lines changed

8 files changed

+124
-18
lines changed

.gitignore

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,20 @@ cmd/carapace/carapace.exe
44
cmd/carapace/cmd/completers/description.go
55

66
cmd/carapace/cmd/completers/completers_all.go
7+
cmd/carapace/cmd/completers/completers_termux.go
78
cmd/carapace/cmd/completers/completers_darwin.go
9+
cmd/carapace/cmd/completers/completers_freebsd.go
810
cmd/carapace/cmd/completers/completers_linux.go
11+
cmd/carapace/cmd/completers/completers_netbsd.go
12+
cmd/carapace/cmd/completers/completers_openbsd.go
913
cmd/carapace/cmd/completers/completers_release_all.go
14+
cmd/carapace/cmd/completers/completers_release_termux.go
1015
cmd/carapace/cmd/completers/completers_release_darwin.go
16+
cmd/carapace/cmd/completers/completers_release_freebsd.go
1117
cmd/carapace/cmd/completers/completers_release_linux.go
12-
cmd/carapace/cmd/completers/completers_release_termux.go
18+
cmd/carapace/cmd/completers/completers_release_netbsd.go
19+
cmd/carapace/cmd/completers/completers_release_openbsd.go
1320
cmd/carapace/cmd/completers/completers_release_windows.go
14-
cmd/carapace/cmd/completers/completers_termux.go
1521
cmd/carapace/cmd/completers/completers_windows.go
1622

1723
cmd/carapace/cmd/completers/name.go

cmd/carapace-generate/cmd/completers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var completersCmd = &cobra.Command{
2121
return err
2222
}
2323

24+
// TODO completers should be sorted for target GOOS
2425
var s string
2526
switch {
2627
case cmd.Flag("code").Changed:

cmd/carapace-generate/pkg/completer/completers.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,15 @@ func ReadCompleters(dir, goos string) (completer.CompleterMap, error) {
1818
// TODO shell specific completers
1919
// TODO distro specific completers (arch,ubuntu,...)
2020
groups := map[string][]string{
21-
"android": {"common", "unix", "linux", "android"},
22-
"linux": {"common", "unix", "linux"},
23-
"darwin": {"common", "unix", "darwin"},
24-
"windows": {"common", "windows"},
25-
"force_all": {"common", "unix", "linux", "darwin", "android", "windows"},
21+
"android": {"common", "unix", "linux", "android"},
22+
"darwin": {"common", "unix", "bsd", "darwin"},
23+
"freebsd": {"common", "unix", "bsd", "freebsd"},
24+
"linux": {"common", "unix", "linux"},
25+
"netbsd": {"common", "unix", "bsd", "netbsd"},
26+
"openbsd": {"common", "unix", "bsd", "openbsd"},
27+
"windows": {"common", "windows"},
28+
29+
"force_all": {"common", "unix", "linux", "bsd", "darwin", "android", "windows", "freebsd", "netbsd", "openbsd"},
2630
}
2731

2832
completers := make(completer.CompleterMap)

cmd/carapace/main.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,16 @@ var version = "develop"
1414
//go:generate sh -c "go run ../carapace-generate completers --code --tag '!release && !force_all && android' ../../completers android --output cmd/completers/completers_termux.go"
1515
//go:generate sh -c "go run ../carapace-generate completers --code --tag '!release && !force_all && !android' ../../completers linux --output cmd/completers/completers_linux.go"
1616
//go:generate sh -c "go run ../carapace-generate completers --code --tag '!release && !force_all' ../../completers darwin --output cmd/completers/completers_darwin.go"
17+
//go:generate sh -c "go run ../carapace-generate completers --code --tag '!release && !force_all' ../../completers freebsd --output cmd/completers/completers_freebsd.go"
18+
//go:generate sh -c "go run ../carapace-generate completers --code --tag '!release && !force_all' ../../completers netbsd --output cmd/completers/completers_netbsd.go"
19+
//go:generate sh -c "go run ../carapace-generate completers --code --tag '!release && !force_all' ../../completers openbsd --output cmd/completers/completers_openbsd.go"
1720
//go:generate sh -c "go run ../carapace-generate completers --code --tag '!release && !force_all' ../../completers windows --output cmd/completers/completers_windows.go"
1821
//go:generate sh -c "go run ../carapace-generate completers --code --tag '!release && force_all' ../../completers force_all --output cmd/completers/completers_all.go"
1922
//go:generate sh -c "go run ../carapace-generate completers --code --tag 'release && !force_all && android' ../../completers_release android --output cmd/completers/completers_release_termux.go"
23+
//go:generate sh -c "go run ../carapace-generate completers --code --tag 'release && !force_all && !android' ../../completers_release freebsd --output cmd/completers/completers_release_freebsd.go"
2024
//go:generate sh -c "go run ../carapace-generate completers --code --tag 'release && !force_all && !android' ../../completers_release linux --output cmd/completers/completers_release_linux.go"
25+
//go:generate sh -c "go run ../carapace-generate completers --code --tag 'release && !force_all && !android' ../../completers_release netbsd --output cmd/completers/completers_release_netbsd.go"
26+
//go:generate sh -c "go run ../carapace-generate completers --code --tag 'release && !force_all && !android' ../../completers_release openbsd --output cmd/completers/completers_release_openbsd.go"
2127
//go:generate sh -c "go run ../carapace-generate completers --code --tag 'release && !force_all' ../../completers_release darwin --output cmd/completers/completers_release_darwin.go"
2228
//go:generate sh -c "go run ../carapace-generate completers --code --tag 'release && !force_all' ../../completers_release windows --output cmd/completers/completers_release_windows.go"
2329
//go:generate sh -c "go run ../carapace-generate completers --code --tag 'release && force_all' ../../completers_release force_all --output cmd/completers/completers_release_all.go"
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package cmd
2+
3+
import (
4+
"github.com/carapace-sh/carapace"
5+
"github.com/spf13/cobra"
6+
)
7+
8+
var rootCmd = &cobra.Command{
9+
Use: "sed",
10+
Short: "stream editor",
11+
Long: "https://manpage.me/?sed",
12+
Run: func(cmd *cobra.Command, args []string) {},
13+
}
14+
15+
func Execute() error {
16+
return rootCmd.Execute()
17+
}
18+
func init() {
19+
carapace.Gen(rootCmd).Standalone()
20+
21+
rootCmd.Flags().BoolS("E", "E", false, "Interpret regular expressions as extended regular expressions")
22+
rootCmd.Flags().BoolS("H", "H", false, "Enable enhanced features in the regular expression syntax")
23+
rootCmd.Flags().StringS("I", "I", "", "Edit files in-place, saving backups with the specified extension")
24+
rootCmd.Flags().BoolS("a", "a", false, "Create or truncate files before any processing begins")
25+
rootCmd.Flags().StringS("e", "e", "", "Append the editing commands specified by the command argument to the list of commands")
26+
rootCmd.Flags().StringS("f", "f", "", "Append the editing commands found in the file command_file to the list of commands")
27+
rootCmd.Flags().StringS("i", "i", "", "Edit files in-place similarly to -I, but treat each file independently from other files")
28+
rootCmd.Flags().BoolS("l", "l", false, "Make output line buffered")
29+
rootCmd.Flags().BoolS("n", "n", false, "Suppress output")
30+
rootCmd.Flags().BoolS("r", "r", false, "Same as -E for compatibility with GNU sed")
31+
rootCmd.Flags().BoolS("u", "u", false, "Make output unbuffered")
32+
33+
carapace.Gen(rootCmd).FlagCompletion(carapace.ActionMap{
34+
"f": carapace.ActionFiles(),
35+
})
36+
37+
carapace.Gen(rootCmd).PositionalCompletion(
38+
carapace.ActionCallback(func(c carapace.Context) carapace.Action {
39+
if rootCmd.Flag("e").Changed || rootCmd.Flag("f").Changed {
40+
return carapace.ActionFiles()
41+
} else {
42+
return carapace.ActionValues()
43+
}
44+
}),
45+
)
46+
47+
carapace.Gen(rootCmd).PositionalAnyCompletion(carapace.ActionFiles())
48+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package main
2+
3+
import "github.com/carapace-sh/carapace-bin/completers/bsd/sed_completer/cmd"
4+
5+
func main() {
6+
cmd.Execute()
7+
}

pkg/actions/tools/carapace/completer.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ func ActionGroups(nameVariant string) carapace.Action {
9595
descriptions := map[string]string{
9696
"android": "termux completers",
9797
"bridge": "bridged completions",
98+
"bsd": "bsd-like completers",
9899
"common": "common completers",
99100
"darwin": "macos completers",
100101
"linux": "linux completers",

pkg/completer/completers.go

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package completer
22

33
import (
4+
"maps"
45
"os"
56
"runtime"
67
"slices"
@@ -22,6 +23,7 @@ func (c Completers) Lookup(variant, group string) (*Completer, bool) {
2223

2324
func (c Completers) Len() int { return len(c) }
2425
func (c Completers) Less(i, j int) bool { // TODO this needs testing (and likely some fixes)
26+
// TODO needs tests and is likely wrong
2527
if b := strings.Compare(c[i].Name, c[j].Name) != 0; b {
2628
return b
2729
}
@@ -31,21 +33,52 @@ func (c Completers) Less(i, j int) bool { // TODO this needs testing (and likely
3133
return a > b
3234
}
3335

36+
// TODO shells? more specific stuff
3437
groupPriority := map[string]int{
35-
// user specs
36-
"user": -8,
37-
// system specs
38-
"system": -7,
39-
// TODO shells? more specific stuff
40-
// runtime.GOOS: -6 (see below)
41-
"linux": -5,
42-
"darwin": -3,
43-
"windows": -2,
44-
"android": -1,
38+
"user": -21, // user specs
39+
"system": -20, // system specs
40+
41+
// runtime.GOOS: -15 (see below)
42+
43+
"linux": -10,
44+
"unix": -9,
45+
46+
"darwin": -8,
47+
"freebsd": -7,
48+
"netbsd": -6,
49+
"openbsd": -5,
50+
"bsd": -4,
51+
52+
"windows": -3,
53+
"android": -2,
54+
"common": -1,
4555
// TODO support pseudo os 'termux'?
4656
"bridge": 1, // lower priority than anything internal
4757
}
48-
groupPriority[runtime.GOOS] = -6 // ensure runime.GOOS has highest priority betwees gooses
58+
59+
// TODO urks - this is getting a bit out of hand. use copy map? needs to still support `force_all` build tag
60+
switch goos := runtime.GOOS; goos {
61+
case "android":
62+
maps.Copy(groupPriority, map[string]int{
63+
goos: -15,
64+
"linux": -14,
65+
"unix": -13,
66+
})
67+
case "darwin":
68+
maps.Copy(groupPriority, map[string]int{
69+
goos: -15,
70+
"bsd": -14,
71+
"unix": -13,
72+
})
73+
case "freebsd", "netbsd", "openbsd":
74+
maps.Copy(groupPriority, map[string]int{
75+
goos: -15,
76+
"bsd": -14,
77+
"unix": -13,
78+
})
79+
default:
80+
groupPriority[goos] = -15 // ensure runime.GOOS has highest priority betwees gooses
81+
}
4982

5083
if diff := groupPriority[c[i].Group] - groupPriority[c[j].Group]; diff != 0 {
5184
return diff < 0 // TODO verify

0 commit comments

Comments
 (0)