** Usable - [X] Decorations api (just for statusline) - [X] web.schedule - [X] Create view with html (web.view.set_html()) - [X] Expose JS <-> lua in page (web.view.expose()) - [-] Tests for api - [ ] Run JS in page (web.view.eval_js()) - [ ] web.decorations.*.set_size() - [ ] f-key navigation - [ ] Fullscreen - [ ] Zoom in/out - [ ] Use table for all internals api options? - [ ] Generate docs for api ** Bugs - [ ] Managing focus in decorations? - [ ] INVESTIGATE: Check why urlchanged doesnt fire for first url open sometimes - [ ] INVESTIGATE: Segfault on close sometimes - [ ] API's don't validate types. (type conversion segfaults) - [ ] web.view apis in `-e` flag from "clients" (non-servers calls) don't work ** Next - [ ] Permission management (list/allow/deny) lua api - [ ] Tests for window - [ ] More tests for stack - [ ] Tests for router - [ ] Read page contents via lua - [ ] User data/profiles management - [ ] Create window with new profile - [ ] Configuration validation - [ ] web.win.* apis (list, current_id) - [ ] Allow toggling devtools - [X] Set search text as the user is typing (dmenu -r) - [ ] Log stdout, errors and results from lua somewhere - [ ] 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 - [ ] Private window (in-memory profile) ** Later - [ ] Bookmarking - [ ] User scripts (greasemonkey?) - [ ] User stylesheets (per site and global?) - [ ] Support multiple modes for keymap.set: `web.keymap.set({'n','i'}, ...)` - [ ] static linking for qt - [X] vendor web.inspect with build - [ ] Right click context menu items - [ ] Listen to renderprocesstermination signal - [ ] Change instance manager command format ** Later later - [ ] Custom file picker - [ ] remote debugging with cdp (spider-repl) ** Maybe - [ ] Floating webviews? - [ ] Move modal keymap management into lua? ** Notes - view = 0, nil, none: Current view - 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.view.set_url(url) -- Set url for current view web.view.set_url(url, { view = 1 }) -- Set url for view 1 web.view.set_url(url, { view = 1, win = 1 }) -- Set url for view 1 in win 1 web.view.set_url(url, { win = 1 }) -- Set url for current view in win 1 web.view.create(url, { win = 1 }) -- New view in win 1 web.view.create(url) -- New view in current window web.view.close({ view = 1 }) -- Close view 1 web.view.close() -- Close current view in current window web.view.list({ win = nil }) -- List all tabs web.view.list({ win = 1 }) -- List win 1 tabs web.view.select({ view = 1, win = 1 }) -- Select win 1 view web.view.select({ view = 1, win = 0 }) -- Select view 1 in current window web.view.select({ view = 1 }) -- Select view 1 web.view.current({ win = 1 }) -- Current view in win 1 web.view.current() -- Current view in current win web.history.back(1) -- Back for current view in current window web.history.back(1, { view = 1 }) -- Back for view 1 web.history.back(1, { win = 1 }) -- Back for current view in win 1 web.keymap.set('n', '', ..., { view = 1 }) -- Set keymap for view 1 web.keymap.set('n', '', ..., { win = 1 }) -- Set keymap for win 1 web.opt.new_tab_url = 'https://duckduckgo.com' -- Search api web.search.set_search_text('whatever') web.search.next() web.search.prev() web.search.get_search_text() web.search.current() web.search.total() web.decorations.top.enable() web.decorations.top.disable() web.decorations.top.set_size(20) local view_id = web.decorations.top.view() web.view.set_html('
Hello world
', { view = view }) web.decorations.top.destroy() -- Maybe to destroy unwanted webviews -- Show tabs in top decoration web.view.expose_js('openTab', function(tabId) web.view.select({ view = tabId }) end, { view = web.decorations.top.view() }) web.event.add_listener({ 'TabOpen', 'TabClose' }, { callback = function() local tabs_html = '' local views = web.view.list() for index, view in ipairs(web.view.list()) do local text = index..': '..view.title..' ('..view.url..')' local tab = '' .. text .. '') tabs_html = tabs_html .. tab end web.view.set_html(tabs_html, { view = web.decorations.top.view() }) end, }) #+end_src