diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 6d68f5257..da18e7110 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -49,6 +49,7 @@ import qutebrowser import qutebrowser.commands.utils as cmdutils import qutebrowser.config.config as config import qutebrowser.network.qutescheme as qutescheme +import qutebrowser.utils.message as message from qutebrowser.widgets.mainwindow import MainWindow from qutebrowser.widgets.crash import CrashDialog from qutebrowser.commands.keys import KeyParser @@ -124,13 +125,12 @@ class QuteBrowser(QApplication): self.searchparser.search_rev) self.mainwindow.status.cmd.returnPressed.connect( self.mainwindow.tabs.setFocus) - self.commandparser.error.connect(self.mainwindow.status.disp_error) self.searchparser.do_search.connect( self.mainwindow.tabs.cur.search) - self.keyparser.commandparser.error.connect( - self.mainwindow.status.disp_error) self.keyparser.keystring_updated.connect( self.mainwindow.status.keystring.setText) + message.bridge.error.connect(self.mainwindow.status.disp_error) + message.bridge.info.connect(self.mainwindow.status.disp_tmp_text) self.mainwindow.show() self._python_hacks() @@ -175,6 +175,7 @@ class QuteBrowser(QApplication): os.environ['QT_FATAL_WARNINGS'] = '1' self.setApplicationName("qutebrowser") self.setApplicationVersion(qutebrowser.__version__) + message.init() def _init_cmds(self): """Initialisation of the qutebrowser commands. diff --git a/qutebrowser/commands/parsers.py b/qutebrowser/commands/parsers.py index 49d19d264..fabbc35ea 100644 --- a/qutebrowser/commands/parsers.py +++ b/qutebrowser/commands/parsers.py @@ -24,6 +24,7 @@ from PyQt5.QtWebKitWidgets import QWebPage import qutebrowser.config.config as config import qutebrowser.commands.utils as cmdutils +import qutebrowser.utils.message as message from qutebrowser.commands.exceptions import (ArgumentCountError, NoSuchCommandError) @@ -108,7 +109,7 @@ class SearchParser(QObject): self.do_search.emit(self._text, self._flags) -class CommandParser(QObject): +class CommandParser: """Parse qutebrowser commandline commands. @@ -116,16 +117,9 @@ class CommandParser(QObject): _cmd: The command which was parsed. _args: The arguments which were parsed. - Signals: - error: Emitted if there was an error. - arg: The error message. - """ - error = pyqtSignal(str) - def __init__(self, parent=None): - super().__init__(parent) self._cmd = None self._args = [] @@ -205,9 +199,6 @@ class CommandParser(QObject): True if command was called (handler returnstatus is ignored!). False if command wasn't called (there was an ignored exception). - Emit: - error: If there was an error parsing a command. - """ if ';;' in text: retvals = [] @@ -219,14 +210,14 @@ class CommandParser(QObject): self._check() except ArgumentCountError: if ignore_exc: - self.error.emit("{}: invalid argument count".format( + message.error("{}: invalid argument count".format( self._cmd.name)) return False else: raise except NoSuchCommandError as e: if ignore_exc: - self.error.emit("{}: no such command".format(e)) + message.error("{}: no such command".format(e)) return False else: raise diff --git a/qutebrowser/config/config.py b/qutebrowser/config/config.py index 94cafdf31..0c452d045 100644 --- a/qutebrowser/config/config.py +++ b/qutebrowser/config/config.py @@ -33,6 +33,7 @@ from configparser import ConfigParser, ExtendedInterpolation #from qutebrowser.utils.misc import read_file import qutebrowser.config.configdata as configdata import qutebrowser.commands.utils as cmdutils +import qutebrowser.utils.message as message config = None state = None @@ -166,8 +167,10 @@ class Config: @cmdutils.register(name='get', instance='config', completion=['setting'], split_args=False) - def get_wrapper(self, sectopt): - """Wrapper for the get-command to have section/option in one arg. + def get_wrapper(self, secopt): + """Get the value from a section/option. + + Wrapper for the get-command to have section/option in one arg. Arguments: secopt: Section and option, delimited by a space. @@ -176,7 +179,10 @@ class Config: The value of the section/option. """ - return self.get(*sectopt.split()) + sect, opt = secopt.split() + val = self.get(sect, opt) + message.info("{} {} = {}".format(sect, opt, val)) + def get(self, section, option, fallback=_UNSET, raw=False): """Get the value from a section/option. diff --git a/qutebrowser/utils/message.py b/qutebrowser/utils/message.py new file mode 100644 index 000000000..d5e794884 --- /dev/null +++ b/qutebrowser/utils/message.py @@ -0,0 +1,57 @@ +# Copyright 2014 Florian Bruhin (The Compiler) +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see . + +"""Message singleton so we don't have to define unneeded signals.""" + +from PyQt5.QtCore import QObject, pyqtSignal + + +class MessageBridge(QObject): + + """Bridge for messages to be shown in the statusbar.""" + + error = pyqtSignal(str) + info = pyqtSignal(str) + + def __init__(self, parent=None): + print("=====> initializing bridge") + super().__init__(parent) + + +bridge = None + + +def init(): + """Initialize the global MessageBridge. + + This needs to be done by hand because the import time is before Qt is ready + for everything. + + """ + + global bridge + bridge = MessageBridge() + + +def error(message): + """Display an error message in the statusbar.""" + bridge.error.emit(message) + + +def info(message): + """Display an info message in the statusbar.""" + bridge.info.emit(message)