Commit Graph

8040 Commits

Author SHA1 Message Date
Florian Bruhin
3cd2910fa2 Merge branch 'greasemonkey' of https://github.com/toofar/qutebrowser into greasemonkey 2017-12-06 10:47:29 +01:00
Artur Shaikhullin
890e26b2b5 Additional fixes 2017-12-06 13:58:23 +06:00
Jimmy
ead108eeeb fixup! Greasemonkey: Add run-at document-idle. 2017-12-06 20:27:56 +13:00
Jimmy
129f97873a Greasemonkey: add assert to tests scripts_for assumptions.
And crash the users browsing session as a result of any accidental and
totally, otherwise, non-fatal unforseen errors.
2017-12-06 20:21:29 +13:00
Florian Bruhin
1a3f8662e6 Improve handling of cancelled search callbacks 2017-12-06 07:56:59 +01:00
Florian Bruhin
9ec4e749f1 Merge branch 'fix_search_callbacks' of https://github.com/jupart/qutebrowser 2017-12-06 07:51:19 +01:00
Artur Shaikhullin
ed1d036077 Fix eslint warnings
used some eslint ignore comments
2017-12-06 12:11:06 +06:00
Florian Bruhin
0df1d07558 Merge remote-tracking branch 'origin/pr/3367' 2017-12-06 06:57:59 +01:00
Florian Bruhin
7a6d568c8c Remove blank line 2017-12-06 06:53:27 +01:00
Florian Bruhin
7f81f0c0ab Always open session tabs in foreground
This helps with issues with lazy sessions as document.hidden was set
incorrectly.

See #3345, #3366
2017-12-06 06:51:15 +01:00
Florian Bruhin
dcb4448594 Merge remote-tracking branch 'origin/pr/3345' 2017-12-06 06:51:03 +01:00
Justin Partain
00a09354c3 Track number of active searches in tab, ignore all but most recent search callbacks 2017-12-05 08:28:10 -05:00
Ryan Roden-Corrent
636f9edff6 History completion by both URL and title.
Resolves #1649.
2017-12-05 07:32:58 -05:00
mhm@mhm.com
02104a318e delay added, text changed 2017-12-04 19:03:12 +01:00
mhm@mhm.com
28caddf3c1 delay added, text changed 2017-12-04 19:02:09 +01:00
Florian Bruhin
a137a29cce Style improvements
This adds a blank line and makes Completer arguments keyword-only to make their
meaning more clear.
2017-12-03 22:32:17 +01:00
Ryan Roden-Corrent
b610563e7f Don't show current window for :tab-give/:tab-take.
Resolves #3144.
2017-12-03 08:03:54 -05:00
Florian Bruhin
97054ca35d Don't hide report dialog early
It looks like hiding it already causes it to be accepted.
Fixes #1128
2017-12-03 13:04:08 +01:00
Florian Bruhin
f07301cfb5 Revert "Restart correctly after reporting crash."
This reverts commit 7001f068b3.
2017-12-03 12:48:29 +01:00
Florian Bruhin
ce46b30a1e Show error instead of warning 2017-12-02 14:49:06 +01:00
Florian Bruhin
003ec31848 Merge remote-tracking branch 'origin/pr/3333' 2017-12-02 14:47:24 +01:00
Florian Bruhin
689fe96393 Improve workaround comment 2017-12-02 14:37:59 +01:00
Florian Bruhin
e9be357104 Merge remote-tracking branch 'origin/pr/3352' 2017-12-02 14:37:01 +01:00
mhm@mhm.com
b58cfead05 style fixed 2017-11-30 16:05:01 +01:00
Artur Shaikhullin
4eda328a61 Fix some lint warnings. Enable caret tests 2017-11-30 20:38:38 +06:00
Artur Shaikhullin
c7a5dd6abb Clean up javascript caret code 2017-11-30 18:02:50 +06:00
mhm@mhm.com
d29cf1ee4d lazy sessions, restore if visible, forward user after restore 2017-11-30 00:09:28 +01:00
Artur Shaikhullin
f965c0daec Don't position caret if selection exists 2017-11-29 21:01:47 +06:00
Artur Shaikhullin
70b58d1928 Inject caret css on mode enter 2017-11-29 20:07:24 +06:00
Ryan Roden-Corrent
fcad40ceb7 Add orphaned tab check to WebKit as well.
This implements the orphaned editor fix for WebKit. Webkit wasn't
crashing before, but this causes webkit to show the same warning
webengine does if the editor is orhpaned (rather than silently
continuing). This allows the same BDD test to pass for both webkit and
webengine.
2017-11-29 07:35:11 -05:00
Ryan Roden-Corrent
e09a8c77e9 Simplify check for orphaned editor.
Instead of rewiring signals on tab.shutting_down, have the webelem check
if its parent tab is deleted, and throw a specific exception.

This is only necessary in WebEngine, Webkit does not crash when the
editor is orphaned.

I tried to write a test for is_deleted, but could not get it to pass:
```
def test_is_deleted(qtbot, view, config_stub, tab_registry, mode_manager):
    tab_w = Tab(win_id=0, mode_manager=mode_manager)
    qtbot.add_widget(tab_w)
    tab_w._set_widget(view)
    assert not tab_w.is_deleted()
    sip.delete(view)
    #assert tab_w.is_deleted()
```

The qtbot post-test cleanup would error due to the deleted view.
2017-11-29 07:01:48 -05:00
Florian Bruhin
81045fb1bd Drop unneeded parens 2017-11-29 10:44:50 +01:00
Florian Bruhin
911616707e Merge remote-tracking branch 'origin/pr/3329' 2017-11-29 10:40:40 +01:00
Florian Bruhin
ca74991900 Read backend after args.temp_settings
This should hopefully not affect any config change handlers, as almost nothing
is registered this early.

Fixes #3340
2017-11-28 17:00:45 +01:00
Ryan Roden-Corrent
9dfc6b0f61 Change wording for orphaned editor.
The term "vanished" is used elsewhere.
2017-11-28 08:37:38 -05:00
Ryan Roden-Corrent
b6dcd4d387 Reapply "Hide quickmark/bookmark completion if empty."
This reverts commit e72e8b8556.

