gui

package
v0.23.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 13, 2020 License: MIT Imports: 42 Imported by: 1

Documentation

Index

Constants

View Source
const (
	SIDE_CONTEXT int = iota
	MAIN_CONTEXT
	TEMPORARY_POPUP
	PERSISTENT_POPUP
)
View Source
const (
	STATUS_CONTEXT_KEY              = "status"
	FILES_CONTEXT_KEY               = "files"
	LOCAL_BRANCHES_CONTEXT_KEY      = "localBranches"
	REMOTES_CONTEXT_KEY             = "remotes"
	REMOTE_BRANCHES_CONTEXT_KEY     = "remoteBranches"
	TAGS_CONTEXT_KEY                = "tags"
	BRANCH_COMMITS_CONTEXT_KEY      = "commits"
	REFLOG_COMMITS_CONTEXT_KEY      = "reflogCommits"
	SUB_COMMITS_CONTEXT_KEY         = "subCommits"
	COMMIT_FILES_CONTEXT_KEY        = "commitFiles"
	STASH_CONTEXT_KEY               = "stash"
	MAIN_NORMAL_CONTEXT_KEY         = "normal"
	MAIN_MERGING_CONTEXT_KEY        = "merging"
	MAIN_PATCH_BUILDING_CONTEXT_KEY = "patchBuilding"
	MAIN_STAGING_CONTEXT_KEY        = "staging"
	MENU_CONTEXT_KEY                = "menu"
	CREDENTIALS_CONTEXT_KEY         = "credentials"
	CONFIRMATION_CONTEXT_KEY        = "confirmation"
	SEARCH_CONTEXT_KEY              = "search"
	COMMIT_MESSAGE_CONTEXT_KEY      = "commitMessage"
	SUBMODULES_CONTEXT_KEY          = "submodules"
)
View Source
const (
	SCREEN_NORMAL int = iota
	SCREEN_HALF
	SCREEN_FULL
)
View Source
const (
	INITIAL = iota
	COMPLETE
)

startup stages so we don't need to load everything at once

View Source
const (
	LINE = iota
	RANGE
	HUNK
)

these represent what select mode we're in

View Source
const (
	RENDER_STRING = iota
	RENDER_STRING_WITHOUT_SCROLL
	RUN_FUNCTION
	RUN_COMMAND
	RUN_PTY
)

constants for updateTask's kind field

View Source
const (
	CHECKOUT = iota
	COMMIT
	REBASE
	CURRENT_REBASE
)
View Source
const (
	COMMITS = iota
	BRANCHES
	FILES
	STASH
	REFLOG
	TAGS
	REMOTES
	STATUS
	SUBMODULES
)

models/views that we can refresh

View Source
const (
	SYNC     = iota // wait until everything is done before returning
	ASYNC           // return immediately, allowing each independent thing to update itself
	BLOCK_UI        // wrap code in an update call to ensure UI updates all at once and keybindings aren't executed till complete
)
View Source
const INFO_SECTION_PADDING = " "
View Source
const MAX_WATCHED_FILES = 50

macs for some bizarre reason cap the number of watchable files to 256. there's no obvious platform agonstic way to check the situation of the user's computer so we're just arbitrarily capping at 200. This isn't so bad because file watching is only really an added bonus for faster refreshing.

View Source
const SEARCH_PREFIX = "search: "
View Source
const StartupPopupVersion = 3

Variables

View Source
var OverlappingEdges = false

OverlappingEdges determines if panel edges overlap

Functions

func GetKeyDisplay added in v0.12.1

func GetKeyDisplay(key interface{}) string

func NewFileWatcher added in v0.12.1

func NewFileWatcher(log *logrus.Entry) *fileWatcher

Types

type BasicContext added in v0.22.0

type BasicContext struct {
	OnFocus         func() error
	OnFocusLost     func() error
	OnRender        func() error
	OnGetOptionsMap func() map[string]string
	Kind            int
	Key             string
	ViewName        string
}

