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 * HalosGhost
* Gregor Pohl * Gregor Pohl
* Eivind Uggedal * Eivind Uggedal
* Daryl Finlay
* Daniel Lu * Daniel Lu
* Arseniy Seroka * Arseniy Seroka
* Andy Balaam * 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. * `{title_sep}`: The string ` - ` if a title is set, empty otherwise.
* `{id}`: The internal window ID of this window. * `{id}`: The internal window ID of this window.
* `{scroll_pos}`: The page scroll position. * `{scroll_pos}`: The page scroll position.
* `{host}`: The host of the current web page.
Default: +pass:[{perc}{title}{title_sep}qutebrowser]+ 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. * `{index}`: The index of this tab.
* `{id}`: The internal tab ID of this tab. * `{id}`: The internal tab ID of this tab.
* `{scroll_pos}`: The page scroll position. * `{scroll_pos}`: The page scroll position.
* `{host}`: The host of the current web page.
Default: +pass:[{index}: {title}]+ Default: +pass:[{index}: {title}]+

View File

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

View File

@ -182,6 +182,11 @@ class TabbedBrowser(tabwidget.TabWidget):
scroll_pos = '{:2}%'.format(y) scroll_pos = '{:2}%'.format(y)
fields['scroll_pos'] = scroll_pos fields['scroll_pos'] = scroll_pos
try:
fields['host'] = self.current_url().host()
except qtutils.QtValueError:
fields['host'] = ''
fmt = config.get('ui', 'window-title-format') fmt = config.get('ui', 'window-title-format')
self.window().setWindowTitle(fmt.format(**fields)) self.window().setWindowTitle(fmt.format(**fields))
@ -231,14 +236,8 @@ class TabbedBrowser(tabwidget.TabWidget):
Return: Return:
The current URL as QUrl. The current URL as QUrl.
""" """
widget = self.currentWidget() idx = self.currentIndex()
if widget is None: return super().tab_url(idx)
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
def shutdown(self): def shutdown(self):
"""Try to shut down all tabs cleanly.""" """Try to shut down all tabs cleanly."""

View File

@ -22,7 +22,7 @@
import collections import collections
import functools 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, from PyQt5.QtWidgets import (QTabWidget, QTabBar, QSizePolicy, QCommonStyle,
QStyle, QStylePainter, QStyleOptionTab) QStyle, QStylePainter, QStyleOptionTab)
from PyQt5.QtGui import QIcon, QPalette, QColor from PyQt5.QtGui import QIcon, QPalette, QColor
@ -121,6 +121,10 @@ class TabWidget(QTabWidget):
scroll_pos = '{:2}%'.format(y) scroll_pos = '{:2}%'.format(y)
fields['scroll_pos'] = scroll_pos fields['scroll_pos'] = scroll_pos
try:
fields['host'] = self.tab_url(idx).host()
except qtutils.QtValueError:
fields['host'] = ''
fmt = config.get('tabs', 'title-format') fmt = config.get('tabs', 'title-format')
self.tabBar().setTabText(idx, fmt.format(**fields)) self.tabBar().setTabText(idx, fmt.format(**fields))
@ -205,6 +209,21 @@ class TabWidget(QTabWidget):
self.tabBar().on_change() self.tabBar().on_change()
self.tab_index_changed.emit(index, self.count()) 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): class TabBar(QTabBar):

View File

@ -134,10 +134,12 @@ class FakeQApplication:
class FakeUrl: 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.path = mock.Mock(return_value=path)
self.isValid = mock.Mock(returl_value=valid)
self.host = mock.Mock(returl_value=host)
class FakeNetworkReply: class FakeNetworkReply:
@ -222,6 +224,7 @@ class FakeWebView(QWidget):
self.scroll_pos = (-1, -1) self.scroll_pos = (-1, -1)
self.load_status = webview.LoadStatus.none self.load_status = webview.LoadStatus.none
self.tab_id = 0 self.tab_id = 0
self.cur_url = FakeUrl()
class FakeSignal: class FakeSignal: