Jump to content

Recommended Posts

Ok. One more attempt to make the workflow for Anki cards generating. Or rather filling into Anki fields the content via Alfred. For me this way much handy than native Anki app. Obviously, it's not a full replacement for all cases. Something like Anki-Express.

 

Anki: Powerful, intelligent flash cards.

 

anki card generator: Create New Cards into any Decks with any "Note Type".

image.png.e2f05bfd698f9178a80b5bbec933f3d5.png

 

image.png.f23cc748d630e12803f60667e34e7bd1.png

 

 

Install

$ npm install --global alfred-anki

or as anki.alfredworkflow

 

 

Requires: Node.js 7.6+, Alfred Powerpack, Anki intelligent flashcards, AnkiConnect plugin for Anki

Also you can consider DrLulz/Anki-Templates

Usage

On the card fields:

  • hit ⌃ + ↩ to remember last input after created card.
  • hit ⌃ + ↩ one more time to toggle switch this option
  • hit ⌥ + ↩ to reset text from all fields
  • hit (shift) to preview parsed fields of the card
  • for line break type '\n' (with space or without), also should be handy to use 'Alfred's snippets'.
  • to add an image from clipboard use Alfred snippet >>img needs install pngpaste
  • check out another Alfred's snippets

 


  • To use your own icons for your Model's fields just you should call the png files the same as fields [name-of-field].png and put it into icons folder of this Workflow directory. Recommended use two instances of each icon where second icon (with some mark) will be called as [name-of-field]_marked.png for "remember last import" option.

 

ToDo

  •   Add sound to the field. (needs something universal)
  •   Add to the card and move the local image file to the foldercollection.media via Alfred Snippet

 

p.s. It would be great to hear some more feature ideas to improve workflows like this.

 

Edited by bikeNik
update to v1.2.0

Share this post


Link to post

Update: Added Markdown-it  library for use markdown. This awesome library works with Syntax highlighting (highlighjs.org)

To quick add some markdown highlighting code into Anki field via Alfred:

```js
function $initHighlight(block, cls) {
  try {
    if (cls.search(/\bno\-highlight\b/) != -1)
      return process(block, true, 0x0F) +
             ` class="${cls}"`;
  } catch (e) {
    /* handle exception */
  }
  for (var i = 0 / 2; i < classes.length; i++) {
    if (checkCondition(classes[i]) === undefined)
      console.log('undefined');
  }
}

export  $initHighlight;
```

I use a little lifehack with Alfred's snippet trigger (which has line breaks). Cause I suppose Alfred doesn't allow to carry a new line of in his input's field. 

Edited by bikeNik

Share this post


Link to post
6 minutes ago, bikeNik said:

Cause I suppose Alfred doesn't allow to carry a new line of in his input's field.

 

You can enter a newline into Alfred's query box, just not by hitting the RETURN key.

Share this post


Link to post

😎 ) And what would replace RETURN key.? 

.. I mean It works only when I paste text with line breaks. 

Edited by bikeNik

Share this post


Link to post
14 minutes ago, deanishe said:

I suppose you could also have your script expand escapes, so you could enter \n for a newline.

 

 

mm.. I don't think so. The point is, I need to see this new line in Alfred's query box with Large-Type (⌘L). And it won't convenient to edit the current field. So I think to make the trigger snippet like (>>n) which contains line break - would be better. I'm just pasting empty line break.

Edited by bikeNik

Share this post


Link to post

Snippet is good, too.

 

1 minute ago, bikeNik said:

I need to see this new line in Alfred's query box with Large-Type (⌘L)

 

⌘L directly from the query box? Otherwise, there'd always be the chance to put a script to replace the \n (or whatever) before it reaches the Large Type.

 

I was thinking of escapes as it would make it much easier to edit the query again in Alfred, as it'd be on one line.

Share this post


Link to post

At the end of the end in practice, the method suggested by Deanishe works better. Cause it doesn’t take clipboard.

I combine (‘\n ’) with snippets.

Workflow updated.

Share this post


Link to post

Update: Added a preview of parsed fields of the card by  [shift]. The data is updated every time when the field text will save.

 

930354685_Screenshot2019-02-22at00_37_58.thumb.png.cebf5ddd0e692430e50b19522f3d78df.png

Share this post


Link to post

Hi, love your workflow, would be great if it worked with alfred 4, though. Do you have any plans to update it?

Share this post


Link to post
2 hours ago, AZK said:

Do you have any plans to update it?

Thanks. Yes, in near future. I'm busy now a little. Sorry.

Share this post


Link to post
Posted (edited)

was updated:

- moved the database to /Users/…/Library/Application Support/Alfred/Workflow Data/org.bikenik.anki

- update for Alfred 4

 

(please, save (backup) your data which in the workflow folder (json files) before updating)

Edited by bikeNik
p.s.

Share this post


Link to post
Posted (edited)

@bikeNik Could you clarify how can I install your workflow? From your instructions `npm install --global alfred-anki` does nothing for me. I can see it installed to /usr/local/lib/node_modules/alfred-anki but there are no changes in Alfred. Other link "anki.alfredworkflow" sends me to github releases page, and there are no .alfredworkflow file inside, only source code

Edited by Artyom

Share this post


Link to post

Downloaded latest update and ankiconnect but im getting a message saying waiting-for-refresh. Nothing happens when I use the refresh under settings, would appreciate some advice!

Share this post


Link to post
On 10/21/2019 at 3:58 PM, CuteCat said:

Downloaded latest update and ankiconnect but im getting a message saying waiting-for-refresh. Nothing happens when I use the refresh under settings, would appreciate some advice!

 

@CuteCat

 

For my WF I changed the next section in python files (__init__.py) in AnkiConnect add-on: 

 

    @api()
    def loadProfile(self, name):
        if name not in self.window().pm.profiles():
            # return False
            return self.window().pm.profiles()
        if not self.window().isVisible():
            self.window().pm.load(name)
            self.window().loadProfile()
            self.window().profileDiag.closeWithoutQuitting()
        else:
            cur_profile = self.window().pm.name
            if cur_profile != name:
                self.window().unloadProfileAndShowProfileManager()
                self.loadProfile(name)
        # return True
        return self.window().pm.profiles()

I changed lines in comments - ("return False" & "return True")

Edited by bikeNik

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...