mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-25 09:48:09 +02:00
Wire up searching
This commit is contained in:
@@ -43,8 +43,8 @@ func (self *ThemesList) Next(delta int, allow_wrapping bool) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func limit_lengths(text string) string {
|
func limit_lengths(text string) string {
|
||||||
t, x := wcswidth.TruncateToVisualLengthWithWidth(text, 31)
|
t, _ := wcswidth.TruncateToVisualLengthWithWidth(text, 31)
|
||||||
if x >= len(text) {
|
if len(t) >= len(text) {
|
||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
return t + "…"
|
return t + "…"
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ func (self *FamilyList) Next(delta int, allow_wrapping bool) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func limit_lengths(text string) string {
|
func limit_lengths(text string) string {
|
||||||
t, x := wcswidth.TruncateToVisualLengthWithWidth(text, 31)
|
t, _ := wcswidth.TruncateToVisualLengthWithWidth(text, 31)
|
||||||
if x >= len(text) {
|
if len(t) >= len(text) {
|
||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
return t + "…"
|
return t + "…"
|
||||||
@@ -83,9 +83,9 @@ func apply_search(families []string, expression string, marks ...string) []strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *FamilyList) UpdateFamilies(families []string) {
|
func (self *FamilyList) UpdateFamilies(families []string) {
|
||||||
self.families, self.families = families, families
|
self.families, self.all_families = families, families
|
||||||
if self.current_search != "" {
|
if self.current_search != "" {
|
||||||
self.display_strings = utils.Map(limit_lengths, apply_search(self.families, self.current_search))
|
self.display_strings = utils.Map(limit_lengths, apply_search(self.all_families, self.current_search))
|
||||||
} else {
|
} else {
|
||||||
self.display_strings = utils.Map(limit_lengths, families)
|
self.display_strings = utils.Map(limit_lengths, families)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,19 +21,19 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type handler struct {
|
type handler struct {
|
||||||
lp *loop.Loop
|
lp *loop.Loop
|
||||||
fonts map[string][]ListedFont
|
fonts map[string][]ListedFont
|
||||||
all_font_families []string
|
state State
|
||||||
state State
|
|
||||||
|
|
||||||
// Listing
|
// Listing
|
||||||
current_font_families []string
|
rl *readline.Readline
|
||||||
rl *readline.Readline
|
family_list FamilyList
|
||||||
}
|
}
|
||||||
|
|
||||||
// Listing families {{{
|
// Listing families {{{
|
||||||
func (h *handler) draw_search_bar() {
|
func (h *handler) draw_search_bar() {
|
||||||
h.lp.SetCursorVisible(true)
|
h.lp.SetCursorVisible(true)
|
||||||
|
h.lp.SetCursorShape(loop.BAR_CURSOR, true)
|
||||||
sz, err := h.lp.ScreenSize()
|
sz, err := h.lp.ScreenSize()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -43,19 +43,55 @@ func (h *handler) draw_search_bar() {
|
|||||||
h.rl.RedrawNonAtomic()
|
h.rl.RedrawNonAtomic()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SEPARATOR = "║"
|
||||||
|
|
||||||
|
func (h *handler) draw_family_summary() (err error) {
|
||||||
|
// TODO: Implement me
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (h *handler) draw_listing_screen() (err error) {
|
func (h *handler) draw_listing_screen() (err error) {
|
||||||
sz, err := h.lp.ScreenSize()
|
sz, err := h.lp.ScreenSize()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
_ = sz
|
num_rows := max(0, int(sz.HeightCells)-1)
|
||||||
|
mw := h.family_list.max_width + 1
|
||||||
|
green_fg, _, _ := strings.Cut(h.lp.SprintStyled("fg=green", "|"), "|")
|
||||||
|
for _, l := range h.family_list.Lines(num_rows) {
|
||||||
|
line := l.text
|
||||||
|
if l.is_current {
|
||||||
|
line = strings.ReplaceAll(line, MARK_AFTER, green_fg)
|
||||||
|
h.lp.PrintStyled("fg=green", ">")
|
||||||
|
h.lp.PrintStyled("fg=green bold", line)
|
||||||
|
} else {
|
||||||
|
h.lp.PrintStyled("fg=green", " ")
|
||||||
|
h.lp.QueueWriteString(line)
|
||||||
|
}
|
||||||
|
h.lp.MoveCursorHorizontally(mw - l.width)
|
||||||
|
h.lp.Println(SEPARATOR)
|
||||||
|
num_rows--
|
||||||
|
}
|
||||||
|
for ; num_rows > 0; num_rows-- {
|
||||||
|
h.lp.MoveCursorHorizontally(mw + 1)
|
||||||
|
h.lp.Println(SEPARATOR)
|
||||||
|
}
|
||||||
|
if h.family_list.Len() > 0 {
|
||||||
|
if err = h.draw_family_summary(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
h.draw_search_bar()
|
h.draw_search_bar()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *handler) update_family_search() {
|
func (h *handler) update_family_search() {
|
||||||
text := h.rl.AllText()
|
text := h.rl.AllText()
|
||||||
_ = text
|
if h.family_list.UpdateSearch(text) {
|
||||||
|
h.draw_screen()
|
||||||
|
} else {
|
||||||
|
h.draw_search_bar()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *handler) handle_listing_key_event(event *loop.KeyEvent) (err error) {
|
func (h *handler) handle_listing_key_event(event *loop.KeyEvent) (err error) {
|
||||||
@@ -81,7 +117,7 @@ func (h *handler) handle_listing_text(text string, from_key_event bool, in_brack
|
|||||||
if err = h.rl.OnText(text, from_key_event, in_bracketed_paste); err != nil {
|
if err = h.rl.OnText(text, from_key_event, in_bracketed_paste); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
h.draw_screen()
|
h.update_family_search()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,14 +126,14 @@ func (h *handler) handle_listing_text(text string, from_key_event bool, in_brack
|
|||||||
// Events {{{
|
// Events {{{
|
||||||
func (h *handler) initialize() {
|
func (h *handler) initialize() {
|
||||||
h.lp.SetCursorVisible(false)
|
h.lp.SetCursorVisible(false)
|
||||||
h.all_font_families = utils.StableSortWithKey(maps.Keys(h.fonts), strings.ToLower)
|
h.family_list.UpdateFamilies(utils.StableSortWithKey(maps.Keys(h.fonts), strings.ToLower))
|
||||||
h.current_font_families = h.all_font_families
|
|
||||||
h.rl = readline.New(h.lp, readline.RlInit{DontMarkPrompts: true, Prompt: "Family: "})
|
h.rl = readline.New(h.lp, readline.RlInit{DontMarkPrompts: true, Prompt: "Family: "})
|
||||||
h.draw_screen()
|
h.draw_screen()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *handler) finalize() {
|
func (h *handler) finalize() {
|
||||||
h.lp.SetCursorVisible(true)
|
h.lp.SetCursorVisible(true)
|
||||||
|
h.lp.SetCursorShape(loop.BLOCK_CURSOR, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *handler) draw_screen() (err error) {
|
func (h *handler) draw_screen() (err error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user