diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 190a09aae..583b17ff9 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -56,6 +56,7 @@ def main(): cmds['print'].signal.connect(mw.tabs.print_act) cmds['scrolldown'].signal.connect(mw.tabs.scroll_down_act) cmds['scrollup'].signal.connect(mw.tabs.scroll_up_act) + cmds['undo'].signal.connect(mw.tabs.undo_close) kp.from_cmd_dict(cmds) mw.show() diff --git a/qutebrowser/commands/commands.py b/qutebrowser/commands/commands.py index 16499cc8c..1a0f9c857 100644 --- a/qutebrowser/commands/commands.py +++ b/qutebrowser/commands/commands.py @@ -64,3 +64,8 @@ class ScrollUp(Command): nargs = 0 key = 'k' signal = pyqtSignal() + +class Undo(Command): + nargs = 0 + key = 'u' + signal = pyqtSignal() diff --git a/qutebrowser/widgets/browser.py b/qutebrowser/widgets/browser.py index 2eebf0903..7970203cc 100644 --- a/qutebrowser/widgets/browser.py +++ b/qutebrowser/widgets/browser.py @@ -7,6 +7,7 @@ import logging class TabbedBrowser(TabWidget): tabs = [] cur_progress = pyqtSignal(int) + url_stack = [] def __init__(self, parent): super().__init__(parent) @@ -29,10 +30,18 @@ class TabbedBrowser(TabWidget): tab = self.tabs[self.currentIndex()] tab.openurl(url) + @pyqtSlot() + def undo_close(self): + if self.url_stack: + self.tabopen(self.url_stack.pop()) + @pyqtSlot() def close_act(self): if len(self.tabs) > 1: idx = self.currentIndex() + # FIXME maybe we should add the QUrl object here and deal with QUrls everywhere + # FIXME maybe we actually should store the webview objects here + self.url_stack.append(self.tabs[idx].url().url()) self.tabs.pop(idx) self.removeTab(idx) else: