diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 00000000..ba466151 --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,45 @@ +A simple documentation to navige through the C files: + +* `src/bin/about.c` handles the About widget +* `src/bin/col.c` is about the colors handled by the terminal +* `src/bin/config.c`: how the configuration is saved/loaded/updated +* `src/bin/controls.c`: the widget when a right-click is done on a terminal +* `src/bin/dbus.c`: all the D-Bus interactions +* `src/bin/extns.c` lists file extensions supported +* `src/bin/gravatar.c` hosts the code to show a Gravatar when hovering an email address +* `src/bin/ipc.c`: various IPC functions +* `src/bin/keyin.c`: handles key input +* `src/bin/main.c` host the main() function: setup/shutdown code +* `src/bin/media.c` handles media interactions like image popups, inlining movies +* `src/bin/miniview.c`: the miniview of the history +* `src/bin/options.c`: the settings widget +* `src/bin/options_behavior.c`: the settings panel that handles the Behaviors +* `src/bin/options_colors.c`: the settings panel about colors in the terminal +* `src/bin/options_elm.c`: the settings panel to configure Elementary +* `src/bin/options_font.c`: the settings panel to choose the Font +* `src/bin/options_helpers.c`: the settings panel on Helpers +* `src/bin/options_keys.c`: the settings panel to configure key bindings +* `src/bin/options_theme.c`: the settings panel to choose a theme +* `src/bin/options_themepv.c`: the widget that handles theme previews +* `src/bin/options_video.c`: the settings panel to configure video rendering +* `src/bin/options_wallpaper.c`: the settings panel to configure a wallpaper +* `src/bin/sel.c`: the tab selector +* `src/bin/termcmd.c` handles custom terminology commands +* `src/bin/termio.c`: the core term widget with the textgrid +* `src/bin/termiolink.c`: link detection in the terminal +* `src/bin/termpty.c`: the PTY interaction +* `src/bin/termptydbl.c`: code to hande double-width characters +* `src/bin/termptyesc.c`: escape codes parsing +* `src/bin/termptyext.c`: extented terminology escape handling +* `src/bin/termptygfx.c`: charset translations +* `src/bin/termptyops.c`: handling history +* `src/bin/termptysave.c`: compression of the backlog +* `src/bin/tyalpha.c`: the `tyalpha` tool +* `src/bin/tybg.c`: the `tybg` tool +* `src/bin/tycat.c`: the `tycat` tool +* `src/bin/tyls.c`: the `tyls` tool +* `src/bin/typop.c`: the `typop` tool +* `src/bin/tyq.c`: the `tyq` tool +* `src/bin/utf8.c`: handles conversion between Eina_Unicode and char * +* `src/bin/utils.c`: small utilitarian functions +* `src/bin/win.c`: handles the windows, splits, tabs diff --git a/src/bin/win.c b/src/bin/win.c index a17643c0..a674922d 100644 --- a/src/bin/win.c +++ b/src/bin/win.c @@ -15,6 +15,31 @@ #include "controls.h" #include "term_container.h" + +/** + * Design: + * A terminal widget is Term. It hosts various Evas_Object, like a `termio` + * handling the textgrid. + * It is hosted in a Term_Container of type Solo. + * On Term_Container: + * It is a generic structure with a set of function pointers. It is a simple + * way to objectify and have genericity between a Window, a Split or Tabs. + * Solo, Win, Split, Tabs have a Term_Container as their first field and thus + * can be casted to Term_Container to have access to those APIs. + * + * Solo is the simplest container, hosting just a Term. + * Win is a window and has only one container child. + * Split is a widget to separate an area of the screen in 2 and thus has 2 + * children that can be either Solo or Tabs. + * Tabs is a Term_Container containing many containers (at the moment, only + * Solo ones) and have a system of tabs. + * + * All the windows are in the `wins` list. + */ + + + + /* specific log domain to help debug only terminal code parser */ int _win_log_dom = -1;