Code to get specs from options

This commit is contained in:
Kovid Goyal
2024-05-11 15:38:44 +05:30
parent e51a1362ca
commit 3c18d20d1b
5 changed files with 128 additions and 14 deletions

View File

@@ -5,12 +5,13 @@ import json
import string
import sys
import tempfile
from typing import Any, Dict, Tuple, TypedDict
from typing import Any, Dict, Literal, Tuple, TypedDict
from kitty.cli import create_default_opts
from kitty.conf.utils import to_color
from kitty.constants import kitten_exe
from kitty.fonts import Descriptor
from kitty.fonts.common import face_from_descriptor, get_font_files, get_variable_data_for_descriptor
from kitty.fonts.common import face_from_descriptor, get_font_files, get_variable_data_for_descriptor, spec_for_descriptor
from kitty.fonts.list import create_family_groups
from kitty.fonts.render import display_bitmap
from kitty.options.types import Options
@@ -95,13 +96,31 @@ def render_family_sample(
return ans
OptNames = Literal['font_family', 'bold_font', 'italic_font', 'bold_italic_font']
ResolvedFace = Dict[Literal['family', 'spec'], str]
def resolved_faces(opts: Options) -> Dict[OptNames, ResolvedFace]:
font_files = get_font_files(opts)
ans: Dict[OptNames, ResolvedFace] = {}
def d(key: Literal['medium', 'bold', 'italic', 'bi'], opt_name: OptNames) -> None:
descriptor = font_files[key]
ans[opt_name] = {'family': descriptor['family'], 'spec': spec_for_descriptor(descriptor)}
d('medium', 'font_family')
d('bold', 'bold_font')
d('italic', 'italic_font')
d('bi', 'bold_italic_font')
return ans
def main() -> None:
cache: Dict[FaceKey, str] = {}
for line in sys.stdin.buffer:
cmd = json.loads(line)
action = cmd.get('action', '')
if action == 'list_monospaced_fonts':
send_to_kitten(create_family_groups())
opts = create_default_opts()
send_to_kitten({'fonts': create_family_groups(), 'resolved_faces': resolved_faces(opts)})
elif action == 'read_variable_data':
ans = []
for descriptor in cmd['descriptors']:

View File

@@ -142,6 +142,16 @@ func (self *FamilyList) Lines(num_rows int) []Line {
return ans
}
func (self *FamilyList) SelectFamily(family string) bool {
for i, f := range self.families {
if f == family {
self.current_idx = i
return true
}
}
return false
}
func (self *FamilyList) CurrentFamily() string {
if self.current_idx >= 0 && self.current_idx < len(self.families) {
return self.families[self.current_idx]

View File

@@ -69,6 +69,23 @@ type VariableData struct {
Multi_axis_styles []MultiAxisStyle `json:"multi_axis_styles"`
}
type ResolvedFace struct {
Family string `json:"family"`
Spec string `json:"spec"`
}
type ResolvedFaces struct {
Font_family ResolvedFace `json:"font_family"`
Bold_font ResolvedFace `json:"bold_font"`
Italic_font ResolvedFace `json:"italic_font"`
Bold_italic_font ResolvedFace `json:"bold_italic_font"`
}
type ListResult struct {
Fonts map[string][]ListedFont `json:"fonts"`
Resolved_faces ResolvedFaces `json:"resolved_faces"`
}
var variable_data_cache map[string]VariableData
var variable_data_cache_mutex sync.Mutex

View File

@@ -35,7 +35,6 @@ type TextStyle struct {
type handler struct {
lp *loop.Loop
fonts map[string][]ListedFont
state State
err_mutex sync.Mutex
err_in_worker_thread error
@@ -46,9 +45,11 @@ type handler struct {
graphics_manager graphics_manager
// Listing
rl *readline.Readline
family_list FamilyList
variable_data_requested_for *utils.Set[string]
rl *readline.Readline
family_list FamilyList
variable_data_requested_for *utils.Set[string]
fonts map[string][]ListedFont
resolved_faces_from_kitty_conf ResolvedFaces
}
func (h *handler) set_worker_error(err error) {
@@ -279,7 +280,10 @@ func (h *handler) initialize() {
initialize_variable_data_cache()
h.graphics_manager.initialize(h.lp)
go func() {
h.set_worker_error(kitty_font_backend.query("list_monospaced_fonts", nil, &h.fonts))
var r ListResult
h.set_worker_error(kitty_font_backend.query("list_monospaced_fonts", nil, &r))
h.fonts = r.Fonts
h.resolved_faces_from_kitty_conf = r.Resolved_faces
h.lp.WakeupMainThread()
}()
}
@@ -351,7 +355,7 @@ func (h *handler) on_wakeup() (err error) {
case SCANNING_FAMILIES:
h.state = LISTING_FAMILIES
h.family_list.UpdateFamilies(utils.StableSortWithKey(utils.Keys(h.fonts), strings.ToLower))
case LISTING_FAMILIES:
h.family_list.SelectFamily(h.resolved_faces_from_kitty_conf.Font_family.Family)
}
return h.draw_screen()
}