Journey of finding ideal note-taking app

TL;DR: If you want to transfer your bear notes to markdown goto Move your bear notes, if you want to emulate Bear multi-tagging check Multitagging support.

Once upon a time I was using Bear.app for writing and organizing notes. It had really good features like multi-tagging and couple of other nice features like pseudo markdown support. Unfortunatelly a lot of things were bugged, developers slow in fixing them so I decided to move my notes from Bear to other platform.

Requirements

I wanted to have these features:

  • WYSWIG (What You See Is What You Get) editor with only 1 pane,
  • Notes should be kept / written in Markdown,
  • Support image pasting from clipboard,
  • Sync,
  • Support for nested tags(1),
  • Support for multi-tagging(2).

(1) Nested tags

We can have tree-like tags, i.e notes assigned to: tag1/sub1, will be also visible in tag1, but not in tag2/sub1 (defferent parent).

(2) Multi-tagging

Notes can belong to multiple tags, so they should be visible from multiple tag sub-trees.

Ideal doesn’t exists, but…

Finally I couldn’t find ideal substitute for Bear, so I decided to move into some WYSWIG Markdown editor which will nicely present meta-data for multi-tagging - I will take care about the rest of mine requirements.

I decided to move to Typora - it is not perfect, but it seems to work fine. Moving to editor based on directory tree (folders = tags) have one big disadvantage - we can’t have multiple tags (but nested tags are working nicely). I had idea how to overcome this issue.

Prerequirements

  1. Clone my repo bear2markdowntree.
  2. Follow step (1) and (2) from How to section.

Move your bear notes

First of all I created a concept of “main tag”, so if note have multiple tags (i.e tag1/sub1 and tag2/sub2) we have to choose which tag is more important to us. The main tag will be actually translated into directory structure in your notes directory and saved there! The rest of the tags will be added into note as YAML meta-data.

For example: you have exported bear note to $BEAR_DIR/note.md:

# Note

My note

#tag1/sub1 #tag2/sub2

After exporting this note with my script and selecting #tag1/sub1 as main tag, the note will be saved under $NOTES_DIR/tag1/sub1/note.md and it will look like this:

---
tags: ["tag1/sub1", "tag2/sub2"]
---
# Note

My note

Demo

Before running export-bear2typora.py don’t forget setup script by editing it:

# config dirs
NOTE_DIR = "Notes/"         # output dir
BEAR_DIR = "BearNotes/"     # input dir

Paths are relative to script path, during script execution you can be prompted for tag selection. During this you can also jump into python interactive session and fix tag name if something was wrongly matched (minimum knowledge of python is required) - tags are kept in tags array.

After this process you should have exported and fixed notes in your BEAR_DIR.

Multitagging support

This topic is actually nicely described in README. We can emulate multi-tags structure by symbolic links (but with some problems on Windows and in Typora) or by creating special file which I called index.

This file should be (re)generated with build-tags.py each time you decide to put some new file in your directory list.

Here you should edit only one variable (if you have NOTES_DIR relative to home directory):

HOME_USER = str(Path.home())
NOTES_DIR = HOME_USER + "/Dropbox/Notes/" # FIXME:  add path to your Notes folder (relative to $HOME)

If you want to use absoulte path change code to:

NOTES_DIR = "/root/home/notes/"

Additionally if you don’t want to see some tags, you can add them here:

# If you want ignore some tags in the final listing add them to this list
# WARNING: this feature is actually taking only subtag, 
#  Ex#1: you have note with tag: "dev/python/code-snippets"
#    if you decide to ignore tag "dev", then all subtags ("python", "code-snippets")  will be also ignored!
#  Ex#2: you have 2 notes with tags: note1: 'q/w/e', 'e/w/q' (you have the same subtab 'w', but in totally different subtrees)
#    Ignoring tag 'w' will affect BOTH subtrees, 
#    It isn't possible to ignore subtag only from specified tree! Ignoring "q/w" will not work!
IGNORE_TAGS = [] # FIXME

After running this script you should have index.md file generated in your NOTES_DIR.

Sync

This is the simplest step, just create Dropbox account, put your notes there and sync your notes across all devices!