Now that the SQL category works in isolation, it is possible to hide
quickmarks/bookmarks when those categories are empty.

Fixes #960
2017-11-28 07:21:26 -05:00
Florian Bruhin
b407f4ab41 Release v1.0.4 2017-11-28 10:56:15 +01:00
Florian Bruhin
ef1825efb0 Handle sqlite errors during :history-clear 2017-11-28 07:02:33 +01:00
Florian Bruhin
73587b1e16 Add SQLITE_CORRUPT to environmental SQL errors 2017-11-28 06:55:55 +01:00
Florian Bruhin
4fed8518e1 Handle "out of memory" error in sql.init() 2017-11-28 06:53:41 +01:00
Ryan Roden-Corrent
40e4e73e36 Ensure HistoryCategory works in isolation.
While QSortFilterProxyModel emits layoutChanged when changing the
pattern, QSqlQueryModel emits modelReset. As only layoutChanged was
connected, a HistoryCategory would only work in a model that also had at
least one ListCategory.

The simplest solution is to have the parent model emit the signal
directly. This also emits a single signal on a pattern change rather
that one for each child model.

Resolves #3016.
2017-11-27 11:49:32 -05:00
Jimmy
0381d74e9a Greasemonkey: privatise some utility functions 2017-11-27 20:10:38 +13:00
Florian Bruhin
db353c4030 Connect the page signal for GreaseMonkey
Looks like we don't get the mainFrame's loadFinished signal properly.
2017-11-27 20:10:38 +13:00
Florian Bruhin
6933bc05b4 Add some debug logging for GreaseMonkey with QtWebKit 2017-11-27 20:10:38 +13:00
Jimmy
df624944f9 Greasemonkey: webkit: injected all scripts on loadFinished.
The signal we were using to inject greasemonkey scripts registered to
run at document-start (javaScriptWindowObjectCleared) was unreliable to
non-existant. The initialLayoutCompleted signal is a bit of an odd duck
too I suppose. Anyway, we don't anticipate any scripts would break from
being injected when the page is finished loaded that wouldn't already
have been flaky due to the complexities of the modern web. If there is
an issue hopefully someone raises an issue and we can look into it.
2017-11-27 20:10:38 +13:00
Jimmy
8a5b42ffbd Greasemonkey: es6ify the greasemonkey wrapper js.
Because backwards compatibility sucks I guess.
2017-11-27 20:10:38 +13:00
Jimmy
361a1ed6e4 Greasemonkey: change PROPS_REGEX to handle non-value keys.
We weren't actually picking up the @noframes greasemonkey directive
because of this. I haven't tested this very extensively but it seems to
work for making the property value optional.
2017-11-27 19:27:31 +13:00
Jimmy
9aeb5775c1 greasemonkey: run scripts on subframes on webkit
Use the `QWebPage.frameCreated` signal to get notifications of subframes
and connect the javascript injection triggering signals on those frames
too.

I had to add a `url = url() or requestedUrl()` bit in there because the
inject_userjs method was getting called to early or something when
frame.url() wasn't set or was set to the previous page so we were
passing the wrong url to greasemonkey.scripts_for().

I ran into a bizarre (I maybe it is completely obvious and I just don't
see it) issue where the signals attached to the main frame that were
connected to a partial function with the main frame as an argument were
not getting emitted, or at least those partial functions were not being
called. I worked around it by using None to mean defaulting to the main
frame in a couple of places.
2017-11-27 19:27:31 +13:00
Jimmy
7c497427ce Greasemonkey: various javascript fixups to GM wrapper template.
Thanks to @sandrosc. A few breaking changes fixed (default method to
GM_xhr not working, GM_listvalues not cleaning up output, GM_setvalue
param checking logic wrong) and a few hygenic changes made.
2017-11-27 19:27:31 +13:00
Jimmy
c0832eb04b Greasemonkey: support @nosubframes.
And run on frames by default. At least on webengine. There is probably
some api to enumerate frames on a webkit page.

Not tested.
2017-11-27 19:27:31 +13:00
Jimmy
fb019b2dab Address second round line comments.
Add qute version to GM_info object in GM wrapper.
Support using the greasemonkey @namespace metadata for its intended
purpose of avoiding name collisions.
Get a nice utf8 encoded string from a QUrl more better.
2017-11-27 19:27:31 +13:00
Jimmy
efde31aa57 Greasemonkey: Support QTWebEngine versions < 5.8
QTWebEngine 5.8 added support for parsing greasemonkey metadata blocks
and scripts added to the QWebEngineScriptCollection of a page or its
profile and then deciding what urls to run those scripts on and at what
point in the load process to run them. For earlier versions we must do
that work ourselves. But with the additional handicap of the less rich
qtwebengine api.

We have acceptNavigationRequest, loadStarted, loadProgress,
loadFinished, urlChanged to choose from regarding points at which to
register scripts for the current page.

Adding scripts on acceptNavigation loadStarted and loadFinished causes
scripts to run too early or too late (eg on the pages being navigated
from/to) and not run on the desired page at the time they are inserted.
We could maybe do some more sophisticated stuff with loadProgress but it
didn't have any better behaviour in the brief testing I gave it.
Registering scripts on the urlChanged event seems to work fine. Even if
it seems like there could be problems with the signal firing too often,
due to not necessarily being tied to the page load progress, that
doesn't seem to have an effect in practice. The event is fired when, for
example, the url fragment changes and even if we add a new script to the
collection (or remove an existing one) it doesn't have an effect on what
is running on the page.

I suspect all of those timing issues is due to the signals being
forwarded fairly directly from the underlying chomium/blink code but the
webengine script stuff only being pushed back to the implementation on
certain events.

Anyway, using urlChanged seems to work fine due to some quirk(s) of the
implementation. That might change with later development but this
codepath is only ever going to be used for version 5.7.

There are other potential optimizations like not removing and then
re-adding scripts for the current page. But they probably wouldn't do
anything anyway, or at least anything that you would expect.
2017-11-27 19:27:31 +13:00
Jimmy
209e43e0ba Greasemonkey: Match against percent encoded urls only.
This change requires urls specified in @include, @exclude and @matches
directives in metadata blocks to be in the same form that
QUrl.toEncoded() returns. That is a punycoded domain and percent encoded
path and query. This seems to be what Tampermonkey on chrome expects to.

Also changes the scripts_for() function to take a QUrl arg so the caller
doesn't need to worry about encodings.
2017-11-27 19:27:31 +13:00
Jimmy
d318178567 Greasemonkey: Fix metadata block regex.
This regex was broken since the original PR and subsequent code seemed to be
working around it. Before re.split was returning [everything up to
/UserScript, everything else], now it returns [before UserScript, metadata,
after /UserScript], which is good.

Also I added the check for the UserScript line starting at column 0 as per
spec.
2017-11-27 19:27:31 +13:00
Jimmy
5e49e7eef2 Greasemonkey: Throw Errors if GM_ function args wrong type.
These argument type restrictions are mentioned on the greasespot pages for
these value storage functions. We could call JSON.dumps() instead but better
to push that onto the caller so we don't have to try handle deserialization.

Also removes the check for localstorage because everyone has supported that
for years.
2017-11-27 19:27:31 +13:00
Jimmy
d93c583c0d Greasemonkey: Escape jinja variables for JS strings. 2017-11-27 19:27:31 +13:00
Jimmy
a7f41b4564 Greasemonkey: ensure only GM scripts are cleaned up on reload.
WebEngine only. Previously we were just removing every script from the
main world. But some other scripts might got here in the future so new
we are overriding the name field to add a GM- prefix so hopefully we
only remove greasemonkey scripts before adding new ones.
2017-11-27 19:27:31 +13:00
Jimmy
fd5d44182b Greasemonkey: move GM_* template into seperate file.
Also ported it to jinja rather than str.format().

Also ran the js through jslint and fixed up a few very minor things.
2017-11-27 19:27:31 +13:00
Jimmy
c1b912f567 Greasemonkey: move inject_userscripts into webenginesettings 2017-11-27 19:27:31 +13:00
Jimmy
edf737ff7d Greasemonkey: move scripts for a domain into data class.
Also makes scripts that don't include a greasemonkey metadata block
match any url. QWebEngine already has that behaviour.
2017-11-27 19:27:31 +13:00
Jimmy
41035cb5ca Greasemonkey: restrict page schemes that scripts can run on
Scripts shouldn't run on qute://settings or source:// etc.

Whitelist from:
https://wiki.greasespot.net/Include_and_exclude_rules
2017-11-27 19:27:31 +13:00
Jimmy
799730f686 Remove GM_ and userscript variables from global scope. 2017-11-27 19:27:31 +13:00
Jimmy
325c595b89 Greasemonkey: Don't strip gm metadata from scripts when loading.
Since we just pass them to webenginescriptcollection on that backend and
that wants to parse it itself to figure out injection point etc.
2017-11-27 19:27:31 +13:00
Jimmy
f26377351c Greasemonkey: Add greasemonkey hooks for webengine.
For qtwebengine 5.8+ only. This is because as of 5.8 some greasemonkey
script support is in upstream. That is, qtwebenginescript(collection)
parses the greasemonkey metadata block and uses @include/match/exclude
to decide what sites to inject a script onto and @run-at to decide when
to inject it, which saves us the trouble. Notes on doing this in <5.8
are below.

Scripts are currently injected into the main "world", that is the same
world as the javascript from the page. This is good because it means
userscripts can modify more stuff on the page but it would be nice if we
could have more isolation without sacrificing functionality. I'm still
looking into why my more feature-full scripts are not having any effect
on the page while running in a separate world.

Userscripts are added to both the default and private profile because I
that if people have scripts installed they want them to run in private mode
too.

We are grabbing the scripts from the greasemonkey module, as opposed to
reading them directly from disk, because the module adds some GM_* functions
that the scripts may expect, and because that is used for webkit anyway.

I have code to support qtwebengine <5.8 but didn't because I am not
happy with the timing of some of the signals that we are provided
regarding page load state, and the actual load state. While the
difference between document-end and document-idle isn't so bad,
injecting document-start scripts when a urlChanged event is emitted
results in the script being injected into the environment for the page
being navigated away from. Anyway, if anyone wants this for earlier
webengines I can oblige them.
2017-11-27 19:27:31 +13:00
Jimmy
be9f8bd0de Greasemonkey: Lift greasemonkey init app.py
To prepare for multiple-backend support.
2017-11-27 19:27:31 +13:00
Jimmy
25f626a436 Greasemonkey: Add run-at document-idle.
Supposed to be after all the assets have finished loading and in page js
has run. Not that we can garuntee that last bit. If a script misbehaves
because a precondition isn't yet met I suggest adding a defer method to
the script that adds a timer until the precondition is met.

