Skip to content

Instantly share code, notes, and snippets.

@eshapard
Last active October 23, 2023 21:04
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eshapard/b15e0df7d115b20cb58f57f44ba17c08 to your computer and use it in GitHub Desktop.
Save eshapard/b15e0df7d115b20cb58f57f44ba17c08 to your computer and use it in GitHub Desktop.
Anki 2.0 addon. Prevents learning (and re-learning) cards from being removed from a filtered deck. This allows you to rebuild the deck while keeping the learning cards inside of it; bypassing the problems with Anki decks where learning cards are set back to 'new' or 'review' when they exit a filtered deck.
# Filter Safety
# Anki 2.0 addon
# Author EJS
# https://eshapard.github.io/
#
# Prevents cards in learning state from being moved out of a filtered deck
# when you rebuild it.
from anki.sched import Scheduler
#from aqt.utils import showInfo
def safeEmptyDyn(self, did, lim=None):
if not lim:
lim = "did = %s and type != 1 and queue != 1" % did
else:
lim = "%s and type != 1 and queue != 1" % lim
ret = origEmptyDyn(self, did, lim)
return ret
origEmptyDyn = Scheduler.emptyDyn
Scheduler.emptyDyn = safeEmptyDyn
@EliCodesForFun
Copy link

Godlike. I've been using filtered decks for years, but I just used the workaround by including a "is:due -is:learn" but it's not a perfect solution for cards that are in the re-learning queue in the filtered deck, which can get lost if you have to rebuild. Awesome fix!

@ArtappsLaurens
Copy link

Do you have any plans of porting this add on to 2.1? Would love that. Keep up the good work

@Geniusssmit
Copy link

Still waiting for 2.1 :)

@thiswillbeyourgithub
Copy link

Waiting for 2.1 port too :)

@eshapard
Copy link
Author

Sorry, I don't use Anki anymore, so I'll probably never get around to porting it to 2.1.

If anyone wants to take a crack at it, it might work if you rename it to init.py and drop it in a subdirectory under the 2.1 addons directory.

See: https://ankitects.github.io/addon-docs/#/porting2.0

@albo2albo
Copy link

I've just tried this under 2.1 and it appears to work, by more or less following eshapard's comment above on 24th Feb. Here's what I did:

  1. create a folder called filterSafety in the addons folder ie AppData\Roaming\Anki2\addons21\filterSafety
  2. in this folder create a file called __init__.py which contains lines 1 - 20 from filterSafety.py above.
  3. restart Anki

You should note that there are two underscores before and after 'init', as seen in point 2 above.

Hope this helps someone else.

Cheers

@thiswillbeyourgithub
Copy link

Am trying this too. Thanks for the quick tutorial @albo2albo !

If I don't come back here to complain then it probably works OR seems to work OR didn't cause major harm.

@justpeanuts
Copy link

justpeanuts commented Sep 28, 2023

Sorry, I don't use Anki anymore, so I'll probably never get around to porting it to 2.1.

Hi, just stumbled on this repo..
@eshapard mind saying what made you quit anki? what do you use instead? (Just curious.. sorry if it seems nosy.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment