This commit is contained in:
Kovid Goyal
2024-05-27 13:08:12 +05:30
parent a69d71d416
commit 72257f652d
2 changed files with 21 additions and 18 deletions

View File

@@ -33,17 +33,18 @@ func (self *FamilyList) Select(family string) bool {
} }
func (self *FamilyList) Next(delta int, allow_wrapping bool) bool { func (self *FamilyList) Next(delta int, allow_wrapping bool) bool {
if len(self.display_strings) == 0 { l := func() int { return self.Len() }
if l() == 0 {
return false return false
} }
idx := self.current_idx + delta idx := self.current_idx + delta
if !allow_wrapping && (idx < 0 || idx > self.Len()) { if !allow_wrapping && (idx < 0 || idx > l()) {
return false return false
} }
for idx < 0 { for idx < 0 {
idx += self.Len() idx += l()
} }
self.current_idx = idx % self.Len() self.current_idx = idx % l()
return true return true
} }

View File

@@ -23,6 +23,7 @@ type FontList struct {
rl *readline.Readline rl *readline.Readline
family_list FamilyList family_list FamilyList
fonts map[string][]ListedFont fonts map[string][]ListedFont
family_list_updated bool
resolved_faces_from_kitty_conf ResolvedFaces resolved_faces_from_kitty_conf ResolvedFaces
handler *handler handler *handler
variable_data_requested_for *utils.Set[string] variable_data_requested_for *utils.Set[string]
@@ -166,8 +167,11 @@ func (self *FontList) draw_preview(x, y int, sz loop.ScreenSize) (err error) {
} }
func (self *FontList) on_wakeup() error { func (self *FontList) on_wakeup() error {
self.family_list.UpdateFamilies(utils.StableSortWithKey(utils.Keys(self.fonts), strings.ToLower)) if !self.family_list_updated {
self.family_list.SelectFamily(self.resolved_faces_from_kitty_conf.Font_family.Family) self.family_list_updated = true
self.family_list.UpdateFamilies(utils.StableSortWithKey(utils.Keys(self.fonts), strings.ToLower))
self.family_list.SelectFamily(self.resolved_faces_from_kitty_conf.Font_family.Family)
}
return self.handler.draw_screen() return self.handler.draw_screen()
} }
@@ -235,12 +239,12 @@ func (self *FontList) update_family_search() {
} }
} }
func (self *FontList) next(delta int, allow_wrapping bool) { func (self *FontList) next(delta int, allow_wrapping bool) error {
if self.family_list.Next(delta, allow_wrapping) { if self.family_list.Next(delta, allow_wrapping) {
self.handler.draw_screen() return self.handler.draw_screen()
} else {
self.handler.lp.Beep()
} }
self.handler.lp.Beep()
return nil
} }
func (self *FontList) on_key_event(event *loop.KeyEvent) (err error) { func (self *FontList) on_key_event(event *loop.KeyEvent) (err error) {
@@ -265,30 +269,28 @@ func (self *FontList) on_key_event(event *loop.KeyEvent) (err error) {
} }
ev := event ev := event
if ev.MatchesPressOrRepeat("down") { if ev.MatchesPressOrRepeat("down") {
self.next(1, true)
ev.Handled = true ev.Handled = true
return nil return self.next(1, true)
} }
if ev.MatchesPressOrRepeat("up") { if ev.MatchesPressOrRepeat("up") {
self.next(-1, true)
ev.Handled = true ev.Handled = true
return nil return self.next(-1, true)
} }
if ev.MatchesPressOrRepeat("page_down") { if ev.MatchesPressOrRepeat("page_down") {
ev.Handled = true ev.Handled = true
sz, err := self.handler.lp.ScreenSize() sz, err := self.handler.lp.ScreenSize()
if err == nil { if err == nil {
self.next(int(sz.HeightCells)-3, false) err = self.next(int(sz.HeightCells)-3, false)
} }
return nil return err
} }
if ev.MatchesPressOrRepeat("page_up") { if ev.MatchesPressOrRepeat("page_up") {
ev.Handled = true ev.Handled = true
sz, err := self.handler.lp.ScreenSize() sz, err := self.handler.lp.ScreenSize()
if err == nil { if err == nil {
self.next(3-int(sz.HeightCells), false) err = self.next(3-int(sz.HeightCells), false)
} }
return nil return err
} }
if err = self.rl.OnKeyEvent(event); err != nil { if err = self.rl.OnKeyEvent(event); err != nil {