Note editor

Notes

The notes area consists of two interacting views: on the left the note list with all notes, and on the right the editor for the selected note. On iPad and Mac you see both columns side by side; on the Mac the module list is added on the left as a third column whose width you can drag. On the iPhone the list appears first, and tapping a note pushes the editor into view. The back arrow at the top left leaves the notes area again; on the Mac you do this instead via the permanently visible module list.

Two kinds of notes

There are two modes, differing in the meaning of the date and in the workflow for creating a note.

Timeslot notes belong to a single timeslot and are tied to its sessions. A note's date is the session day on which it was created; each session day carries exactly one note. The editor title therefore shows the timeslot name and the session date.

Module notes belong to the entire module, independent of individual sessions or timeslots. Here you record whatever concerns the module as a whole. The date is not a session but the modification date: it is updated automatically with every text change and cannot be set by hand. That is why several notes on the same day are possible.

Structure of the note list

The list shows all notes chronologically, the most recent at the top. For easier orientation they are grouped into dated sections: Later (dated in the future), Last 7 Days, then the months of the current year (descending), and finally the past years (descending). Only sections with content appear. If there are no notes yet, it reads No notes yet.

Each row is styled as a small card: at the top, in bold, the note's first line of text as its title; below it the date and, next to it — secondary and on a single line — the second line of text as a preview. If a note is still empty, it reads No note. The selected row is subtly highlighted.

Creating new notes

The plus button at the top right of the note list creates a new note. The workflow depends on the kind.

For module notes, a new, empty note is created immediately with the current time as its modification date; it opens right away for editing.

For timeslot notes, the app asks which session the note refers to, since such a note always belongs to a timeslot session. If today itself falls on a session, the note is created for today without asking. Otherwise the dialog Create note for which session? appears, offering the most recent past session and the next session (each with its date) as well as Cancel. If exactly one of the two sessions already has a note, the app creates the new one for the other without asking. If a note already exists for the chosen day, it is selected instead of creating a second one.

Edit mode of the list

The Edit button at the top right appears as soon as there are notes. In both modes you can delete notes there — either via edit mode or directly by swiping a row to the left. For timeslot notes, each row's date additionally becomes a date picker in edit mode, with which you can retroactively correct a note's session reference. For module notes, the date remains the non-editable modification date.

Deleted notes are not lost for good: they move to a trash for their respective context. As long as something is in it, the More menu (three dots) shows the entry Restore note, which brings back the most recently deleted note of the same context.

The note editor

The editor edits the raw Markdown source in a live preview: the line containing the cursor stays visible as raw source, while all other lines are shown formatted. This way you see your formatting take effect but can still edit the markup at any time as soon as you enter the line. What is saved is always the raw source.

When you open a note, the cursor jumps to the position last used in that note, or to the end of a new or empty note, and the keyboard comes up immediately, so you can start typing without tapping first. If you change a note on another device, the app reconciles the state via iCloud; an already-open editor adopts the incoming text. To dismiss the keyboard again, swipe down in the note text — it follows your finger as you drag (as in Mail or Messages) and frees up the full screen for reading.

Protecting text from Markdown

