diff --git a/ftl/core/preferences.ftl b/ftl/core/preferences.ftl index a2555992f..9be0b3e5d 100644 --- a/ftl/core/preferences.ftl +++ b/ftl/core/preferences.ftl @@ -19,6 +19,7 @@ preferences-preferences = Preferences preferences-scheduling = Scheduling preferences-show-learning-cards-with-larger-steps = Show learning cards with larger steps before reviews preferences-show-next-review-time-above-answer = Show next review time above answer buttons +preferences-spacebar-rates-card = Spacebar also answers card preferences-show-play-buttons-on-cards-with = Show play buttons on cards with audio preferences-show-remaining-card-count = Show remaining card count preferences-some-settings-will-take-effect-after = Some settings will take effect after you restart Anki. diff --git a/qt/aqt/forms/preferences.ui b/qt/aqt/forms/preferences.ui index fc2600a34..f66608d45 100644 --- a/qt/aqt/forms/preferences.ui +++ b/qt/aqt/forms/preferences.ui @@ -456,6 +456,19 @@ + + + + + 0 + 0 + + + + preferences_spacebar_rates_card + + + @@ -1125,6 +1138,7 @@ interrupt_audio showProgress showEstimates + spacebar_rates_card pastePNG paste_strips_formatting useCurrent diff --git a/qt/aqt/preferences.py b/qt/aqt/preferences.py index 53a3902b0..7d0229b5a 100644 --- a/qt/aqt/preferences.py +++ b/qt/aqt/preferences.py @@ -226,6 +226,12 @@ class Preferences(QDialog): self.form.minimalist_mode.setChecked(self.mw.pm.minimalist_mode()) qconnect(self.form.minimalist_mode.stateChanged, self.mw.pm.set_minimalist_mode) + self.form.spacebar_rates_card.setChecked(self.mw.pm.spacebar_rates_card()) + qconnect( + self.form.spacebar_rates_card.stateChanged, + self.mw.pm.set_spacebar_rates_card, + ) + hide_choices = [tr.preferences_full_screen_only(), tr.preferences_always()] self.form.hide_top_bar.setChecked(self.mw.pm.hide_top_bar()) diff --git a/qt/aqt/profiles.py b/qt/aqt/profiles.py index c15cbffce..f757355d8 100644 --- a/qt/aqt/profiles.py +++ b/qt/aqt/profiles.py @@ -531,6 +531,12 @@ create table if not exists profiles self.meta["minimalist_mode"] = on gui_hooks.body_classes_need_update() + def spacebar_rates_card(self) -> bool: + return self.meta.get("spacebar_rates_card", True) + + def set_spacebar_rates_card(self, on: bool) -> None: + self.meta["spacebar_rates_card"] = on + def hide_top_bar(self) -> bool: return self.meta.get("hide_top_bar", False) diff --git a/qt/aqt/reviewer.py b/qt/aqt/reviewer.py index ba870e8cf..d56402236 100644 --- a/qt/aqt/reviewer.py +++ b/qt/aqt/reviewer.py @@ -511,6 +511,11 @@ class Reviewer: ("2", lambda: self._answerCard(2)), ("3", lambda: self._answerCard(3)), ("4", lambda: self._answerCard(4)), + ("h", lambda: self._answerCard(1)), + ("j", lambda: self._answerCard(2)), + ("k", lambda: self._answerCard(3)), + ("l", lambda: self._answerCard(4)), + ("u", self.mw.undo), ("5", self.on_pause_audio), ("6", self.on_seek_backward), ("7", self.on_seek_forward), @@ -531,7 +536,7 @@ class Reviewer: def onEnterKey(self) -> None: if self.state == "question": self._getTypedAnswer() - elif self.state == "answer": + elif self.state == "answer" and aqt.mw.pm.spacebar_rates_card(): self.bottom.web.evalWithCallback( "selectedAnswerButton()", self._onAnswerButton )