I've been only thinking about up arrow when cursor is at top of screen. Hopefully this is better.
SVJZZDC3K6AKAXHGRNAZKRE2ZXEKJANNLG7LSSUZJARFBL5F7C4AC RCDVDFJQIHP3F3EGJLBPPMDKD6RR33AO3W3QZ2V5EZNFBDOW6XMQC C42QQZSFFGU6DZ73MCPGYZJQ675YTMEOJAPQLHKRJLWQH5GMWHMQC XNFTJHC4QSHNSIWNN7K6QZEZ37GTQYKHS4EPNSVPQCUSWREROGIQC MGT5FTJ35MGYCQO3TZVK3RYUIN5YX475R4XG7RO42SYLYF4AIKFAC BULPIBEGL7TMK6CVIE7IS7WGAHGOSUJBGJSFQK542MOWGHP2ADQQC DLQMM2656JHXX3ONOEM6UIOXKFJFT5QT7RHWK7YS2W77PVZWHRSAC HYEAFRZ2UEKDYTAE2GDQLHEJBPQASP2NDLMXB7F6MTVK2BKOXKEAC BJ5X5O4ACBBJ56LRBBSTCW6IBQP4HAEOOOPNH3SKTA4F66YTOIDAC AVQ5MC5DWNLI6LUUIPGBLGP4LKRPGWBY4THNY25OBT2FAVHC6MCAC OTIBCAUJ3KDQJLVDN3A536DLZGNRYMGJLORZVR3WLCGXGO6UGO6AC JCSLDGAH2F6AIY4Z6XM6K4LOMW7EFY3E4NF5YXLMHLTYTX3A4Z3QC A2QPFRFJNWDHBYRRLJFBK5BOTOWXDT5DYCKHRRKVBZNDA4NE3CHQC WLHI7KD3LJTQH6V7RLVJWGZUR4YQK6LN4OIUMIN45BGMMQGN6RNQC 2FBLO5FHINYONP5ETPEL4GIPUXKVXKPUL4Q5EKU5K2GHGSL3ODBQC 2C7CTIQYDDYVQJNKX2OSHZ6VMAMPOGNUVTSFAUV7HQCPMZR2YRUAC PWHZPJJM7UZW2VILT5TZBDZHIXXXBASVSBQB3A5EEMOFJTI6ADYAC LUNH47XXUUITDLE6NBI3J7GJQWQ45OQAGXY2HJI4HRPOR2GUULPAC 2KRK3OBVPHQIDGCH2FBTP2AXKPEXS3OEPLBKU7UWCLKQA4MANGSAC Top_screen_line_starting_pos = screen_line_starting_pos
print('previous screen line starts at '..tostring(screen_line_starting_pos)..' of its line')if Screen_top_line == Cursor_line and Top_screen_line_starting_pos == screen_line_starting_pos thenTop_screen_line_starting_pos = screen_line_starting_posend
Top_screen_line_starting_pos = Lines[Cursor_line].screen_line_starting_pos[screen_line_index-1]local s = string.sub(Lines[Cursor_line].data, Top_screen_line_starting_pos)Cursor_pos = Text.nearest_cursor_pos(s, Cursor_x)
new_screen_line_starting_pos = Lines[Cursor_line].screen_line_starting_pos[screen_line_index-1]print('switching pos of screen line at cursor from '..tostring(screen_line_starting_pos)..' to '..tostring(new_screen_line_starting_pos))if Screen_top_line == Cursor_line and Top_screen_line_starting_pos == screen_line_starting_pos thenTop_screen_line_starting_pos = new_screen_line_starting_posprint('also setting pos of top of screen to '..tostring(Top_screen_line_starting_pos))endlocal s = string.sub(Lines[Cursor_line].data, new_screen_line_starting_pos)Cursor_pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(s, Cursor_x) - 1print('cursor pos is now '..tostring(Cursor_pos))
endendendfunction Text.pos_at_start_of_cursor_screen_line()if Lines[Cursor_line].screen_line_starting_pos == nil thenreturn 1,1endfor i=#Lines[Cursor_line].screen_line_starting_pos,1,-1 dolocal spos = Lines[Cursor_line].screen_line_starting_pos[i]if spos <= Cursor_pos thenreturn i,spos
love.window.setMode(0, 0) -- maximizeScreen_width, Screen_height, Screen_flags = love.window.getMode()-- shrink slightly to account for window decorationScreen_width = Screen_width-100Screen_height = Screen_height-100
--? love.window.setMode(0, 0) -- maximize--? Screen_width, Screen_height, Screen_flags = love.window.getMode()--? -- shrink slightly to account for window decoration--? Screen_width = Screen_width-100--? Screen_height = Screen_height-100Screen_width = 120Screen_height = 200