Also changed the map/filter calls to use list comprehensions to keep
pylint happy. Even if it does look uglier.
2017-11-27 19:27:31 +13:00
Jimmy
13728387d7 Greasemonkey: Fix crash on undefined metadata. 2017-11-27 19:27:31 +13:00
Jimmy
ecdde7663f Add greasemonkey-reload command.
Also add a signal to emit when scripts are reloaded. Had to make
GreasemonkeyManager inherit from QObject to get signals to work.
2017-11-27 19:27:31 +13:00
Andor Uhlár
568d60753e Add greasemonkey compatible userscript module.
WebKit backend only for now. Loads all .js files from a directory,
specified in the greasemonkey-directory key in the storage section,
defaulting to data/greasemonkey, and wraps them in a minimal environment
providing some GM_* functions. Makes those scripts available via the
"greasemonkey" registered object in objreg and injects scripts at appropriate
times in a page load base on @run-at directives.
2017-11-27 19:27:31 +13:00
Florian Bruhin
248a12a8b9 Add flake8-comprehensions 2017-11-26 21:42:50 +01:00
Florian Bruhin
b5dd647678 Upgrade pydocstyle/flake8-docstrings
See #3320
2017-11-26 20:30:32 +01:00
Florian Bruhin
0f3cff60fa Merge remote-tracking branch 'origin/pr/3335' 2017-11-26 19:42:54 +01:00
Florian Bruhin
38f8cacd2b Merge remote-tracking branch 'origin/pr/3336' 2017-11-26 19:35:26 +01:00
Florian Bruhin
67253726fa Handle empty messages in qt_message_handler
I can't reproduce this, but someone on KDE reported always getting a crash (as
msg.splitlines()[0] gives an IndexError) when trying to select a file with
Qt 5.9.3.
2017-11-26 17:31:07 +01:00
Ryan Roden-Corrent
54fffc8264 Resolve crash when editor tab is closed.
If an editor is open on a form in a tab and that tab is closed, rewire
the callback to print a warning. Previously, the callback would access a
deleted C++ object and cause a crash.
Resolves #2758.
2017-11-26 07:50:49 -05:00
Panagiotis Ktistakis
e05dabefdf Show default keybinding in :bind completion 2017-11-26 13:34:18 +02:00
Ryan Farley
5ed8019115 update flake8 and flake8-deprecated
Updated requirements and adjusted the configuration in `.flake8`; other
files have been modified where the lack of per-file auto-ignore caused
problems, where putty's `# flake8: disable=` syntax could be replaced
with a simpler `noqa`, or where pylint directives already suppressed the
same error.
2017-11-26 00:16:14 -06:00
mhm@mhm.com
9df149fe8f urlencode fix 2017-11-24 17:15:26 +01:00
Artur Shaikhullin
72040a3bbb Position caret on top element 2017-11-24 17:32:23 +06:00
Florian Bruhin
0afd6b23c9 Add the option name to the backend error message 2017-11-24 09:25:45 +01:00
Florian Bruhin
28d7c5e204 Fix lint 2017-11-24 07:25:10 +01:00
Jay Kamat
739cfc03ba
Fix undercounting short hints 2017-11-23 23:14:21 -05:00
Artur Shaikhullin
8a64ce19c3 Fetch selection for userscripts 2017-11-23 20:18:43 +06:00
Ryan Roden-Corrent
8eab402820 Abort :edit-command on invalid input.
Show an error message if the user edits the command such that it is
missing a start character (:, /, or ?). Previously, this would cause the
browser to crash.

Resolves #3326.
2017-11-23 08:15:27 -05:00
Florian Bruhin
b31360b6e3 Fix line break 2017-11-22 17:19:21 +01:00
Florian Bruhin
750d2c490f Fix :completion-item-focus --history with / or ?
If we have no completion (like when searching), we can just always go through
history with up/down.
2017-11-22 15:34:48 +01:00
Artur Shaikhullin
e7a66d92a8 Selection implentation 2017-11-22 19:56:05 +06:00
Florian Bruhin
487951cd31 Fix joining :jseval path 2017-11-22 10:57:48 +01:00
Florian Bruhin
12f4940ef3 Make :jseval use a fixed path with relative paths 2017-11-22 09:37:17 +01:00
Florian Bruhin
3b3acba34e Edit description of tabs.persist_mode_on_change 2017-11-22 09:11:17 +01:00
Florian Bruhin
2581be051f Always leave hint/caret mode when switching tabs
See #3323
2017-11-22 08:53:01 +01:00
mhm@mhm.com
e2d5a443cc lazy sessions 2017-11-21 23:57:06 +01:00
Vladimir Shulyak
358c888760 Fix long line 2017-11-21 22:35:19 +00:00
Vladimir Shulyak
7532db83c4 Add option to persist current mode on tab change 2017-11-21 18:57:41 +00:00
Artur Shaikhullin
8aca37e5d5 Implement all caret browsing methods 2017-11-21 19:56:00 +06:00
Florian Bruhin
203b6c354f Fix content.cache.size overflow with QtWebEngine
While 64-bit values are allowed with QtWebKit/QNetworkDiskCache, QtWebEngine
only allows 32-bit values here. With the updated sip's strict overflow checking,
that means we get an exception when setting a too big value.
2017-11-21 14:07:49 +01:00
mhm@mhm.com
607cd9ba6e indent adjusted 2017-11-21 01:19:04 +01:00
mhm@mhm.com
aa40842848 lazy sessions, docstring formatted, settings renamed, javascript notice changed, insert method changed 2017-11-21 00:38:51 +01:00
Ryan Roden-Corrent
5495380580 Exit command mode after :edit-command --run.
Resolves #3317, where the command prompt was left open and populated
with text after running the command.
2017-11-20 11:46:26 -05:00
Artur Shaikhullin
82b1bd10ec Add some movement caret actions 2017-11-20 17:49:42 +06:00
Florian Bruhin
a2c549b954 Merge remote-tracking branch 'origin/pr/3313' 2017-11-19 21:09:19 +01:00
Florian Bruhin
87b174b418 Simplify :completion-item-focus 2017-11-19 21:07:33 +01:00
Florian Bruhin
62f37df573 Make cursor keys go through completion if a text was entered
This hopefully helps with people who try to use arrow keys for the completion,
while still making the command history somewhat discoverable.
2017-11-19 20:35:16 +01:00
akhilkpdasan
740d629b36
Update utilcmds.py 2017-11-20 00:56:09 +05:30
akhilkpdasan
9a58fe229c
fixed spelling error 2017-11-19 19:32:24 +05:30
akhilkpdasan
ba6d90aa7a
fixed docmentation for pyeval 2017-11-19 19:08:52 +05:30
Florian Bruhin
91c909cb80 Merge remote-tracking branch 'origin/pr/3212' 2017-11-19 14:24:40 +01:00
Florian Bruhin
8c7bf12b88 Merge remote-tracking branch 'origin/pr/3306' 2017-11-19 14:08:58 +01:00
Florian Bruhin
2b063f577e Handle OSError in :config-write-py 2017-11-19 14:06:11 +01:00
Florian Bruhin
8fb03208e7 Improve parsing of fatal stacktraces
We now also recognize "Windows fatal exception: ..." message and refuse to
send empty Windows access violation messages.
2017-11-19 14:06:11 +01:00
Akhil kp
c5eab53a87 Added --file for :debug-pyeval 2017-11-19 18:20:58 +05:30
Ryan Roden-Corrent
d145b304d0 Remove maxsplit from edit_command.
This was a copy-paste typo, no need for maxsplit as this command takes
no positional args.
2017-11-18 20:41:23 -05:00
mhm@mhm.com
13dc24f6ca debug code removed 2017-11-18 14:31:55 +01:00
mhm@mhm.com
cf8130bd22 lazy session, fix: active entry is not the end of the history 2017-11-18 14:28:44 +01:00
mhm@mhm.com
2debeafe1b lazy sessions, dont save qute://back 2017-11-18 13:51:30 +01:00
mhm@mhm.com
1a33c88c96 lazy sessions, dont save qute://back 2017-11-18 13:47:57 +01:00
mhm@mhm.com
c150c5481a lazy sessions, dont save qute://back 2017-11-18 13:46:50 +01:00
mhm@mhm.com
c4bb134313 lazy sessions, improved version 2017-11-18 11:05:54 +01:00
mhm@mhm.com
51dea053f4 lazy sessions 2017-11-18 01:00:16 +01:00
mhm@mhm.com
ade7004f8f lazy sessions 2017-11-18 00:48:31 +01:00
mhm@mhm.com
95f8c07d7f lazy sessions 2017-11-18 00:31:53 +01:00
Ryan Roden-Corrent
0f93d53210 Implement :edit-command.
:edit-command opens the current command line in an editor, and updates
the command line if the editor exits successfully. If --run is passed,
the command is executed when the editor exits sucessfully.

Resolves #2453.
2017-11-17 11:16:42 -05:00
Artur Shaikhullin
b184d2f94d dirty initial port of chrome caretbrowser extension 2017-11-16 19:25:15 +06:00
Florian Bruhin
b26f2290bc Merge remote-tracking branch 'origin/pr/3097' 2017-11-16 11:14:59 +01:00
Florian Bruhin
b3085f5d60 Merge remote-tracking branch 'origin/pr/3291' 2017-11-16 10:17:02 +01:00
dwagle
233cea4b62 discarded unnecessary comment and adjusted some code to make pylint happy, also made adjustments to pytest scenarios 2017-11-15 15:48:21 +05:45
Florian Bruhin
ea71f0e318 Merge remote-tracking branch 'origin/pr/3285' 2017-11-15 07:32:04 +01:00
Florian Bruhin
404f9ea1d0 Merge remote-tracking branch 'origin/pr/3290' 2017-11-15 07:31:10 +01:00
dwagle
b3b768f4a8 normalize url path and strip trailing slashes when doing gu/gU, normalize every qute://* urls and raise OSError when a url redirects to a directory in qute://help/ pages 2017-11-14 21:23:40 +05:45
Florian Bruhin
e72e8b8556 Revert "Hide quickmark/bookmark completion if empty."
This reverts commit 23716f1212.

See #3016
Fixes #3288
Reopens #960
2017-11-14 13:29:58 +01:00
Florian Bruhin
62f35ee064 Fix lint 2017-11-14 09:05:28 +01:00
Dasith Gunawardhana
ea70a0dea1 changed setting name and reverted non-issue fix 2017-11-14 01:41:15 -05:00
Florian Bruhin
1203be2a44 Remove unnecessary str() call 2017-11-14 06:19:42 +01:00
Dasith Gunawardhana
4419e59d46 prevent WM fullscreen from being unset when desktop_fullscreen is false 2017-11-13 23:25:10 -05:00
Jay Kamat
ae48fa68a8
Add an uptime section to qute:version 2017-11-13 21:58:00 -05:00
Dasith Gunawardhana
36c8ca9790 added option to limit fullscreen to window only 2017-11-13 21:38:02 -05:00
Florian Bruhin
408ceefad1 Merge branch 'none-position' 2017-11-13 20:42:22 +01:00
Florian Bruhin
870c15a02c Merge remote-tracking branch 'origin/pr/3264' 2017-11-13 20:40:23 +01:00
Ryan Roden-Corrent
b72343d126 Yank selected text with completion-item-yank.
If text is highlighted in the status command bar, completion-item-yank
should yank that rather than the selected completion item.

Resolves #3281.
2017-11-13 13:25:18 -05:00
Jay Kamat
0f17e6633d
Stop calling _register automatically for StyleSheetObservers 2017-11-13 12:04:31 -05:00
Florian Bruhin
df4a011d48 Put files into the config dir with :config-write-py and rel. paths 2017-11-13 10:58:51 +01:00
Florian Bruhin
5c43dca0da Improve error message for files which don't exist 2017-11-13 10:47:37 +01:00
Florian Bruhin
f6cc6677dd Remove hiding of commands
This was often confusing for people - let's instead just hide commands which are
not available in normal mode.
2017-11-13 09:02:16 +01:00
Florian Bruhin
ec6017b3b2 Remove unneeded parens 2017-11-13 07:09:59 +01:00
Florian Bruhin
7f0ecaa89e Merge remote-tracking branch 'origin/pr/3266' 2017-11-13 07:09:49 +01:00
Florian Bruhin
fc8f2090f0 Merge remote-tracking branch 'origin/pr/3271' 2017-11-13 07:09:29 +01:00
Florian Bruhin
ccb564de36 Merge remote-tracking branch 'origin/pr/3279' 2017-11-13 07:08:53 +01:00
Ryan Roden-Corrent
23716f1212 Hide quickmark/bookmark completion if empty.
If there are no quickmarks/bookmarks, hide the entire category in url
completion. Note that this only hides the category if
quickmarks/bookmarks is empty to begin with. An empty category is still
shown if the completion pattern filters out all items in that category.