func (BasicContext) GetKey added in v0.22.0

func (c BasicContext) GetKey() string

func (BasicContext) GetKind added in v0.22.0

func (c BasicContext) GetKind() int

func (BasicContext) GetOptionsMap added in v0.22.0

func (c BasicContext) GetOptionsMap() map[string]string

func (BasicContext) GetParentContext added in v0.22.0

func (c BasicContext) GetParentContext() (Context, bool)

func (BasicContext) GetViewName added in v0.22.0

func (c BasicContext) GetViewName() string

func (BasicContext) GetWindowName added in v0.22.0

func (c BasicContext) GetWindowName() string

func (BasicContext) HandleFocus added in v0.22.0

func (c BasicContext) HandleFocus() error

func (BasicContext) HandleFocusLost added in v0.22.0

func (c BasicContext) HandleFocusLost() error

func (BasicContext) HandleRender added in v0.22.0

func (c BasicContext) HandleRender() error

func (BasicContext) SetParentContext added in v0.22.0

func (c BasicContext) SetParentContext(Context)

func (BasicContext) SetWindowName added in v0.22.0

func (c BasicContext) SetWindowName(windowName string)

type Binding

type Binding struct {
	ViewName    string
	Contexts    []string
	Handler     func(*gocui.Gui, *gocui.View) error
	Key         interface{} // FIXME: find out how to get `gocui.Key | rune`
	Modifier    gocui.Modifier
	Description string
	Alternative string
	Tag         string // e.g. 'navigation'. Used for grouping things in the cheatsheet
}

Binding - a keybinding mapping a key and modifier to a handler. The keypress is only handled if the given view has focus, or handled globally if the view is ""

func (*Binding) GetDisplayStrings added in v0.3.0

func (b *Binding) GetDisplayStrings(isFocused bool) []string

GetDisplayStrings returns the display string of a file

type CherryPicking added in v0.22.0

type CherryPicking struct {
	CherryPickedCommits []*models.Commit

	// we only allow cherry picking from one context at a time, so you can't copy a commit from the local commits context and then also copy a commit in the reflog context
	ContextKey string
}

func (*CherryPicking) Active added in v0.22.0

func (m *CherryPicking) Active() bool

type Context added in v0.22.0

type Context interface {
	HandleFocus() error
	HandleFocusLost() error
	HandleRender() error
	GetKind() int
	GetViewName() string
	GetWindowName() string
	SetWindowName(string)
	GetKey() string
	SetParentContext(Context)

	// we return a bool here to tell us whether or not the returned value just wraps a nil
	GetParentContext() (Context, bool)
	GetOptionsMap() map[string]string
}

type ContextTree added in v0.22.0

type ContextTree struct {
	Status        SimpleContextNode
	Files         SimpleContextNode
	Submodules    SimpleContextNode
	Menu          SimpleContextNode
	Branches      SimpleContextNode
	Remotes       RemotesContextNode
	Tags          SimpleContextNode
	BranchCommits SimpleContextNode
	CommitFiles   SimpleContextNode
	ReflogCommits SimpleContextNode
	SubCommits    SimpleContextNode
	Stash         SimpleContextNode
	Normal        SimpleContextNode
	Staging       SimpleContextNode
	PatchBuilding SimpleContextNode
	Merging       SimpleContextNode
	Credentials   SimpleContextNode
	Confirmation  SimpleContextNode
	CommitMessage SimpleContextNode
	Search        SimpleContextNode
}

type CustomCommandObjects added in v0.23.1

type CustomCommandObjects struct {
	SelectedLocalCommit  *models.Commit
	SelectedReflogCommit *models.Commit
	SelectedSubCommit    *models.Commit
	SelectedFile         *models.File
	SelectedLocalBranch  *models.Branch
	SelectedRemoteBranch *models.RemoteBranch
	SelectedRemote       *models.Remote
	SelectedTag          *models.Tag
	SelectedStashEntry   *models.StashEntry
	SelectedCommitFile   *models.CommitFile
	CheckedOutBranch     *models.Branch
	PromptResponses      []string
}

