diff --git a/TODO b/TODO index a51f165ef..701c1df30 100644 --- a/TODO +++ b/TODO @@ -61,7 +61,6 @@ Improvements / minor features - Zoom with ctrl + mousewheel - Close tabs on right click - Up/Down not for history -- N for prev search match - search highlighting - readline like shortcuts (like C-w) for command prompt - max height for completion (be smaller if possible) diff --git a/qutebrowser/commands/managers.py b/qutebrowser/commands/managers.py index ddcf40459..71a40c1d7 100644 --- a/qutebrowser/commands/managers.py +++ b/qutebrowser/commands/managers.py @@ -129,6 +129,29 @@ class SearchManager(QObject): for _ in range(count): self.do_search.emit(self._text, self._flags) + @cmdutils.register(instance='searchmanager', hide=True) + def search_prev(self, count=1): + """Continue the search to the ([count]th) previous term. + + Args: + count: How many elements to ignore. + + Emit: + do_search: If a search should be started. + """ + if self._text is None: + return + # The int() here serves as a QFlags constructor to create a copy of the + # QFlags instance rather as a reference. I don't know why it works this + # way, but it does. + flags = int(self._flags) + if flags & QWebPage.FindBackward: + flags &= ~QWebPage.FindBackward + else: + flags |= QWebPage.FindBackward + for _ in range(count): + self.do_search.emit(self._text, flags) + class CommandManager: diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index a1da9f8bd..846e7f730 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -619,6 +619,7 @@ DATA = OrderedDict([ ('gg', 'scroll-perc-y 0'), ('G', 'scroll-perc-y'), ('n', 'search-next'), + ('N', 'search-prev'), ('i', 'enter-mode insert'), ('yy', 'yank'), ('yY', 'yank sel'),