See #960.
2017-11-12 22:28:49 -05:00
Florian Bruhin
f6e6f9d27b Make qutebrowser aware of settings requiring a restart
See #3270
2017-11-12 17:17:19 +01:00
Jay Kamat
c1fcabe846
Remove default config-cycle bindings
Many people accidentally hit 'x{x,t,b}', hiding their statusbar by mistake
2017-11-11 16:16:26 -05:00
Jay Kamat
f242fc5cd7
Add setting to avoid shrinking pinned tabs 2017-11-11 11:33:33 -05:00
Jay Kamat
e00a072d15
Fix garbage collection of StyleSheetObserver objects 2017-11-10 23:25:46 -05:00
Florian Bruhin
c47f0402ab Fix lint 2017-11-10 13:14:51 +01:00
Florian Bruhin
456c854f06 Improve documentation for :hint --rapid 2017-11-10 10:23:16 +01:00
Florian Bruhin
8df759ecad Merge remote-tracking branch 'origin/pr/3259' 2017-11-10 09:42:05 +01:00
Ulrik de Muelenaere
b37517e55f Fix error in stylesheet.js on older QtWebEngine 2017-11-09 19:28:36 +02:00
dkanada
6ecd429d8f group indicator preferences 2017-11-08 15:27:16 -07:00
dkanada
b8b49637e2 replace changes to desc 2017-11-08 14:46:00 -07:00
dkanada
785bf24652 change the code for the renamed preferences 2017-11-08 14:42:09 -07:00
Panagiotis K
59cebae28e Remove redundant import. 2017-11-08 18:23:51 +02:00
Florian Bruhin
180fb0d65a Fix handling of caret position with Qt 5.10
With Chromium 61 in Qt 5.10, we get null when getting .selectionStart on a
non-text element, like changed in the WhatWG HTML standard:
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-textarea/input-selectionstart

See https://www.chromestatus.com/feature/5740194741354496

Older QtWebEngines and QtWebKit raise InvalidStateError instead.

This also changes the surrounding code and API so None is used to say "there's
no caret position available", which seems like a nicer API.
2017-11-08 16:27:26 +01:00
cryzed
6e719d1796 Fix issue #3251 2017-11-08 15:08:36 +01:00
Florian Bruhin
fdc9dfdf87 Merge remote-tracking branch 'origin/pr/3175' 2017-11-07 11:24:41 +01:00
Florian Bruhin
9f898611f3 Add missing path assignment 2017-11-07 11:24:00 +01:00
Florian Bruhin
32914cfaf8 Remove unneeded backslash 2017-11-07 11:17:18 +01:00
Florian Bruhin
3eafdc13d7 Merge remote-tracking branch 'origin/pr/3177' 2017-11-07 11:17:00 +01:00
Florian Bruhin
4f0d8a84ee Merge remote-tracking branch 'origin/pr/3253' 2017-11-07 07:46:30 +01:00
Joel Bradshaw
52be2dd665 Update documents to reflect new dictcli.py script 2017-11-06 22:21:07 -08:00
Jay Kamat
ecf6f4bca0
Fix Qt Mnemonics affecting min tab width
See #3245
2017-11-06 15:05:26 -05:00
Jan Verbeek
3e8c84c018 Make :undo re-open all tabs closed by :tab-only
This changes the undo stack from a list of UndoEntry objects to a list
of lists of UndoEntry objects, so groups of tabs can be added. Only
:tab-only does that, but it's exposed by TabbedBrowser.close_tab as a
keyword argument.
2017-11-06 19:32:10 +01:00
Florian Bruhin
0053b10e4d Merge remote-tracking branch 'origin/pr/3243' 2017-11-06 16:26:21 +01:00
Florian Bruhin
e7da2142f3 Merge remote-tracking branch 'origin/pr/3249' 2017-11-06 13:52:19 +01:00
Florian Bruhin
29cbf75615 Merge remote-tracking branch 'origin/pr/3249' 2017-11-06 13:46:24 +01:00
Ryan Roden-Corrent
c74cb22374 Improve completion-item-yank documentation. 2017-11-06 07:34:31 -05:00
Florian Bruhin
378b280f9a Fix qute://gpl 2017-11-06 12:13:54 +01:00
Florian Bruhin
55815bd17b Add some debug logging for #3219 2017-11-06 10:53:37 +01:00
Florian Bruhin
b55bb5dc6f Work around QUrl::query() not being available with PyQt 5.9.1
See https://www.riverbankcomputing.com/pipermail/pyqt/2017-November/039702.html
2017-11-06 08:50:03 +01:00
Florian Bruhin
2514b009af Use QUrlQuery to get log level on qute://log
This helps with
https://www.riverbankcomputing.com/pipermail/pyqt/2017-November/039702.html
2017-11-06 08:42:59 +01:00
Florian Bruhin
4d8ac7486c Go back to using subprocess.Popen for :restart
With subprocess.run, we wait until the subprocess has completed, which means the
parent process will hang on :restart.

Since we *don't* want to wait for the subprocess here, using subprocess.Popen
seems the right thing to do.

This was introduced in bb54a954fe / #3203
Probably doesn't affect #3210 and #3220.
2017-11-06 07:45:17 +01:00
Florian Bruhin
22f3fade24 Bump up default font size to 10pt
See #1585
2017-11-06 07:36:52 +01:00
Florian Bruhin
f52930c857 Make the window.hide_wayland_decoration option less special 2017-11-06 07:33:13 +01:00
Florian Bruhin
4fdf2d6f40 Update docs 2017-11-06 07:11:00 +01:00
Florian Bruhin
341e8ca864 Add a qt.highdpi setting
See #1585
2017-11-06 07:02:07 +01:00
Florian Bruhin
f222aa30a6 Merge remote-tracking branch 'origin/pr/3250' 2017-11-06 06:53:11 +01:00
Jay Kamat
ca0aa68f74
Fix icon width calculation for pinned tabs 2017-11-05 23:23:33 -05:00
Michal Siedlaczek
855d0312b5 Review fixes 2017-11-05 18:12:15 -05:00
Michael Hoang
966aa810df Set maxsplit to 0 on :buffer
Remove double quotes from tests
2017-11-06 06:41:43 +11:00
Ryan Roden-Corrent
db3b1aee0d Add default ctrl+c binding for completion yank.
By default, ctrl+c will yank the selection from the completion menu onto
the clipboard, and ctrl+shift+c will yank it onto the primary selection.

