mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-15 04:54:14 +02:00
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package choose_files
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/kovidgoyal/kitty/tools/tui/loop"
|
|
"github.com/kovidgoyal/kitty/tools/wcswidth"
|
|
)
|
|
|
|
var _ = fmt.Print
|
|
|
|
func (h *Handler) draw_frame(width, height int) {
|
|
lp := h.lp
|
|
for i := range height {
|
|
lp.SaveCursorPosition()
|
|
switch i {
|
|
case 0:
|
|
lp.QueueWriteString("╭")
|
|
lp.QueueWriteString(strings.Repeat("─", width-2))
|
|
lp.QueueWriteString("╮")
|
|
case height - 1:
|
|
lp.QueueWriteString("╰")
|
|
lp.QueueWriteString(strings.Repeat("─", width-2))
|
|
lp.QueueWriteString("╯")
|
|
default:
|
|
lp.QueueWriteString("│")
|
|
lp.MoveCursorHorizontally(width - 2)
|
|
lp.QueueWriteString("│")
|
|
}
|
|
lp.RestoreCursorPosition()
|
|
lp.MoveCursorVertically(1)
|
|
}
|
|
}
|
|
|
|
func (h *Handler) draw_search_text(available_width int) {
|
|
text := h.state.SearchText()
|
|
available_width /= 2
|
|
if wcswidth.Stringwidth(text) > available_width {
|
|
g := wcswidth.SplitIntoGraphemes(text)
|
|
available_width -= 2
|
|
g = g[len(g)-available_width:]
|
|
text = "…" + strings.Join(g, "")
|
|
}
|
|
h.lp.DrawSizedText(text+" ", loop.SizedText{Scale: 2})
|
|
h.lp.MoveCursorHorizontally(-2)
|
|
}
|
|
|
|
const SEARCH_BAR_HEIGHT = 4
|
|
|
|
func (h *Handler) draw_search_bar(y int) {
|
|
left_margin, right_margin := 5, 5
|
|
h.lp.MoveCursorTo(1+left_margin, 1+y)
|
|
available_width := h.screen_size.width - left_margin - right_margin
|
|
h.draw_frame(available_width, SEARCH_BAR_HEIGHT)
|
|
h.lp.MoveCursorTo(1+left_margin+1, 2+y)
|
|
h.draw_search_text(available_width - 2)
|
|
return
|
|
}
|
|
|
|
func (h *Handler) handle_edit_keys(ev *loop.KeyEvent) bool {
|
|
switch {
|
|
case ev.MatchesPressOrRepeat("backspace"):
|
|
if h.state.SearchText() == "" {
|
|
h.lp.Beep()
|
|
} else {
|
|
g := wcswidth.SplitIntoGraphemes(h.state.search_text)
|
|
h.state.SetSearchText(strings.Join(g[:len(g)-1], ""))
|
|
h.result_manager.set_query(h.state.SearchText())
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|