beorg 2.4 will be available this week and introduces a number of new features. The biggest new feature is the inclusion of a Scheme based language into beorg. The other big enhancement is file versions.

Download beorg

Scheme scripting

Scheme is a language based on Lisp. If you are an Emacs Org mode user then you are probably at least semi-familiar with Emacs Lisp. beorg includes a Lisp variant closer to the Scheme programming language but looks and feels very similar to Emacs Lisp.

In this first release you can use Scheme to:

Create custom filters for use on the TODO tab.

Create your own toolbar for use when editing notes - this includes buttons which show lists of options and perform custom text modification.

Customise certain settings which aren’t available on the Settings tab. This includes defining a list of files to exclude from the agenda, which tab to start on and fonts to use in the editor.

There is a REPL available so you can type Scheme commands and see the results immediately. You can access this from the Settings tab and also gain access to documentation about using Scheme in beorg:

Any Scheme you want loaded when beorg starts can be stored in an init.org file. Anything enclosed in a block which looks like…

#+BEGIN_SRC scheme #+END_SRC

…will be extracted from the file and executed. As this is otherwise a normal org file you can include headings, etc to help organise your code.

The document export now includes syntax highlighting for some programming languages including Scheme:

If you want to take a look at the functions bundled with beorg which are used internally and for use in your own code you can view this from within the app:

The notes editor

The text editor for notes can now be customised using Scheme. By default a toolbar is defined for quick insertion of lists, perform basic text transformation and insert Scheme code blocks.

Custom filters

The TODO tab has a Filter button. There have been many requests from users for additional filters. Scheme in beorg 2.4 allows you to define your own filters.

Here is a snippet which when included in your init.org adds a new filter called Top Priority:

#+BEGIN_SRC scheme (filter-add "Top Priority" (lambda (item) (string=? (item-priority item) "A"))) #+END_SRC

Your custom filters will appear alongside the built-in filters.

You can turn off the built-in filters using:

#+BEGIN_SRC scheme (set! filter-include-default #f) #+END_SRC

Versions

beorg 2.4 makes a small change to how the sync works. In previous versions any modified files in beorg are uploaded to the server before any changed files on the server are downloaded. However if you are using WebDAV or Dropbox there was a small chance you may lose changes you had made which hadn’t been synced to beorg before modifications were made on your iPhone/iPad. In 2.4 beorg will always download any modified files from Dropbox/WebDAV/iCloud before uploading locally modified files.

So that local changes are never lost beorg now keeps multiple versions of each file. Every time you modify a file locally or sync a version from Dropbox/WebDAV/iCloud a new version will be created. beorg will try and use these versions to determine if there is a conflict and warn you if one occurs.

You can view all versions of a file by swiping from right to left on the file and choosing versions.

From this screen you can view any version (it will be read-only) or revert to that version.

Up to 7 days worth of versions will be kept after which older versions will be removed from your device. A future version of beorg may provide more control over this via a beorg extension available as an in-app purchase.