Something weird was happening with keeping a global interface
tcell.Screen. Instead, decided to keep a global pointer to interface
*tcell.Screen. I suspect the Go compiler did not see that screen
was supposed to escape to the heap, and so it was kept as a main()
function-scope variable.
Previously, the editor would panic at any error. After I recently
implemented dialogs, I changed all panics to create error dialogs,
instead. This will make the editor more stable.
I ran pprof to find what was causing stuttering, and found it to be the
getTabCountInLineAtCol function in TextEdit, because it was iterating
many bytes of the buffer, for each rune rendered. Replaced it with a more
optimal system. Also changed the architecture of the highlighting system
to use a single RegexpRange structure for all regular expressions. This
allows for optimizations and multiline matches in the future.