Unfortunately ctrl+y was already taken by rl-yank (which,
counter-intuitively to vim users, will paste the last deleted text).
2017-11-05 11:14:28 -05:00
Ryan Roden-Corrent
bb63f9fd92 Implement completion-item-yank.
Yank the text from the first column of the completion menu.
Resolves #1588.
2017-11-05 11:07:38 -05:00
Michal Siedlaczek
3ac2cfdf73 Support updating dictionaries and removing old versions. 2017-11-04 18:16:05 -04:00
Panagiotis K
5215321e64 Error handling, better code quality.
Handling of os errors raised during parent
directory creation.
2017-11-04 20:17:35 +02:00
Florian Bruhin
87c339587f Release v1.0.3
(cherry picked from commit fc63cea91790ddfc4b7fe2ef590de83a3c31dd39)
2017-11-04 17:05:05 +01:00
Florian Bruhin
5689a3c0dc Fix unbinding default keys twice
When doing :unbind with a default keybinding the first time, it gets inserted
into bindings.commands with None as value.

When then doing :unbind a second time, instead of just leaving that None value
as-is, we removed it again (because it got treated as a custom binding).

Fixes #3162
2017-11-04 15:17:19 +01:00
Michal Siedlaczek
2dc0115c81 Load the newest version of the dictionary. 2017-11-03 19:20:31 -04:00
Michal Siedlaczek
16ad9182f1 Add en-AU (Australia) to the list of valid languages 2017-11-03 17:24:33 -04:00
Florian Bruhin
c22a27d47f Add missing trailing dots
(cherry picked from commit 5f43b02badc20a4fc67931ab6e76f1050ab283aa)
2017-11-03 15:03:05 +01:00
Florian Bruhin
864249d798 Merge remote-tracking branch 'origin/pr/3181' 2017-11-03 15:02:27 +01:00
Florian Bruhin
0f28804032
Merge pull request #3237 from rcorre/completionsort
Fix completion sorting
2017-11-03 14:36:42 +01:00
Florian Bruhin
1536c098cf
Merge pull request #3215 from deewakar/issue3161
Add trailing slash to qute://help pages
2017-11-03 11:49:31 +01:00
Ulrik de Muelenaere
ce1494e5ec Update stylesheet.js to ES6 2017-11-03 12:17:35 +02:00
Ulrik de Muelenaere
72c57d16f4 Merge branch 'master' into stylesheet 2017-11-03 12:13:52 +02:00
Florian Bruhin
d53a96d9f2
Merge pull request #3208 from 7lb/refactor/make_completer_less_stateful
[RDY] Make completer less stateful
2017-11-03 10:47:52 +01:00
Florian Bruhin
be325853d8 Revert "Inject JS into the profile"
This reverts commit acfb3aa26f.

The related code doesn't really belong in webenginesettings.py after all, and
for some reason I don't understand right now this breaks tests in
javascript.feature because window._qutebrowser is undefined when running them.
2017-11-03 09:59:00 +01:00
Florian Bruhin
25bda66260
Merge pull request #3191 from gyorb/refactor/enum
use Enum start number
2017-11-03 09:30:47 +01:00
Marcel Schilling
7e07f5c996 standardize placeholders in configdata descriptions
* Keep descriptions concise.
 * Prefer starting descriptions with a noun.
 * Don't explain that placeholders are placeholders/get replaced.
 * Introduce placeholder list by the following line:
   'The following placeholders are defined:'
 * List placeholders in a markdown-style list:
   '* `{<placeholder>}`: <description>.'
2017-11-03 08:48:30 +01:00
Marcel Schilling
c6d7509220 rephrase configdata descriptions
* see discussion of PR #3181
2017-11-03 08:44:11 +01:00
Marcel Schilling
87ec7a1a0b prefer nouns for configdata descriptions
* reserve interrogative words for selection type options
2017-11-03 08:44:11 +01:00
Marcel Schilling
aebe4c8f9e assume single user in configdata descriptions
* 'a user' -> 'the user'
2017-11-03 08:44:11 +01:00
Marcel Schilling
a6451c05d7 add missing units to configdata descriptions
* fixes #3171
2017-11-03 08:44:11 +01:00
Marcel Schilling
01b29cd640 use interrogative words for configdata descriptions
* for selections, use appropriate determiner/pro-adverb/pronoun:
   * 'When to [...].'
   * 'How to [...].'
   * 'Which [...] to [...].'
   * 'What [...] to [...].'
2017-11-03 08:44:11 +01:00
Marcel Schilling
0a908206bc avoid boolean redundancy in configdata descriptions
* 'Enable or disable [...]' -> 'Enable [...]'
What else? ---^^^^^^^
2017-11-03 08:44:11 +01:00
Marcel Schilling
494aceec45 use imperative mood for bools in configdata descriptions
* considers ConfirmQuit and BoolAsk in addition to Bool
2017-11-03 08:44:11 +01:00
Marcel Schilling
f76af6c949 define type before desc in configdata YAML file 2017-11-03 08:44:11 +01:00
Marcel Schilling
b187a83d59 avoid spaces before colons in confidata YAML file
* '  desc : [...]' -> '  desc: [...]'
space ----^      no space ----^
2017-11-03 08:44:11 +01:00
Marcel Schilling
56671e5787 avoid articles in configdata descriptions
* includes `valid_value` descriptions in addition to `desc` fields
2017-11-03 08:44:11 +01:00
Marcel Schilling
e744a7c25a avoid code duplication in configdata descriptions
* available placeholders are defined for tabs.title.format
 * tabs.title.format_pinned refers to that definition
 * window.title.format repeats the identical(!) definition
 * this replaces the repetion by another reference
