Anki 2 is a really amazing piece of software and I'd regard it as almost perfect. One of the major missing features is imho the ability to change the default keyboard shortcuts. If you want to change them or add new ones, you have to edit the source. Fortunately this process isn't too complicated because the whole application is written in Python. The disadvantage is, that you need to make the changes after each update of Anki again though, but if you memorize or write down the changes, it's not that annoying.

The change I always apply to all my Anki installations is the ability to control the reviewer via the arrow keys. So that'll serve as an example in this post.
The interface files are located in the sub-folder "aqt" of Anki's install-directory. What I'll do now is to open the file "reviewer.py". This file contains the code, that is run, when you review/study your words. To change the keys, you have to edit the keyhandler "_keyHandler". This method is run everytime you push a key on your keyboard. If you have this information, you should actually already be able to adjust the keys to your liking. The only thing, you could easily overlook is the usage of "evt.key()" vs. "key". While "evt.key()" directly compares the key events (click here for a list of all possible key events), the variable "key" contains the pressed character.

I hope, this info is useful to you and to complete this post, here's my keyhandler in the reviewer file, where it is possible to use the arrow keys to answer a card and the "arrow down"-key is used to show the next card when the answer is shown.

    def _keyHandler(self, evt):
        key = unicode(evt.text())
        if key == "e":
            self.mw.onEditCurrent()
        elif (key == " " or evt.key() in (Qt.Key_Return, Qt.Key_Enter, Qt.Key_Down)):
            if self.state == "question":
                self._showAnswerHack()
            elif self.state == "answer":
                self._answerCard(self._defaultEase())
        elif key == "r" or evt.key() == Qt.Key_F5:
            self.replayAudio()
        elif key == "*":
            self.onMark()
        elif key == "-":
            self.onBuryNote()
        elif key == "!":
            self.onSuspend()
        elif key == "V":
            self.onRecordVoice()
        elif key == "o":
            self.onOptions()
        elif key in ("1", "2", "3", "4"):
            self._answerCard(int(key))
        elif evt.key() == Qt.Key_Left:
            self._answerCard(1)
        elif evt.key() == Qt.Key_Down:
            self._answerCard(2)
        elif evt.key() == Qt.Key_Right:
            self._answerCard(3)
        elif evt.key() == Qt.Key_Up:
            self._answerCard(4)
        elif key == "v":
            self.onReplayRecorded()
        elif evt.key() == Qt.Key_Delete:
            self.onDelete()

I respect your privacy
I don't run any trackers on this site.

Your questionable browsing-history should remain between you and the NSA ;-)
Contact