-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.go
117 lines (101 loc) · 3.27 KB
/
options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
package shell
import (
"context"
"github.com/DomBlack/bubble-shell/internal/config"
"github.com/DomBlack/bubble-shell/pkg/config/keymap"
"github.com/DomBlack/bubble-shell/pkg/config/styles"
)
// Option is a function that configures the shell.
type Option func(*config.Config)
// WithHistoryFile sets the history file to be used by the shell
// if not absolute will be relative to $HOME
func WithHistoryFile(fileName string) Option {
return func(o *config.Config) {
o.HistoryFile = fileName
}
}
// WithNoHistory disables history for the shell
func WithNoHistory() Option {
return func(o *config.Config) {
o.HistoryFile = ""
}
}
// KeyMap is a collection of all the key bindings used by the shell
//
// A default is provided and will be used by the shell if no other KeyMap is provided
// when creating a new shell.
type KeyMap = keymap.KeyMap
// WithKeyMap sets the keymap to be used by the shell
func WithKeyMap(keyMap KeyMap) Option {
return func(o *config.Config) {
o.KeyMap = keyMap
}
}
// Styles is the set of styles which will be used to render the shell.
//
// A default is provided and will be used by the shell if no other Styles is provided
// when creating a new shell.
type Styles = styles.Styles
// WithStyles sets the styles to be used by the shell
func WithStyles(styles Styles) Option {
return func(o *config.Config) {
o.Styles = styles
}
}
// WithMaxStackFrames sets the maximum number of stack frames to show in errors
// when rendered to the user.
//
// The shell defaults to 8 frames.
func WithMaxStackFrames(frames int) Option {
return func(o *config.Config) {
o.MaxStackFrames = frames
}
}
// WithAdditionalStackTraceFilters adds additional packages to filter from the stack traces
// of errors when rendered to the user.
func WithAdditionalStackTraceFilters(packages ...string) Option {
return func(o *config.Config) {
o.PackagesToFilterFromStack = append(packages, o.PackagesToFilterFromStack...)
}
}
// WithStackTraceFilters sets the packages to filter from the stack traces
// of errors when rendered to the user.
//
// By default the shell will filter out packages related to running the shell itself,
// if you want to keep these filters, then use [WithAdditionalStackTraceFilters].
//
// If you want no filtering to be done, then call this with no packages listed.
func WithStackTraceFilters(packages ...string) Option {
return func(o *config.Config) {
o.PackagesToFilterFromStack = packages
}
}
// WithInlineShell sets the shell to be inline rather than trying to render full screen
//
// This means that recovered history will not be shown, however your terminals own render
// will be incharge of scrolling.
func WithInlineShell() Option {
return func(o *config.Config) {
o.InlineShell = true
}
}
// WithBaseContext sets the context that commands will be run with
// when they are executed by users.
//
// By default [context.Background] will be used
func WithBaseContext(ctx context.Context) Option {
return func(o *config.Config) {
o.RootContext = ctx
}
}
// WithPromptFunc sets the function for rendering the prompt
//
// By default a function will be provided that returns "> "
func WithPromptFunc(promptFunc func() string) Option {
if promptFunc == nil {
panic("promptFunc cannot be nil")
}
return func(o *config.Config) {
o.PromptFunc = promptFunc
}
}