type Diffing added in v0.22.0

type Diffing struct {
	Ref     string
	Reverse bool
}

if ref is blank we're not diffing anything

func (*Diffing) Active added in v0.22.0

func (m *Diffing) Active() bool

type Filtering added in v0.22.0

type Filtering struct {
	Path string // the filename that gets passed to git log
}

func (*Filtering) Active added in v0.22.0

func (m *Filtering) Active() bool

type Gui

type Gui struct {
	Log        *logrus.Entry
	GitCommand *commands.GitCommand
	OSCommand  *oscommands.OSCommand
	SubProcess *exec.Cmd
	State      *guiState
	Config     config.AppConfigurer
	Tr         *i18n.TranslationSet
	Errors     SentinelErrors
	Updater    *updates.Updater

	Contexts          ContextTree
	ViewTabContextMap map[string][]tabContext

	// this array either includes the events that we're recording in this session
	// or the events we've recorded in a prior session
	RecordedEvents []RecordedEvent
	StartTime      time.Time

	Mutexes guiStateMutexes
	// contains filtered or unexported fields
}

Gui wraps the gocui Gui object which handles rendering and events

func NewGui

func NewGui(log *logrus.Entry, gitCommand *commands.GitCommand, oSCommand *oscommands.OSCommand, tr *i18n.TranslationSet, config config.AppConfigurer, updater *updates.Updater, filterPath string, showRecentRepos bool) (*Gui, error)

for now the split view will always be on NewGui builds a new gui handler

func (*Gui) GenerateSentinelErrors added in v0.1.62

func (gui *Gui) GenerateSentinelErrors()

GenerateSentinelErrors makes the sentinel errors for the gui. We're defining it here because we can't do package-scoped errors with localization, and also because it seems like package-scoped variables are bad in general https://dave.cheney.net/2017/06/11/go-without-package-scoped-variables In the future it would be good to implement some of the recommendations of that article. For now, if we don't need an error to be a sentinel, we will just define it inline. This has implications for error messages that pop up everywhere in that we'll be duplicating the default values. We may need to look at having a default localisation bundle defined, and just using keys-only when localising things in the code.

func (*Gui) GetCustomCommandKeybindings added in v0.23.1

func (gui *Gui) GetCustomCommandKeybindings() []*Binding

func (*Gui) GetInitialKeybindings added in v0.7.1

func (gui *Gui) GetInitialKeybindings() []*Binding

GetInitialKeybindings is a function.

func (*Gui) HandlePasteCommits added in v0.7.1

func (gui *Gui) HandlePasteCommits() error

HandlePasteCommits begins a cherry-pick rebase with the commits the user has copied

func (*Gui) LBLCycleLine added in v0.23.1

func (gui *Gui) LBLCycleLine(change int, state *lBlPanelState) error

func (*Gui) LBLSelectLine added in v0.23.1

func (gui *Gui) LBLSelectLine(newSelectedLineIdx int, state *lBlPanelState) error

func (*Gui) PrepareSubProcess

func (gui *Gui) PrepareSubProcess(command string)

PrepareSubProcess - prepare a subprocess for execution and tell the gui to switch to it

func (*Gui) RenderCommitLength added in v0.2.2

func (gui *Gui) RenderCommitLength()

RenderCommitLength is a function.

func (*Gui) Run

func (gui *Gui) Run() error

Run setup the gui with keybindings and start the mainloop

func (*Gui) RunWithSubprocesses

func (gui *Gui) RunWithSubprocesses() error

RunWithSubprocesses loops, instantiating a new gocui.Gui with each iteration if the error returned from a run is a ErrSubProcess, it runs the subprocess otherwise it handles the error, possibly by quitting the application

func (*Gui) WithWaitingStatus added in v0.7.1

