Before 0.1 ========== - Check BUGS - Docs - Manpage - Website - FAQ - Tests for URL detection and fix corner cases - Maybe test under other platforms - Autosave feature (against segfaults/...) - Save tabs feature - More dwb keybindings - Use :open engine searchterm syntax for searching - ssl-strict=ask - Use argparse and do something like click for command arguments, then we can have flags etc. - Implement some optional stuff from http://greenbytes.de/tech/tc2231/ (especially filename with Content-Disposition: inline) New big features ================ - Per domain settings - RequestPolicy - Plugin architecture Adblock? RequestPolicy Ghostery/Disconnect? NoScript Certificate Patrol https://chrome.google.com/webstore/detail/remove-google-redirects/ccenmflbeofaceccfhhggbagkblihpoh - session handling / saving - multi window (see notes) - IPC, like dwb -x (see notes) - Bookmarks - Internationalization - more completions (URLs, ...) - proper webpage history Improvements / minor features ============================= - SSL-symbol in statusbar? - Commandline argument to delete config - Settings dialog - Reimplement tabbar to paint it by ourselves to look like dwb - Save cookies in Netscape format so it can be used by wget. (see notes) - Zoom with ctrl + mousewheel - search highlighting - vertical tabbar - reload config command - config changed signals for sections (optimization) - Display metavars for commands in input bar. - count support for special keys - set-as-default argument/command (to set qute as system default browser) - Enable disk caching (see notes) - clear cookies command - keybind/aliases should have completion for commands/arguments - Hiding scrollbars - Ctrl+A/X to increase/decrease last number in URL - Add more element-selection-detection code (with options?) (see notes) - somehow unfocus elements (hide blinking cursor) when insert mode is left? - tabs: some more padding? - Copy link location on crash mail should not copy mailto: - Drag&Drop of tabs to other windows - Use QNetworkAccessManager per QWebPage again so we can set proxy per tab. - Multi-line statusbar or own widget for long messages? - :messages command to view past messages - Maybe the completion widget shouldn't be a QTreeView with tree models as there are many hacks involved by now (see notes). - :%! like feature to pipe current page through a filter. - Add FIFOHandler based on asyncio if it's available hints ----- - bindings for prev/next hint - more intelligent clicking (end of textfields) - filter close hints when it's the same link - ignore keypresses shortly after link following - uppercase hint chars without requiring upper case to type (easier to distinguish) style ===== - Clean up the package checking mess in earlyinit.py dwb keybindings to possibly implement ===================================== window ------ wh Go back in a new window (command win_hist_back, aliases: winback, wba). wl Go forward in a new window (command win_hist_forward, aliases: winforward, wfo). wB Show Bookmarks, open bookmark in a new window (command win_bookmarks, aliases: winmarks). wb[:graph:] Open quickmark in a new window (command win_quickmark, aliases: winqmarks). wf Show hints, open link in a new window. (command hints_win, aliases: winhints, whi). ;R Rapid hint mode, each matching hint opens a new window. (command hints_rapid_win, aliases: wrhints, wrhi). wp Paste from clipboard and load in a new window (command paste_nw, aliases: winpaste). wP Paste from primary selection and load in a new window (command paste_primary_nw, aliases: winppaste). W Next navigation action will be opened in a new window (command new_win). wo Open url in a new instance (command: winopen, aliases: wopen, w). Bookmarks/quickmarks -------------------- M Add a bookmark (command bookmark, aliases: bmark, bma). gb Show Bookmarks (command bookmarks, aliases: bmarks, bmas). gB Show Bookmarks, open bookmark in a new tab (command tab_bookmarks, aliases: tabmarks). tab-handling ------------ gt Show all open tabs. (command buffers, aliases: bu). [n]C-P Protect tab [n]. Closing this tab must be confirmed (command protect, aliases: prot). [n]xd Lock tab [n]. Locking a tab will lock this tab to the current domain, it’s not possible to navigate to another domain until unlocked. lock_domain, aliases: dlock). [n]xu Lock tab [n]. Locking a tab will lock this tab to the current uri, it’s not possible to navigate to another uri until unlocked. lock_uri, aliases: ulock). Blacklisting ------------ tsh Toggle scripts for current host permanently (command toggle_scripts_host, aliases: hscript). tsu Toggle scripts for current url permanently (command toggle_scripts_uri, aliases: uscript). tth Toggle scripts for current host temporarily (command toggle_scripts_host_tmp, aliases: thscript). ttu Toggle scripts for current url temporarily (command toggle_scripts_uri_tmp, aliases: tuscript). ph Toggle plugins for current host permanently (command toggle_plugins_host, aliases: hplugin). pu Toggle plugins for current url permanently (command toggle_plugins_uri, aliases: uplugin). pth Toggle plugins for current host temporarily (command toggle_plugins_host_tmp, aliases: thplugin). ptu Toggle plugins for current url temporarily (command toggle_plugins_uri_tmp, aliases: tuplugin). CC Allow persistent cookie for the current website. The domain will be saved in cookies.allow. Cookies that are allowed by the cookies.allow whitelist are stored in $XDG_CONFIG_HOME/dwb/$profilename/cookies. (command allow_cookie, aliases: cookie). CS Allow session cookie for the current website. The domain will be saved in cookies_session.allow. This is only useful if cookies-store-policy is set to never, see cookies-store-policy for details. (command allow_session_cookie, aliases: scookie). CT Allow session cookies for the current website temporarily. Only first party cookies are allowed. The domain is not saved to a whitelist and the cookies will not be saved persitently. (command allow_session_cookie_tmp, aliases: tcookie). Show ---- Sb Show bookmarks (command show_bookmarks, aliases: sbookmarks). Sq Show quickmarks (command show_quickmarks, aliases: squickmarks). Sh Show history (command show_history, aliases: shistory). Sk Show keys (command show_keys, aliases: skeys). Ss Show settings (command show_settings, aliases: ssettings). eu Show and execute userscripts (command execute_userscript). Sd Show download (command show_downloads, aliases: sdownloads). Other ----- [n]gc Clear tab n or of current tab, clears the history of the tab and loads about:blank. (command clear_tab, aliases: clear). th Go back in a new tab (command tab_hist_back, aliases: tabback, tba). tl Go forward in a new tab (command tab_hist_forward, aliases: tabforward, tfo). c/ Find forward, ignore case (command find_forward_ic, alias: iffind). c? Find backward, ignore case (command find_backward_ic, alias ibfind). [n]R Reload tab n or current tab if n is omitted without using any cached data (command reload_bypass_cache, aliases: refull). ZZ Save current session and exit (command save_session, aliases: wq). gZZ Save current session with name and exit (command save_named_session, aliases: wqn). gf Toggle "view source" (command view_source, aliases: source, so). gs Add a searchengine. Textfields can be chosen with tab and a keyword must be specified. The first defined searchengine will be the default searchengine. The keyword can be used in all open commands, e.g. :open (command save_search_field, aliases: search). C-p Toggle proxy (command proxy). V Next navigation action will be opened in a new tab (command new_tab). g. Toggle hidden files when browsing local filesystem. (command open_editor, aliases: editor). F11 Toggle fullscreen (command fullscreen, aliases: fs). F12 Toggle presentation mode. (command presentation_mode, aliases: present). xx Toggle visibility of tabbar and statusbar. (command toggle_bars, aliases: bars). xt Toggle visibility of tabbar. (command toggle_tabbar, aliases: tbar). xb Toggle visibility of statusbar. (command toggle_statusbar, aliases: sbar). xv Toggle visibility of a tab. (command visible, aliases: vis). unbound Execute a javascript snippet (command execute_javascript, aliases: exja, js). unbound Toggle a boolean setting from commandline (command toggle_setting, aliases: toggle, tog). unbound Load a html string. This command is mainly intended for use in userscripts (command load_html). unbound Load a html string in a new tab. This command is mainly intended for use in userscripts (command load_html_tab). unbound Execute a javascript snippet that uses the the internal javascript api. This command only works if the javascript interface is enabled, i.e. if there are scripts in $XDG_CONFIG_HOME/dwb/userscripts that use the api or if dwb is started with -S/--enable-scripts (command eval). Tab (S-Tab) In normal mode Tab shows the next (previous) shortcut, that matches the currently entered keysequence. When opening a url, the next (previous) item in command history, bookmarks or history will be completed. In hint mode the next (previous) hint will get focus. Tab also completes settings and shortcut-settings. When initiating a download, full paths (downloads and spawning programs) and binaries (spawning programs) in PATH will be completed. In command mode tab will complete builtin commands and urls if the command accepts an url. henk's thoughts =============== 1. Power to the user! Protect privacy! Things the browser should only do with explicit consent from the user, if applicable the user should be able to choose which protocol/host/port triplets to white/blacklist: - load/run executable code, like js, flash, java applets, ... (think NoScript) - requests to other domains, ports or using a different protocol than what the user requested (think RequestPolicy) - accept cookies - storing/saving/caching things, e.g. open tabs ("session"), cookies, page contents, browsing/download history, form data, ... - send referrer - disclose any (presence, type, version, settings, capabilities, etc.) information about OS, browser, installed fonts, plugins, addons, etc. 2. Be efficient! I tend to leave a lot of tabs open and nobody can deny that some websites simply suck, so the browser should, unless told otherwise by the user: - load tabs only when needed - run code in tabs only when needed, i.e. when the tab is currently being used/viewed (background tabs doing some JS magic even when they are not being used can create a lot of unnecessary load on the machine) - finish requests to the domain the user requested (e.g. www.example.org) before doing any requests to other subdomains (e.g. images.example.org) and finish those before doing requests to thirdparty domains (e.g. example.com) 3. Be stable! - one site should not make the complete browser crash, only that site's tab