mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-06-19 00:28:03 +02:00
.devcontainer
.github
.vscode
cmd
demo
docs
pkg
app
cheatsheet
commands
common
config
constants
env
fakes
gui
context
traits
base_context.go
branches_context.go
commit_files_context.go
commit_message_context.go
confirmation_context.go
context.go
context_common.go
dynamic_title_builder.go
filtered_list.go
filtered_list_view_model.go
history_trait.go
list_context_trait.go
list_renderer.go
list_renderer_test.go
list_view_model.go
local_commits_context.go
menu_context.go
merge_conflicts_context.go
parent_context_mgr.go
patch_explorer_context.go
reflog_commits_context.go
remote_branches_context.go
remotes_context.go
search_trait.go
setup.go
simple_context.go
stash_context.go
sub_commits_context.go
submodules_context.go
suggestions_context.go
tags_context.go
view_trait.go
working_tree_context.go
worktrees_context.go
controllers
filetree
keybindings
mergeconflicts
modes
patch_exploring
popup
presentation
services
status
style
types
background.go
command_log_panel.go
context.go
context_config.go
controllers.go
dummies.go
editors.go
extras_panel.go
global_handlers.go
gui.go
gui_common.go
gui_driver.go
information_panel.go
keybindings.go
layout.go
main_panels.go
menu_panel.go
options_map.go
pty.go
pty_windows.go
recent_repos_panel.go
tasks_adapter.go
test_mode.go
view_helpers.go
views.go
i18n
integration
jsonschema
logs
snake
tasks
theme
updates
utils
schema
scripts
test
vendor
.codespellrc
.editorconfig
.gitattributes
.gitignore
.golangci.yml
.goreleaser.yml
CODE-OF-CONDUCT.md
CONTRIBUTING.md
Dockerfile
LICENSE
Makefile
README.md
VISION.md
go.mod
go.sum
main.go
Original commit message of the gocui change: This fixes View.Size, Width and Height to be the correct (outer) size of a view including its frame, and InnerSize/InnerWidth/InnerHeight to be the usable client area exluding the frame. Previously, Size was actually the InnerSize (and a lot of client code used it as such, so these need to be changed to InnerSize). InnerSize, on the other hand, was *one* less than Size (not two, as you would have expected), and in many cases this was made up for at call sites by adding 1 (e.g. in calcRealScrollbarStartEnd, parseInput, and many other places in the lazygit code). There are still some weird things left that I didn't address here: - a view's lower-right coordinates (x1/y1) are one less than you would expect. For example, a view with a 2x2 client area like this: ╭──╮ │ab│ │cd│ ╰──╯ in the top-left corner of the screen (x0 and y0 both zero) has x1/xy at 3, not 4 as would be more natural. - a view without a frame has its coordinates extended by 1 on all sides; to illustrate, the same 2x2 view as before but without a frame, sitting in the top-left corder of the screen, has coordinates x0=-1, y0=-1, x1=2, y1=2. This is highly confusing and unexpected. I left these as they are because they would be even more of a breaking change, and also because they don't have quite as much of an impact on general app code.
105 lines
2.3 KiB
Go
105 lines
2.3 KiB
Go
package context
|
|
|
|
import (
|
|
"github.com/jesseduffield/gocui"
|
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
)
|
|
|
|
const HORIZONTAL_SCROLL_FACTOR = 3
|
|
|
|
type ViewTrait struct {
|
|
view *gocui.View
|
|
}
|
|
|
|
var _ types.IViewTrait = &ViewTrait{}
|
|
|
|
func NewViewTrait(view *gocui.View) *ViewTrait {
|
|
return &ViewTrait{view: view}
|
|
}
|
|
|
|
func (self *ViewTrait) FocusPoint(yIdx int) {
|
|
self.view.FocusPoint(self.view.OriginX(), yIdx)
|
|
}
|
|
|
|
func (self *ViewTrait) SetRangeSelectStart(yIdx int) {
|
|
self.view.SetRangeSelectStart(yIdx)
|
|
}
|
|
|
|
func (self *ViewTrait) CancelRangeSelect() {
|
|
self.view.CancelRangeSelect()
|
|
}
|
|
|
|
func (self *ViewTrait) SetViewPortContent(content string) {
|
|
_, y := self.view.Origin()
|
|
self.view.OverwriteLines(y, content)
|
|
}
|
|
|
|
func (self *ViewTrait) SetViewPortContentAndClearEverythingElse(content string) {
|
|
_, y := self.view.Origin()
|
|
self.view.OverwriteLinesAndClearEverythingElse(y, content)
|
|
}
|
|
|
|
func (self *ViewTrait) SetContentLineCount(lineCount int) {
|
|
self.view.SetContentLineCount(lineCount)
|
|
}
|
|
|
|
func (self *ViewTrait) SetContent(content string) {
|
|
self.view.SetContent(content)
|
|
}
|
|
|
|
func (self *ViewTrait) SetHighlight(highlight bool) {
|
|
self.view.Highlight = highlight
|
|
self.view.HighlightInactive = false
|
|
}
|
|
|
|
func (self *ViewTrait) SetFooter(value string) {
|
|
self.view.Footer = value
|
|
}
|
|
|
|
func (self *ViewTrait) SetOriginX(value int) {
|
|
self.view.SetOriginX(value)
|
|
}
|
|
|
|
// tells us the start of line indexes shown in the view currently as well as the capacity of lines shown in the viewport.
|
|
func (self *ViewTrait) ViewPortYBounds() (int, int) {
|
|
_, start := self.view.Origin()
|
|
length := self.view.InnerHeight()
|
|
return start, length
|
|
}
|
|
|
|
func (self *ViewTrait) ScrollLeft() {
|
|
self.view.ScrollLeft(self.horizontalScrollAmount())
|
|
}
|
|
|
|
func (self *ViewTrait) ScrollRight() {
|
|
self.view.ScrollRight(self.horizontalScrollAmount())
|
|
}
|
|
|
|
func (self *ViewTrait) horizontalScrollAmount() int {
|
|
return self.view.InnerWidth() / HORIZONTAL_SCROLL_FACTOR
|
|
}
|
|
|
|
func (self *ViewTrait) ScrollUp(value int) {
|
|
self.view.ScrollUp(value)
|
|
}
|
|
|
|
func (self *ViewTrait) ScrollDown(value int) {
|
|
self.view.ScrollDown(value)
|
|
}
|
|
|
|
// this returns the amount we'll scroll if we want to scroll by a page.
|
|
func (self *ViewTrait) PageDelta() int {
|
|
height := self.view.InnerHeight()
|
|
|
|
delta := height - 1
|
|
if delta == 0 {
|
|
return 1
|
|
}
|
|
|
|
return delta
|
|
}
|
|
|
|
func (self *ViewTrait) SelectedLineIdx() int {
|
|
return self.view.SelectedLineIdx()
|
|
}
|