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