aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index 9c9c50d7..1c1397d0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -85,6 +85,80 @@ fn main() {
// Load command line options
let options = cli::Options::load();
+ // Run alacritty
+ run(config, options);
+}
+
+/// Run Alacritty
+///
+/// Currently, these operations take place in this order.
+/// 1. create a window
+/// 2. create font rasterizer
+/// 3. create quad renderer
+/// 4. create glyph cache
+/// 5. resize window/renderer using info from glyph cache / rasterizer
+/// 6. create a pty
+/// 7. create the terminal
+/// 8. set resize callback on the window
+/// 9. create event loop
+/// 10. create display
+/// 11. create input processor
+/// 12. create config reloader
+/// 13. enter main loop
+///
+/// Observations:
+/// * The window + quad renderer + glyph cache and display are closely
+/// related Actually, probably include the input processor as well.
+/// The resize callback can be lumped in there and that resize step.
+/// Rasterizer as well. Maybe we can lump *all* of this into the
+/// `Display`.
+/// * the pty and event loop closely related
+/// * The term bridges the display and pty
+/// * Main loop currently manages input, config reload events, drawing, and
+/// exiting
+///
+/// It would be *really* great if this could read more like
+///
+/// ```ignore
+/// let display = Display::new(args..);
+/// let pty = Pty::new(display.size());
+/// let term = Arc::new(Term::new(display.size());
+/// let io_loop = Loop::new(Pty::new(display.size()), term.clone());
+/// let config_reloader = config::Monitor::new(&config);
+///
+/// loop {
+/// force_draw = false;
+/// // Wait for something to happen
+/// processor.process_events(&display);
+///
+/// // Handle config reloads
+/// if let Ok(config) = config_rx.try_recv() {
+/// force_draw = true;
+/// display.update_config(&config);
+/// processor.update_config(&config);
+/// }
+///
+/// // Maybe draw the terminal
+/// let terminal = terminal.lock();
+/// signal_flag.set(false);
+/// if force_draw || terminal.dirty {
+/// display.draw(terminal, &config);
+/// drop(terminal);
+/// display.swap_buffers();
+/// }
+///
+/// // Begin shutdown if the flag was raised.
+/// if process_should_exit() {
+/// break;
+/// }
+/// }
+/// ```
+///
+/// instead of the 200 line monster it currently is.
+///
+fn run(config: Config, options: cli::Options) {
+
+
// Extract some properties from config
let font = config.font();
let dpi = config.dpi();