Add host placeholder to window and tab title formats
This commit is contained in:
parent
5c1401b0a1
commit
054e9ab439
@ -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
|
||||||
|
@ -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}]+
|
||||||
|
|
||||||
|
@ -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'),
|
||||||
|
@ -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."""
|
||||||
|
@ -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):
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user