URI: 
       NOTES - ltkx - GUI toolkit for X11 (old)
  HTML git clone git://lumidify.org/ltkx.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/ltkx.git (encrypted, but very slow)
  HTML git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltkx.git (over tor)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       NOTES (2387B)
       ---
            1 Maybe use XCheckWindowEvent? - this would eliminate need for hash (could just store window ids in array)
            2 -> Is it okay to block until event found? Loading bars, etc. should still work since control is in another
            3    function (or even thread?) which has to call ltk_update_progress_bar or something similar.
            4 HarfBuzz - need to add option to LTK functions to allow user to choose language system manually
            5 LtkTextSegment - just use array instead of linked list - just need to get actual number of glyphs in advance from hb
            6 Add void* to LtkWidget to hold specific widget instead of doing weird casts to simulate OOP
            7 When the screen size is set differently by the window manager on startup, the original drawing stays on screen - any way to fix this?
            8 Change list of windows to simple array or binary search tree - hash overkill since there usually won't be too many windows
            9   -> maybe optimize for common case of one window so no need to search at all
           10 Fribidi - needs to be run on entire paragraph first; line breaking later - needs to take paragraph dir into account
           11 Should widgets be reference-counted?
           12 
           13 Ideas for text editor:
           14 https://en.wikipedia.org/wiki/Rope_(computer_science)
           15 https://en.wikipedia.org/wiki/Piece_table
           16 https://en.wikipedia.org/wiki/Gap_buffer
           17 LtkTextLine should be abstracted out to be a generic
           18 rope or gap buffer with the glyphs for the characters
           19 also included at all times so they don't get out of
           20 sync. The rendering function for LtkTextLine doesn't
           21 need to know about shaping or anything - different
           22 functions for actually rendering the glyphs just return
           23 an abstract LtkTextLine that can be rendered without
           24 caring about such details. This would easily allow
           25 one file for shaping with harfbuzz, one for just
           26 using the regular kerning with stb_truetype, etc.
           27 
           28 Text editor tags (highlight, etc.) - just store in
           29 linked list or something similar in sorted order;
           30 when looping over characters to draw them, keep a
           31 pointer to the current tag, then change it to the
           32 next one if the end of its bound comes
           33 
           34 Create a version of ltk_fatal that exits the actual program
           35 and creates a "failsafe" error window (just using basic
           36 XDrawString, etc.) to show errors (like index out of bounds,
           37 etc.). Still print the error, of course, in case creating
           38 a window doesn't work.
           39 
           40 Idea: Make interface primarily key-driven; store keybindings
           41 in config so they can easily be configured