Remove BUGS/TODO (moved to github issues)

This commit is contained in:
Florian Bruhin 2014-10-01 20:10:46 +02:00
parent d7a0a7246f
commit 7e92f037a4
3 changed files with 40 additions and 537 deletions

107
doc/BUGS
View File

@ -1,107 +0,0 @@
Bugs
====
Downloads
---------
- Downloading albums on imgur gives us corrupt files!
- "connection closed" if user takes too long
- Download focus rectangle on windows
- download-page on qute:htmllog is broken
- Prevent invalid filenames (e.g. com1) when downloading on Windows
- With a large file, when setting filename after buffer is full, download
hangs.
Webview
-------
- F on duckduckgo result page opens in current page
It seems we don't get a linkClicked signal there.
Maybe it does some weird js stuff?
See also: http://qt-project.org/doc/qt-4.8/qwebpage.html#createWindow
Asked here: http://stackoverflow.com/q/23498666/2085149
- scroll_page doesn't care about always visible bars, so content gets hidden
e.g. http://www.mtb-news.de/forum/t/welcher-schuh-five-ten-vs-oneal.529148/
- ok is always True in WebPage:on_load_status_changed, even when an error page
is loaded (probably *because* we're loading the error page and that
succeeds).
- Middle-clicking anchors doesn't actually move to the anchor in the new tab
- lots of "Element vanished" warnings on
http://docs.saltstack.com/en/latest/topics/tutorials/pillar.html when
clicking
- Hints don't work on Google+ - https://paste.xinu.at/EGJEh/
Input
-----
- going to passthrough mode (Ctrl-V) then clicking element to go to insert
mode, then leaving insert mode clears statusbar text.
- Shift-Insert in commandline pastes clipboard instead of primary selection
- Auto-insert-mode sometimes doesn't work correctly (e.g. login form of Gitlab)
- Sidewise scrolling via mousewheel broken
Rendering
---------
- Ugly font rendering on Windows on http://support.sigasi.com/Knowledgebase/List
- Funky font rendering with tewi: http://a.pomf.se/ecgzlx.png
Crashes
-------
- Segfaults when trying to load http://cmpl.cc/downloads/hlwm-tablet.mkv and
with youtube HTML5 player.
- Segfault on subsonic when clicking next track
- Segfaults when exiting while prompt is showing
- Hang on http://abcnews.go.com/Business/us-s/story?id=18230346 when video
starts playing.
- Random hangs in windows (look at memory dumps)
- Assertion failure on subsonic with debug build
- Assertion failure when clicking on "doc" with debug build on qutebrowser
github page
- Segfault in mouseReleaseEvent when clicking close in js window on
http://www.pageresource.com/jscript/jwinopen.htm
Qt warnings
-----------
- Random error messages while browsing on imgur/reddit:
WARNING: content-type missing in HTTP POST, defaulting to
application/x-www-form-urlencoded. Use QNetworkRequest::setHeader() to fix
this problem.
WARNING: QXcbWindow: Unhandled client message: "_GTK_LOAD_ICONTHEMES"
WARNING: QIODevice::read: device not open
- Random error message when closing/re-opening tab:
WARNING: Type conversion already registered from type QSharedPointer<QNetworkSession> to type QObject*
Misc
----
- All kind of FIXMEs
- "Are you sure you want to stay" links show suboptimal text.
- Config errors on start shouldn't be hard errors
(e.g. when an user-stylesheet file is deleted)
- Clicking links/email in crash dialog should open browser/mailclient under
windows
- Current font handling is rather broken (rejecting invalid values / setting
multiple font families) - we should use PyPEG2 instead.
- Typing in commandline is rather slow on OS X
Upstream Bugs
=============
- Web inspector is blank unless .hide()/.show() is called.
Asked on SO: http://stackoverflow.com/q/23499159/2085149
TODO: Report to PyQt/Qt
- Report some other crashes

355
doc/TODO
View File

@ -1,355 +0,0 @@
Before 0.1
==========
- Check BUGS
- Docs
- Manpage
- Website
- FAQ
- Single-instance and multi-window (see notes)
- Maybe test under other platforms
- Autosave feature (against segfaults/...)
- Save tabs feature with sessions
-> commandline parameter for session name, then tab list and history gets
saved under that name and can be re-loaded.
- More dwb keybindings
- Use :open engine searchterm syntax for searching
- ssl-strict=ask
- Icon
- Bookmarks?
- Completion for quickmarks/bookmarks?
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
- Internationalization
- more completions (URLs, ...)
- proper webpage history
- proper widget for debug logs, with filtering etc.
- maybe FakeWebView which acts like a WebView in a tab but isn't, to open any
widget?
- Bind userscripts to signals (e.g. page_loaded etc.)
- Multiple rendering engines, especially QGraphicsWebView + OpenGL, QWebEngine
Downloads
=========
- Remember last path for prompt, if explicitely set.
- re-ask instead of killing download if path is invalid
- open files
Improvements / minor features
=============================
- Implement some optional stuff from http://greenbytes.de/tech/tc2231/
(especially filename with Content-Disposition: inline)
- Command/page to show all keybindings?
- File moves:
- state should be in data, not config
- data/cache should be in subdirs on Windows if everything is in the same
dir.
- check what exceptions open() calls could possibly throw
- Create ~/.config etc. if they don't exist
- Add CACHEDIR.TAG to cache
http://www.brynosaurus.com/cachedir/spec.html
- Improve -m error message when we're inside the qutebrowser dir (maybe use a
Tk gui?)
- Sane default for editor (maybe via QDesktopServices or so?)
- Make utils.debug.qenum_key work properly.
- Honour icognito mode for cookies etc.
- Make sure commands in config are _complete_
- Config should check for unknown sections
- Print keybinding for command in completion [konubinix]
- command which closes other tabs in a direction [egan]
- Distinction between :q and :wq, add ZZ and ZQ shortcuts.
- set_toggle to toggle setting between two states
- Customizable statusbar
- SSL-symbol in statusbar?
- Ask whether to close when downloads are running or maybe if form fields are
unsubmitted (book page 187)
- Keychain completion in statusbar like dwb
- Commandline argument to delete config
- Settings dialog/page (iggy is working on qute:settings)
- Tab groups (tagging/filtering for displayed tabs)
- Save cookies in Netscape format so it can be used by wget. (see notes)
- Zoom with ctrl + mousewheel
- debug-Command for set loglevel/RAM capacity
- reload config command
- config changed signals for sections (optimization)
- Display metavars for command arguments 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
- Add more element-selection-detection code (with options?) (see notes)
- somehow unfocus elements (hide blinking cursor) when insert mode is left?
- Copy link location on crash mail should not copy mailto:
- Drag&Drop of tabs to other windows
- Multi-line statusbar or own widget for long messages?
- :messages command to view past messages
- :%! like feature to pipe current page through a filter.
- Add FIFOHandler based on asyncio
- Lazy tab loading
- Add command shortcuts to command completion
- Ctrl-m as enter in commandline? (works in forms)
- Readline shortcuts in forms?
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
=====
- Use list models for completion and a proxy model which converts them to a
tree?
- Stuff under scripts/ (especially asciidoc2html) could use a rewrite.
- Use unittest.Mock and especially unittest.patch more.
- Check where using signals would be better than objreg.get.
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, its 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, its 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).
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).
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 <keyword> <searchterm> (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

115
doc/notes
View File

@ -1,77 +1,42 @@
Multiwindow
===========
cmdutils.register (and thus Command) gets argument scope which is global/window
when scope=global, instance is searched starting with the application
singleton.
when scope=window, instance is searched starting with the window the command
was executed in.
Each window has its own CommandDispatcher, which adds the window as an
attribute to every Command before calling the handler. The handler then uses
this to get the starting point for instance=.
IPC
===
We use QLocalSocket to communicate with another instance
TODO: find out why many apps just use QLocalSocket as a control channel, and
shared memory for data.
Max data size might be 8k, but this is enough for commandline args.
http://developer.nokia.com/community/wiki/Qt_IPC_using_QLocalSocket_%26_QLocalServer
https://www.mail-archive.com/pyqt@riverbankcomputing.com/msg22736.html
http://stackoverflow.com/a/8795563/2085149
http://nullege.com/codes/show/src%40n%40i%40ninja-ide2-2.1.1%40ninja_ide%40core%40ipc.py/20/PyQt4.QtNetwork.QLocalSocket/python
http://nullege.com/codes/show/src%40t%40a%40taurus-3.0.0%40lib%40taurus%40qt%40qtgui%40container%40taurusmainwindow.py/780/PyQt4.QtNetwork.QLocalSocket/python
http://nullege.com/codes/show/src%40h%40e%40Heliotrope-HEAD%40purple_server.py/95/PyQt4.QtNetwork.QLocalSocket/python
http://qt-project.org/doc/qt-4.8/qlocalserver.html
https://gitorious.org/qsingleapplication/qsingleapplication/source/ca13324b0f5bdfcaf4e379a78108f0bd85fed98a:qSingleApplication.py#L49
http://www.dallagnese.fr/en/computers-it/recette-python-qt4-qsingleapplication-pyside/
http://stackoverflow.com/questions/8786136/pyqt-how-to-detect-and-close-ui-if-its-already-running
http://stackoverflow.com/questions/12712360/qtsingleapplication-for-pyside-or-pyqt
Netscape cookies
================
http://www.cookiecentral.com/faq/#3.5
https://docs.python.org/3.4/library/http.cookies.html
http://qt-project.org/doc/qt-4.8/qnetworkcookie.html
- Second column (flag): TRUE if domain starts with ., else FALSE
- if a cookie is a http-only cookie domain is prepended with a #HttpOnly_
- Python's http.cookiejar.MozillaCookieJar might help
Element selection detection
===========================
Possible options:
- javascript: http://stackoverflow.com/a/2848120/2085149
- microFocusChanged and check active element via:
frame = page.currentFrame()
elem = frame.findFirstElement('*:focus')
Completion view (not QTreeView)
===============================
Perhaps using a QHBoxLayout of QTableViews and creating/destroying them based
on the completion would be a better idea?
HTML help pages
henk's thoughts
===============
- Only generate HTML when releasing (and ship it with the releases!)
(setuptools integration)
X Update asciidoc along with source updates
X Provide script to generate HTML from asciidoc
- Show error page with some instructions when HTMLs are missing.
- Show some kind of message when:
- .html files are found
- .asciidoc files are found (because qutebrowser is running locally from
gitrepo)
- .asciidoc files are newer than .html files
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
Upstream Bugs
=============
- Web inspector is blank unless .hide()/.show() is called.
Asked on SO: http://stackoverflow.com/q/23499159/2085149
TODO: Report to PyQt/Qt
- Report some other crashes