func (gui *Gui) WithWaitingStatus(name string, f func() error) error

WithWaitingStatus wraps a function and shows a waiting status while the function is still executing

type IListPanelState added in v0.22.0

type IListPanelState interface {
	SetSelectedLineIdx(int)
	GetSelectedLineIdx() int
}

type ListContext added in v0.22.0

type ListContext struct {
	ViewName            string
	ContextKey          string
	GetItemsLength      func() int
	GetDisplayStrings   func() [][]string
	OnFocus             func() error
	OnFocusLost         func() error
	OnClickSelectedItem func() error
	OnGetOptionsMap     func() map[string]string

	// the boolean here tells us whether the item is nil. This is needed because you can't work it out on the calling end once the pointer is wrapped in an interface (unless you want to use reflection)
	SelectedItem  func() (ListItem, bool)
	GetPanelState func() IListPanelState

	Gui                        *Gui
	ResetMainViewOriginOnFocus bool
	Kind                       int
	ParentContext              Context

	WindowName string
	// contains filtered or unexported fields
}

func (*ListContext) GetKey added in v0.22.0

func (lc *ListContext) GetKey() string

func (*ListContext) GetKind added in v0.22.0

func (lc *ListContext) GetKind() int

func (*ListContext) GetOptionsMap added in v0.22.0

func (lc *ListContext) GetOptionsMap() map[string]string

func (*ListContext) GetParentContext added in v0.22.0

func (lc *ListContext) GetParentContext() (Context, bool)

func (*ListContext) GetSelectedItem added in v0.22.0

func (lc *ListContext) GetSelectedItem() (ListItem, bool)

func (*ListContext) GetSelectedItemId added in v0.22.0

func (lc *ListContext) GetSelectedItemId() string

func (*ListContext) GetViewName added in v0.22.0

func (lc *ListContext) GetViewName() string

func (*ListContext) GetWindowName added in v0.22.0

func (lc *ListContext) GetWindowName() string

func (*ListContext) HandleFocus added in v0.22.0

func (lc *ListContext) HandleFocus() error

func (*ListContext) HandleFocusLost added in v0.22.0

func (lc *ListContext) HandleFocusLost() error

func (*ListContext) HandleRender added in v0.22.0

func (lc *ListContext) HandleRender() error

func (*ListContext) OnRender added in v0.22.0

func (lc *ListContext) OnRender() error

OnFocus assumes that the content of the context has already been rendered to the view. OnRender is the function which actually renders the content to the view

func (*ListContext) SetParentContext added in v0.22.0

func (lc *ListContext) SetParentContext(c Context)

func (*ListContext) SetWindowName added in v0.22.0

func (lc *ListContext) SetWindowName(windowName string)

type ListItem added in v0.22.0

type ListItem interface {
	// ID is a SHA when the item is a commit, a filename when the item is a file, 'stash@{4}' when it's a stash entry, 'my_branch' when it's a branch
	ID() string

	// Description is something we would show in a message e.g. '123as14: push blah' for a commit
	Description() string
}

type Modes added in v0.22.0

type Modes struct {
	Filtering     Filtering
	CherryPicking CherryPicking
	Diffing       Diffing
}

type PullFilesOptions added in v0.22.0

type PullFilesOptions struct {
	RemoteName string
	BranchName string
}

type RecordedEvent added in v0.23.1

type RecordedEvent struct {
	Timestamp int64
	Event     *termbox.Event
}

type RemotesContextNode added in v0.22.0

type RemotesContextNode struct {
	Context  Context
	Branches SimpleContextNode
}

type SentinelErrors added in v0.1.62

type SentinelErrors struct {
	ErrSubProcess error
	ErrNoFiles    error
	ErrSwitchRepo error
	ErrRestart    error
}

SentinelErrors are the errors that have special meaning and need to be checked by calling functions. The less of these, the better

type SimpleContextNode added in v0.22.0

type SimpleContextNode struct {
	Context Context
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL