summaryrefslogtreecommitdiff
path: root/internal/install/bash.go
diff options
context:
space:
mode:
authorEyal Posener <[email protected]>2019-11-14 06:51:44 +0200
committerEyal Posener <[email protected]>2019-11-18 01:05:47 +0200
commit8724aaf18312e54750540a9578e00d61b1c545d8 (patch)
treed3e736b4fb279975bbcc017ae1bad53e454c5773 /internal/install/bash.go
parent05b68ffc813dd10c420993cb1cf927b346c057b8 (diff)
V2
Diffstat (limited to 'internal/install/bash.go')
-rw-r--r--internal/install/bash.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/internal/install/bash.go b/internal/install/bash.go
new file mode 100644
index 0000000..17c64de
--- /dev/null
+++ b/internal/install/bash.go
@@ -0,0 +1,37 @@
+package install
+
+import "fmt"
+
+// (un)install in bash
+// basically adds/remove from .bashrc:
+//
+// complete -C </path/to/completion/command> <command>
+type bash struct {
+ rc string
+}
+
+func (b bash) IsInstalled(cmd, bin string) bool {
+ completeCmd := b.cmd(cmd, bin)
+ return lineInFile(b.rc, completeCmd)
+}
+
+func (b bash) Install(cmd, bin string) error {
+ if b.IsInstalled(cmd, bin) {
+ return fmt.Errorf("already installed in %s", b.rc)
+ }
+ completeCmd := b.cmd(cmd, bin)
+ return appendToFile(b.rc, completeCmd)
+}
+
+func (b bash) Uninstall(cmd, bin string) error {
+ if !b.IsInstalled(cmd, bin) {
+ return fmt.Errorf("does not installed in %s", b.rc)
+ }
+
+ completeCmd := b.cmd(cmd, bin)
+ return removeFromFile(b.rc, completeCmd)
+}
+
+func (bash) cmd(cmd, bin string) string {
+ return fmt.Sprintf("complete -C %s %s", bin, cmd)
+}