what if ... a web browser, but tabs were more like emacs buffers? buffer attributes: - url - viewport (this is a departure from the emacs buffer) ## commands A command is a description of a function that may be invoked interactively, and the parameters it expects. ```fennel (define-command "visit-location" visit-location {:url Type.Url input-from-minibuffer}) ;; hit "g" and then enter the location in the minibuffer (bind-key "g" (command "visit-location")) ;; hit "h" to go straight to your home page (bind-key "h" (command "visit-location") {:url (Type.Url "https://home.example.com")}) ;; left mouse click on minibuffer hit "h" to go straight to your home page (bind-event Dunlin.minibuffer :button-1-click (command "visit-location")) ``` when it is run from the command prompt, each parameter is prompted, with appropriate defaults. when it is bound to a key chord/sequence, the binding may specify where it gets its parameters from - otherise visit-location visit-location-in-new-buffer run-command back switch-to-buffer save-file save-link ## objects/data types buffer Buffer.find ;; by name, title, url Buffer.by_name (maybe?) buffer has-a webview but it is not shown by default. Later we may add some kind of webview reuse so that invisible and old buffers don't need to have a webview until needed. frame Frame.the-frame frame.set-buffer (buffer) frame.get-buffer => buffer frame.commander - text entry widget frame.actions - container of toolbar buttons location (url) document document element(?) webview lua's standard types # getting started gtk stuffz for frame/commander/initial buffer command parser hooked to commander visit-location command