Markdown characters take effect even in the middle of a word — so in don't_give_up, for instance, the part between the underscores becomes italic. When that is not what you want, wrap the text in question in double percent signs: %%don't_give_up%%. Inside %%…%%, all Markdown markup (*, _, ` `, ==, ~~) is left untouched; the %% themselves are hidden in the formatted lines — like other markers — and reappear as soon as the cursor enters the line. Markup that was already started **before** the opening %% keeps working normally: in Note: %%a_b%% everything is italic while the _ is left untouched. Hashtags are still recognized and highlighted inside %%…%%`.

Hashtags and suggestions

In a note you can set hashtags — words prefixed with #, such as #done or #finished. They are highlighted in color throughout, in the formatted line as well as in the raw one, and later serve as anchors for filter evaluations.

As you start typing a hashtag, a suggestion list appears just above the input area. It shows all already-known hashtags that match what you have typed so far (prefix comparison, case-insensitive). The suggestions are deliberately gathered context-wide — for timeslot notes from all timeslot notes, for module notes from all module notes of every module — so that you keep your keywords consistent. Tapping a suggestion inserts the complete hashtag and places the cursor after it. The tag you are currently typing yourself is not offered as its own suggestion. If, after the #, you type an opening parenthesis for an attribute (such as #tag(...)), no more name suggestions are offered.

A special hashtag links to a web page: #link(URL|Title), for example #link(https://apple.com/support|Handbook). The URL comes first, followed after the separator | by the title. If you give only a URL (without |), the URL itself is shown; if you give a URL and a title, only the title appears; if there is no URL before the |, the title is shown as well. So that long addresses don't clutter the text, the editor shows only this display text on every line except the one being edited — the parentheses, the URL, and the separator | are then barely visible. As soon as the cursor moves into the line, the full tag reappears and can be edited. When the cursor sits inside such a link, an Open link button appears above the input area, opening the address in the default browser. If the address part lacks a scheme, https:// is added automatically. In the filter results list, too, links are reduced to their display text.

A #link can also reference a specific message in Apple Mail instead of a web page. To do so, the address part holds a message: address, for example #link(message://%3C…%3E|Subject). When the cursor sits inside such a tag, the button above the input area reads Open in Mail (envelope) instead of Open link; it brings the corresponding message to the front in Apple Mail. Opening the specific message works reliably only on the Mac.

The easiest way to create a mail link is by drag and drop: drag a message from Apple Mail into the editor. A #link(message://…|Subject) is created automatically at the drop location, with the message's subject inserted as the display text (the sender cannot be captured technically; you can add it to the title yourself if you like). If the note already contains an empty placeholder #link(), that one is filled instead of inserting a new tag — the exact drop location is then irrelevant.

Likewise, a #link can point to a file. The address part then holds a file: address, for example #link(file:///Users/…/Report.pdf|Report.pdf). When the cursor sits inside such a tag, the button above the input area reads Open file (document symbol) instead of Open link; it opens the file with the default application registered in the system. If the file cannot be opened — for example because no suitable application is installed or the file is no longer reachable — a notice dialog appears.

The easiest way to create a file link is by drag and drop: drag a file from the Finder (or the Files app) into the editor. A #link(file://…|filename) is created automatically at the drop location, with the file name inserted as the display text. Only the file path is stored; the file itself is neither copied into the note nor transferred via iCloud. A file link therefore opens reliably only on the device where the file resides (usually the Mac).

A #link can also point to another note — within the same module or across module and timeslot boundaries. The address part then holds a note: address with the target note's unique identifier, for example #link(note://…|Seminar – First line of the note). The display text is the module or timeslot name together with the title (the first line) of the target note; it is a snapshot taken when the link is created. Because the link is resolved via the identifier, it stays valid even if the target note's title changes later.

You create a note link from the formatting toolbar (Mac and iPad only): tap the link symbol and choose Link note … from the menu. A searchable picker opens listing all notes — grouped by module or timeslot and searchable by title and context. Tapping a note inserts the finished link at the cursor position; the note currently being edited is not offered for selection.

When the cursor sits inside a note link, the button above the input area reads Open note (note symbol). It navigates app-wide to the linked note — switching to another module or timeslot if necessary — and selects it there. If the target note has since been deleted, the notice Note not found appears.

Date attributes

A hashtag can carry a date in its parentheses — the attribute then begins with d followed by digits: #appointment(d0907) stands for September 7. Four digits are mmdd in the current year, six yymmdd, and eight yyyymmdd. Such date attributes can be evaluated in the filter bar (for example to filter or sort by date).

The filter line

Below the editor is an input line for filter expressions. With it you search and evaluate the notes of the current context — for example all lines containing a particular hashtag, or a counted figure. The field grows with multi-line expressions up to a maximum; when empty it shows the placeholder Filter expression.

What "the current context" comprises here depends on the kind of notes: for module notes the filter searches and evaluates exactly the module notes of the currently open module; for timeslot notes only the notes of the currently open timeslot. A filter therefore only ever accesses the set of notes the list on the left is currently showing, and never reaches across module or timeslot boundaries. This sets it apart from the deliberately context-wide hashtag suggestions (see above), which for consistency draw on all like-kind notes across every module.

You trigger the evaluation with the Enter/Return key. The line is then cleared and the editor splits: the note stays on top, below it the filter results list appears, with a draggable divider (splitter) in between whose position is remembered per device. The header of the results list states the number of matches and the triggering filter expression; the X closes the list and folds the split away again. If the filter expression yields matching lines, they are listed with their date and formatted (most recent first); tapping a line opens the corresponding note above and jumps to the start of that line. A filter expression that yields a number (such as a count) shows the value instead; a faulty expression shows the error message.

Hashtags are colored in the filter line as well, and the same suggestion mechanism supports you as you type. The field automatically converts typographic quotation marks into straight ", so that text comparisons in the filter expression are preserved unchanged.

Filter history

Every submitted filter expression is kept in a history, including faulty ones; immediate repetitions of the same expression are not stored twice. As soon as there are entries, two arrows appear to the left of the input field: the up arrow brings back older expressions, the down arrow newer ones, into the input line. After the last entry, the down arrow takes one more step to the empty line. Bringing an expression back only inserts it — evaluation still happens only with Return, so you can adjust it beforehand. With a hardware keyboard you can also step through the history using the up and down arrow keys while the cursor is in the filter line. For a multi-line expression, the keys first move the cursor within the text; only on the first line does arrow-up switch to the older entry, and on the last line arrow-down to the newer one. The history applies to the current session only and is discarded when you close the notes area.

The trash button on the right clears the line with a single tap; it is grayed out when the line is empty.

Named filters

Frequently used expressions can be saved permanently as named filters. The funnel button at the far right opens a list that slides up from the bottom for this. Tapping an entry outside edit mode adopts its expression into the filter line and closes the list; here, too, evaluation happens only via Return.

The list shows two kinds: standard filters, which apply everywhere (globe symbol), and the own filters of the current context. These carry a context symbol — a list for module notes, a clock for timeslot notes — and appear only in their respective context. The globe symbol at the top of the list shows and hides the standard filters; the setting is per device and is active by default (highlighted capsule).

If there is a filter expression in the filter input line, a plus button appears at the top. It adopts the current filter expression as a new named filter of the current context, switches to edit mode, and places the cursor in the name field so you can give it a name right away. In edit mode the filters can be reordered, renamed, and — only your own, not the standard filters — deleted; the funnel on each row opens a dialog there for adjusting the stored filter expression. Named filters are kept permanently and are synced across your devices via iCloud.