mirror of
https://github.com/junegunn/fzf.git
synced 2025-08-19 06:23:49 -07:00
Add click-header event for reporting clicks within header (#3768)
Sets $FZF_CLICK_HEADER_LINE and $FZF_CLICK_HEADER_COLUMN env vars with coordinates of the last click inside and relative to the header and fires click-header event. Co-authored-by: Junegunn Choi <junegunn.c@gmail.com>
This commit is contained in:
@@ -298,6 +298,8 @@ type Terminal struct {
|
||||
areaLines int
|
||||
areaColumns int
|
||||
forcePreview bool
|
||||
clickHeaderLine int
|
||||
clickHeaderColumn int
|
||||
}
|
||||
|
||||
type selectedItem struct {
|
||||
@@ -857,6 +859,8 @@ func (t *Terminal) environ() []string {
|
||||
env = append(env, fmt.Sprintf("FZF_LINES=%d", t.areaLines))
|
||||
env = append(env, fmt.Sprintf("FZF_COLUMNS=%d", t.areaColumns))
|
||||
env = append(env, fmt.Sprintf("FZF_POS=%d", util.Min(t.merger.Length(), t.cy+1)))
|
||||
env = append(env, fmt.Sprintf("FZF_CLICK_HEADER_LINE=%d", t.clickHeaderLine))
|
||||
env = append(env, fmt.Sprintf("FZF_CLICK_HEADER_COLUMN=%d", t.clickHeaderColumn))
|
||||
return env
|
||||
}
|
||||
|
||||
@@ -4001,10 +4005,10 @@ func (t *Terminal) Loop() {
|
||||
}
|
||||
|
||||
if me.Down {
|
||||
mx = util.Constrain(mx-t.promptLen, 0, len(t.input))
|
||||
if my == t.promptLine() && mx >= 0 {
|
||||
mx_cons := util.Constrain(mx-t.promptLen, 0, len(t.input))
|
||||
if my == t.promptLine() && mx_cons >= 0 {
|
||||
// Prompt
|
||||
t.cx = mx + t.xoffset
|
||||
t.cx = mx_cons + t.xoffset
|
||||
} else if my >= min {
|
||||
t.vset(t.offset + my - min)
|
||||
req(reqList)
|
||||
@@ -4019,6 +4023,34 @@ func (t *Terminal) Loop() {
|
||||
}
|
||||
}
|
||||
return doActions(actionsFor(evt))
|
||||
} else {
|
||||
// Header
|
||||
lineOffset := 0
|
||||
numLines := t.visibleHeaderLines()
|
||||
if !t.headerFirst {
|
||||
// offset for info line
|
||||
if t.noSeparatorLine() {
|
||||
lineOffset = 1
|
||||
} else {
|
||||
lineOffset = 2
|
||||
}
|
||||
} else {
|
||||
// adjust for too-small window
|
||||
numItems := t.areaLines - numLines
|
||||
if !t.noSeparatorLine() {
|
||||
numItems -= 1
|
||||
}
|
||||
if numItems < 0 {
|
||||
numLines += numItems
|
||||
}
|
||||
}
|
||||
my = util.Constrain(my-lineOffset, -1, numLines)
|
||||
mx -= 2 // offset gutter
|
||||
if my >= 0 && my < numLines && mx >= 0 {
|
||||
t.clickHeaderLine = my + 1
|
||||
t.clickHeaderColumn = mx + 1
|
||||
return doActions(actionsFor(tui.ClickHeader))
|
||||
}
|
||||
}
|
||||
}
|
||||
case actReload, actReloadSync:
|
||||
|
Reference in New Issue
Block a user