** Current - [X] Process spawning lua (+ stdio) - [X] Keybindings (lua api) - [X] Modal keys - [X] event loop for async work - [X] example: trigger dmenu for simple selection - [X] Fix segfault on quit - [X] Tab history navigation - [X] Tab next/prev - [X] Get tab list api - [X] Assign ID to each tab (reference in lua api) - [X] Tab select by id - [X] Multi-window - [X] New window on new window request - [X] Socket for opening window in current session (lua eval) - [X] Config loading and lua path - [X] Events/autocommands - [X] Url changed event - [X] History storage - [X] History completion - [X] Close window if last tab closed - [ ] Rename terms: webview/tab to page? (also web.tabs) - [ ] Configuration lua api - [ ] Switch to __internals - [ ] Respect cli args for main window - [ ] Tests for api - [ ] Log stdout, errors and results from lua somewhere - [ ] Downloading/download path config - [ ] Run JS in page - [ ] Segfault on close ** Next - [ ] Search text in page - [ ] Dev tools - [ ] Fullscreen - [ ] Zoom in/out - [ ] Permission requests handling/persisting - [ ] window.opener controls (use createWindow api directly?) - [ ] Notifications - [ ] Conflict in keymap (keymap already exists) - [ ] Allow pattern filtering for event listeners - [ ] Allow tab_id, win_id filtering for event listeners - [ ] Handle resource cleanup + signal disconnecting - [ ] Open url sanitize/humanize (add protocol if missing, remove quotes, etc) - [ ] static linking for qt - [X] static linking for libluv - [ ] User scripts (greasemonkey?) - [ ] User stylesheets (per site and global?) - [ ] Bookmarking ** Later - [ ] Support multiple modes for keymap.set: `web.keymap.set({'n','i'}, ...)` - [ ] Read page contents via lua - [ ] `web.to_string`: like vim.inspect - [X] Update window title on current webview title change ** Later later - [ ] Custom file picker - [ ] remote debugging with cdp (spider-repl) ** Maybe - [ ] Floating webviews? - [ ] Move modal keymap management into lua? ** Notes - Tab = 0, nil, none: Current tab - Win = 0: Current window - Win = nil, none: All windows or current window based on operation - Keep track of last focused window (current window is last focused) #+begin_src lua web.tab.set_url(url) -- Set url for current tab web.tab.set_url(url, { tab = 1 }) -- Set url for tab 1 web.tab.set_url(url, { tab = 1, win = 1 }) -- Set url for tab 1 in win 1 web.tab.set_url(url, { win = 1 }) -- Set url for current tab in win 1 web.tab.new(url, { win = 1 }) -- New tab in win 1 web.tab.new(url) -- New tab in current window web.tab.close({ tab = 1 }) -- Close tab 1 web.tab.close() -- Close current tab in current window web.tab.list({ win = nil }) -- List all tabs web.tab.list({ win = 1 }) -- List win 1 tabs web.tab.select({ tab = 1, win = 1 }) -- Select win 1 tab web.tab.select({ tab = 1, win = 0 }) -- Select tab 1 in current window web.tab.select({ tab = 1 }) -- Select tab 1 web.tab.current({ win = 1 }) -- Current tab in win 1 web.tab.current() -- Current tab in current win web.history.back(1) -- Back for current tab in current window web.history.back(1, { tab = 1 }) -- Back for tab 1 web.history.back(1, { win = 1 }) -- Back for current tab in win 1 web.keymap.set('n', '', ..., { tab = 1 }) -- Set keymap for tab 1 web.keymap.set('n', '', ..., { win = 1 }) -- Set keymap for win 1 web.opt.new_tab_url = 'https://duckduckgo.com' #+end_src