I wish I had my old log setup for the source side. We'll get there.
GYAC2MUOXZZKO5CKVXRS7YZLULNRNJMEHFT3WPWKV6O3HREELIOQC
schema1_of_y = function(editor, y)
-- return line/pos of screen line starting near a given y offset,
-- and the (negative) offset remaining after the calculation
-- invariants:
-- - 0 >= y_offset >= -Line_height
-- - let loc, y_offset = schema1_of_y(pane, y)
-- y + y_offset == y_of_schema1(pane, loc)
assert(y >= 0)
local y_offset = y
for i=1,#editor.lines do
Text.populate_screen_line_starting_pos(editor, i)
local height = line_height(editor, i)
if y_offset < height then
local line = editor.lines[i]
local nlines = math.floor(y_offset/editor.line_height)
assert(nlines >= 0 and nlines < #editor.line_cache[i].screen_line_starting_pos)
local pos = editor.line_cache[i].screen_line_starting_pos[nlines+1] -- switch to 1-indexing
y_offset = y_offset - nlines*editor.line_height
return {line=i, pos=pos}, -y_offset
end
y_offset = y_offset - height
end
-- y is below the pane
return {line=#editor.lines+1, pos=1}, y_offset -- positive value
end
{"Surface":422,"tick_spec":660,"mouse_cursor":558,"on.draw":565,"vy":546,"Viewport":604,"set_mouse_cursor":562,"draw_ticks":663,"Manifest":494,"on.mouse_release":554,"load_manifest":496,"order_of_magnitude":573,"get_manifest":497,"approximate":579,"Page":475,"get_definition_from_app":624,"Definitions":503,"update_editor_box":570,"reset_manifest_navigator":621,"approximate_up":658,"scale":7,"schema1_of_y":667,"on.update":561,"box_height":345,"compute_layout":385,"on.code_change":306,"parent":666,"initialize_editor":450,"Menu_background_color":611,"Menu_border_color":612,"Menu_command_color":613,"Menu_highlight_color":614,"draw_menu_bar":641,"add_hotkey_to_menu":616,"draw_manifest_navigator":618,"num_lines_for_manifest_navigator":619,"manifest_navigator_up":628,"manifest_navigator_down":635,"on":1,"font":353,"delete_definition":631,"draw_cursor":639,"line_height":365,"keychord_press_on_manifest_navigator":633,"Manifest_navigator":495,"text_input_on_manifest_navigator":634,"move_candidate_to_front_of_manifest":632,"maybe_update_key_in_definitions":529,"manifest_coord":636,"on_handle":547,"manifest_index":637,"A":507,"manifest_navigator_candidates":638,"on.keychord_press":666,"on_text":539,"add_def_to_menu":640,"on.text_input":521,"on.mouse_press":617,"copy_shape":396,"y_of_schema1":364,"sx":544,"on.initialize":506,"vx":545,"sy":469,"Mouse_cursor":559,"Ticks_font":594,"Cursor_node":172,"B":379,"on.key_release":552,"new_definition":504,"load_from_iterator":623,"add_thick_line":400}