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
|
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
# Weaver
*Your Web, Your Way*
Weaver is user friendly web browser, but it's selective about who it calls a friend.
Weaver's friends like customizing their tools, know how to write scripts, and enjoy finding ways to make their favorite tools work together.
Weaver is a web browser controlled primarily by commands over a unix socket.
Weaver acts as both the server and the client for the socket allowing you to use the same command to start the socket server and to send commands.
Weaver is designed to not step on other utility's toes.
Weaver is not a window manager, you should already have one of those.
Weaver is not an adblocker, you have one already at /etc/hosts.
Weaver is not a shortcut manager, you can make one with a couple lines of shell script (or use the provided example).
Weaver *is* designed to play well with others.
Weaver examples frequently use dmenu for user input.
This is for exmaple purposes only.
A wide range of text input programs could be used similarly including interrobang, rofi, or - of course - your shell.
It's entirely up to you.
You can even control weaver on your media center PC from your laptop by sending commands over ssh.
## Running
weaver
With no arguments, weaver starts the server to listen for connections.
weaver <cmd> [args ...]
With arguments, weaver sends commands to a running weaver server.
## Commands
All commands can be invoked by their first letter alone or any shortened form; only the first character is interpreted.
`back` :| Go back one page in the history of the current window
`Back` :| Go back to the first page in the history of the current window
`delete` :| Close the currently focused window
`forward` :| Go forward one page in the history of the current window
`Forward` :| Go forward to the last page in the history of the current window
`go <coords>` :| Scroll the current page by 'coordinates' relative to the current position; 'coords' can be a single integer for vertical scrolling or an X,Y pair
`Go <coords>` :| Scroll the current page to 'coords'
`open <url>` :| Open the specified url in the current window
`Open <url>` :| Open the specified url in a new window
`ping`, `Ping` :| Return "Pong" if the server is running
`quit`, `Quit` :| Close all windows and shut down the server
`reload` :| Reload the current page
`Reload` :| Reload the current page bypassing the cache
`search <phrase>` :| Search the currently focused window for 'phrase'; pass no argument to end the previous search and clear the highlighting of matches
`Search` :| Repeat the last search / find the next occurrence of the previously searched 'phrase'
`title` :| Return the title of the currently focused window
`Titles` :| Return a list of titles of all weaver windows
`url` :| Return the url of the currently focused window
`Urls` :| Return a list of urls open in all weaver windows
`window` :| Return a tab separated pair of title and url of the currently focused window
`Windows` :| Return a newline-delineated list of tab separated pairs of titles and urls of all weaver windows
`zoom <value>` :| Zoom the currently focused window by 'value' (e.g., multiply the current zoom factor by 'value')
`Zoom <value>` :| Zoom the currently focused window to 'value' (e.g., set the zoom factor to 'value')
## Todo
1. Code cleanup:
- Sort Qt includes into .h vs .cpp as most appropriate
- Determine and implement reasonable sorting of functions in .cpp files (they're a total mess right now)
- Add comments on likely user-modifiable compile-time options (e.g., UserAgent, etc)
1. Determine if profile needs to be explicitly destroyed/deleted on shutdown to flush to disk
1. Fullscreen via signal QWebEnginePage::fullScreenRequested
1. Downloads via signal QWebEnginePage::downloadRequested
1. Create man page - likely based largely on this wiki page
1. Make a release candidate and AUR package
1. Create a "hacking" guide. Most user patching / hacking would likely be isolated to webengine.{h,cpp}
- WebView::init() for general configurations
- WebView::command() and/or WebView::doCommand() for key bindings and actions
1. Pdf links ... and other filetypes?
1. Prepare 1.0 release
1. Allow alternative browser profiles
1. Implement a private "incognito" profile mode
1. Cookie management commands? Or just direct users to the Cookie database in the profile which can already be edited with sqlite3?
1. Webkit backend (very low priority)
|