2017-11-03 08:44:11 +01:00
Marcel Schilling
fe8b9519c8 avoid redundancy in configdata descriptions
* drop phrases referring to the settings themselves:
   * 'set ...'
   * 'control ...'
   * 'definitons of ...'
2017-11-03 08:44:11 +01:00
Marcel Schilling
fd52409d0c standardize units in configdata descriptions
* encapsulate units in parentheses: ('(in <unit>)')
 * move units right behind the corresponding noun
2017-11-03 08:44:11 +01:00
Marcel Schilling
e126faf8c1 prefer 'duration' in configdata descriptions 2017-11-03 08:44:11 +01:00
Marcel Schilling
7672fb5241 avoid abbreviations in configdata description
* chars -> characters
 * px -> pixels
 * ms -> milliseconds
 * regexes -> regular expressions

 * includes `valid_value` descriptions in addition to `desc` fields

ms_fix
2017-11-03 08:44:11 +01:00
Marcel Schilling
99ad1547bc break long lines in configdata YAML file
* max. 79 chars (as per PEP8)
 * two long lines remain (as I didn't know how to safely break them):

>    389      - "http://malwaredomains.lehigh.edu/files/justdomains.zip"
> -> 390      - "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext"
>    391    type:
> --
>   2222        Sh: open qute://history
> ->2223        xx: config-cycle statusbar.hide ;; config-cycle tabs.show always switching
>   2224        xt: config-cycle tabs.show always switching
2017-11-03 08:44:11 +01:00
Marcel Schilling
31e7d8dd3f fix capitalization in configdata descriptions
* url -> URL
 * os -> OS
 * Page Cache -> page cache
 * Spatial Navigation -> spatial navigation
2017-11-03 08:44:11 +01:00
Marcel Schilling
a55d12bf70 add missing periods (.) to configdata descriptions
* includes `valid_value` descriptions in addition to `desc` fields
2017-11-03 08:44:11 +01:00
Marcel Schilling
0c01d9b61a fixed typos in configdata descriptions 2017-11-03 08:44:11 +01:00
Ryan Roden-Corrent
47447c047a Ensure completions are sorted after filtering.
I previously removed the sorting logic from SortFilter thinking it was
unnecessary if we construct the model with a sorted list. However, this
only worked when no pattern was set, and the items are misordered as
soon as a pattern is input.

This patch reintroduces alpha-sorting, which can be disabled by passing
sort=False to the ListCategory constructor. The session completion test
had to be tweaked as it simulated the incorrect assumption that the
session list is not alpha-ordered; sessions come out of the
session-manager pre-sorted so we may as well use alpha-sorting in the
session completion model.

Resolves #3156.
2017-11-02 22:10:00 -04:00
Florian Bruhin
acfb3aa26f Inject JS into the profile
Closes #3216
2017-11-02 21:59:22 +01:00
Florian Bruhin
a14ef88acf Remove some obsolete/deprecated eslint customizations 2017-11-02 20:00:29 +01:00
Florian Bruhin
1cf66976d2 Merge remote-tracking branch 'origin/pr/3225' 2017-11-02 19:43:04 +01:00
Florian Bruhin
bb208f4e77 Un-hide :open-editor
It can be used in normal mode as well, and it's nice to have it discoverable.
Fixes #3235.
2017-11-02 19:32:45 +01:00
Florian Bruhin
5469a238de Fix docs for new editor replacements
See #3100
2017-11-02 19:30:47 +01:00
Gyorgy Orban
98c6b49cde use enum module instead or usertypes.enum
Remove the usertypes.enum from the source and use
the standard enum module instead.
Enum start number is available since python 3.5
2017-11-02 18:56:11 +01:00
plexigras
6e624bcd3c
Merge branch 'master' into es6ify-js 2017-11-02 16:44:25 +01:00
Florian Bruhin
9a69ccc9e3 Merge remote-tracking branch 'origin/pr/3100' 2017-11-02 11:32:45 +01:00
Florian Bruhin
3385585ca5 Merge remote-tracking branch 'origin/pr/3203' 2017-11-02 11:02:49 +01:00
Florian Bruhin
f620ffd9d4 Merge remote-tracking branch 'origin/pr/3228' 2017-11-02 09:14:49 +01:00
Florian Bruhin
1c39715267 Clarify qute://configdiff/old title 2017-11-01 22:36:59 +01:00
Gyorgy Orban
bb54a954fe use subprocess run
The usage of subprocess.run is recommended since python 3.5.
Popen, check_call, call and check_output calls were replaced with run.
2017-11-01 09:59:32 +01:00
Jay Kamat
cb7e6ab02d
Abort pinned tab prompt if tab is destroyed
Closes #3223
2017-10-31 19:07:01 -04:00
Luca Benci
24231ae405 Remove unnecessary parens 2017-10-31 23:22:17 +01:00
Luca Benci
bc0c877b87 Formatting 2017-10-31 23:21:37 +01:00
Luca Benci
370405c0ed Remove assert 2017-10-31 23:20:13 +01:00
Luca Benci
dcc53026a3 Stay within 79 columns 2017-10-31 23:14:07 +01:00
plexigras
fa8476f762 keep old pac_utils.js 2017-10-31 16:40:09 +01:00
plexigras
905c984148 change some lambdas to functions 2017-10-31 12:54:26 +01:00
plexigras
d4d791f14e es6ified js 2017-10-31 11:53:35 +01:00
Florian Bruhin
0b86b302a2 pylint: Turn off some more too-many-* stuff globally
Humans are just better at judging what's okay here than a machine.
2017-10-31 07:35:00 +01:00
Florian Bruhin
e9483bc485 Merge remote-tracking branch 'origin/pr/3122' 2017-10-31 07:05:38 +01:00
dwagle
f70740cc3a set original query parameters if any before redirecting to new_url 2017-10-31 11:47:06 +05:45
Ulrik de Muelenaere
95b41b311f Disable ESLint no-bitwise rule 2017-10-30 22:24:59 +02:00
Ulrik de Muelenaere
3adc2e0f83 Add filter to NodeIterator checking for styled nodes 2017-10-30 19:56:12 +02:00