Add host placeholder to window and tab title formats

This commit is contained in:
Daryl Finlay 2016-06-10 19:45:36 +01:00
parent 5c1401b0a1
commit 054e9ab439
6 changed files with 41 additions and 15 deletions

View File

@ -229,6 +229,7 @@ Contributors, sorted by the number of commits in descending order:
* HalosGhost
* Gregor Pohl
* Eivind Uggedal
* Daryl Finlay
* Daniel Lu
* Arseniy Seroka
* Andy Balaam

View File

@ -637,6 +637,7 @@ The format to use for the window title. The following placeholders are defined:
* `{title_sep}`: The string ` - ` if a title is set, empty otherwise.
* `{id}`: The internal window ID of this window.
* `{scroll_pos}`: The page scroll position.
* `{host}`: The host of the current web page.
Default: +pass:[{perc}{title}{title_sep}qutebrowser]+
@ -1153,6 +1154,7 @@ The format to use for the tab title. The following placeholders are defined:
* `{index}`: The index of this tab.
* `{id}`: The internal tab ID of this tab.
* `{scroll_pos}`: The page scroll position.
* `{host}`: The host of the current web page.
Default: +pass:[{index}: {title}]+

View File

@ -330,7 +330,7 @@ def data(readonly=False):
('window-title-format',
SettingValue(typ.FormatString(fields=['perc', 'perc_raw', 'title',
'title_sep', 'id',
'scroll_pos']),
'scroll_pos', 'host']),
'{perc}{title}{title_sep}qutebrowser'),
"The format to use for the window title. The following "
"placeholders are defined:\n\n"
@ -340,7 +340,8 @@ def data(readonly=False):
"* `{title_sep}`: The string ` - ` if a title is set, empty "
"otherwise.\n"
"* `{id}`: The internal window ID of this window.\n"
"* `{scroll_pos}`: The page scroll position."),
"* `{scroll_pos}`: The page scroll position.\n"
"* `{host}`: The host of the current web page."),
('hide-mouse-cursor',
SettingValue(typ.Bool(), 'false'),
@ -627,7 +628,7 @@ def data(readonly=False):
('title-format',
SettingValue(typ.FormatString(
fields=['perc', 'perc_raw', 'title', 'title_sep', 'index',
'id', 'scroll_pos']), '{index}: {title}'),
'id', 'scroll_pos', 'host']), '{index}: {title}'),
"The format to use for the tab title. The following placeholders "
"are defined:\n\n"
"* `{perc}`: The percentage as a string like `[10%]`.\n"
@ -637,7 +638,8 @@ def data(readonly=False):
"otherwise.\n"
"* `{index}`: The index of this tab.\n"
"* `{id}`: The internal tab ID of this tab.\n"
"* `{scroll_pos}`: The page scroll position."),
"* `{scroll_pos}`: The page scroll position.\n"
"* `{host}`: The host of the current web page."),
('title-alignment',
SettingValue(typ.TextAlignment(), 'left'),

View File

@ -182,6 +182,11 @@ class TabbedBrowser(tabwidget.TabWidget):
scroll_pos = '{:2}%'.format(y)
fields['scroll_pos'] = scroll_pos
try:
fields['host'] = self.current_url().host()
except qtutils.QtValueError:
fields['host'] = ''
fmt = config.get('ui', 'window-title-format')
self.window().setWindowTitle(fmt.format(**fields))
@ -231,14 +236,8 @@ class TabbedBrowser(tabwidget.TabWidget):
Return:
The current URL as QUrl.
"""
widget = self.currentWidget()
if widget is None:
url = QUrl()
else:
url = widget.cur_url
# It's possible for url to be invalid, but the caller will handle that.
qtutils.ensure_valid(url)
return url
idx = self.currentIndex()
return super().tab_url(idx)
def shutdown(self):
"""Try to shut down all tabs cleanly."""

View File

@ -22,7 +22,7 @@
import collections
import functools
from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QSize, QRect, QTimer
from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QSize, QRect, QTimer, QUrl
from PyQt5.QtWidgets import (QTabWidget, QTabBar, QSizePolicy, QCommonStyle,
QStyle, QStylePainter, QStyleOptionTab)
from PyQt5.QtGui import QIcon, QPalette, QColor
@ -121,6 +121,10 @@ class TabWidget(QTabWidget):
scroll_pos = '{:2}%'.format(y)
fields['scroll_pos'] = scroll_pos
try:
fields['host'] = self.tab_url(idx).host()
except qtutils.QtValueError:
fields['host'] = ''
fmt = config.get('tabs', 'title-format')
self.tabBar().setTabText(idx, fmt.format(**fields))
@ -205,6 +209,21 @@ class TabWidget(QTabWidget):
self.tabBar().on_change()
self.tab_index_changed.emit(index, self.count())
def tab_url(self, idx):
"""Get the URL of the tab at the given index.
Return:
The tab URL as QUrl.
"""
widget = self.widget(idx)
if widget is None:
url = QUrl()
else:
url = widget.cur_url
# It's possible for url to be invalid, but the caller will handle that.
qtutils.ensure_valid(url)
return url
class TabBar(QTabBar):

View File

@ -134,10 +134,12 @@ class FakeQApplication:
class FakeUrl:
"""QUrl stub which provides .path()."""
"""QUrl stub which provides .path(), isValid() and host()."""
def __init__(self, path=None):
def __init__(self, path=None, valid=True, host=None):
self.path = mock.Mock(return_value=path)
self.isValid = mock.Mock(returl_value=valid)
self.host = mock.Mock(returl_value=host)
class FakeNetworkReply:
@ -222,6 +224,7 @@ class FakeWebView(QWidget):
self.scroll_pos = (-1, -1)
self.load_status = webview.LoadStatus.none
self.tab_id = 0
self.cur_url = FakeUrl()
class FakeSignal: