aboutsummaryrefslogtreecommitdiff
path: root/TODO.org
blob: bb9e51b22abde066011c32a1952fd529d328b48c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
** 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
- [ ] New window on new window request
- [ ] Socket for opening window in current session (lua eval)
- [ ] Events/autocommands
- [ ] History storage
- [ ] History completion
- [ ] Log stdout, errors and results from lua somewhere
- [ ] Handle resource cleanup + signal disconnecting

** Next
- [ ] Config loading and runtime path
- [ ] Conflict in keymap (keymap already exists)
- [ ] Open url sanitize/humanize (add protocol if missing, remove quotes, etc)
- [ ] Bookmarking
- [ ] Downloading
- [ ] Get static linking for qt and libluv working

** Later
- [ ] Support multiple modes for keymap.set: `web.keymap.set({'n','i'}, ...)`
- [ ] Search text in page
- [ ] Notifications
- [ ] Dev tools
- [ ] Permission requests handling
- [ ] Pipe page contents to external program
- [ ] `web.inspect`
- [ ] Update window title on current webview title change

** Later later
- [ ] Fullscreen
- [ ] 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', '<c-r>', ..., { tab = 1 }) -- Set keymap for tab 1
web.keymap.set('n', '<c-r>', ..., { win = 1 }) -- Set keymap for win 1
#+end_src