Smart Filters for Ulysses That Improve Your Writing Process

9 min read
  • In this article, you’ll find several examples of Ulysses filters for you to copy and adapt or use as inspiration.
  • Filters are like groups, but they don’t show sheets that were manually filed under them—they only show sheets which satisfy specific criteria.

Ulysses offers a powerful feature called “filters,” which allows you to filter your sheets based on various criteria. Think of them as groups or folders with superpowers. Instead of adding sheets to them by hand, filters automatically aggregate all sheets that match the specifications you define. But what can you use filters for in practice?

Ideas for handy filters

If you’re intrigued by filters in Ulysses but also unsure what they could be useful for, don’t worry. It might take a while to come across filters that improve your writing process. Here are some ideas you can copy to get started.

All the drafts

Currently, there is no way to designate sheets as drafts. But you can attach a keyword to them called “Draft.” To show only sheets that have this keyword attached to them, create a new filter with the following criteria:

  1. Keywords match > Draft
  2. Sheet > is regular sheet

Enable Match all conditions.

My recent ideas

Similar to the previous filter, you could also choose only those sheets that have the tag “Idea” attached to them. But we take it one step further by also requiring the sheet was created within the past 14 days.

  1. Keywords match > Idea
  2. Creation Date > is newer than 14 days
  3. Sheet > is regular sheet

Enable Match all conditions.

Find outdated articles

Since I sometimes write about technical subjects, some of my articles will eventually be outdated. To prevent this, I add information about the software I used in the creation of the article directly to its sheet. For example, I tagged the sheet I’m currently writing in with “macOS12” and “Ulysses24,” corresponding to the versions of macOS and Ulysses I’m using while writing this article.

When a new version comes out, I can check which articles might be outdated by creating a filter like this:

  1. Keywords match > macOS12, Ulysses24 > uncheck All
  2. Sheet > is regular sheet

Enable Match all conditions.

If you keep adding old versions to the list of tags in this filter, you can always summon a quick list of all outdated articles by clicking on that filter. You could also add one filter for the operating system and another one for the particular software. Or you could add a condition that matches only sheets also containing images (if you want to make sure all your screenshots are up-to-date).

Sheets with to-dos

If you’re like me, you note your to-dos regarding articles or book chapters in the sheets they belong to. Programmers do this, too. They just add a comment starting with the word “TODO.” And they always write it the same way every time so they can later search for that word.

We can do something similar in Ulysses. The app offers various ways to annotate your text, from annotations to comments to notes. If we want to show only sheets that include the word “TODO” in any annotation or comment, we can create a filter like this:

  1. Text contains > TODO > Comment
  2. Text contains > TODO > Comment Block
  3. Text contains > TODO > Annotation | Text

Enable Match all conditions.

The same thing isn’t possible for notes. For now, refrain from putting your to-dos into the notes section if you want to filter by them. (However, you can filter sheets by whether they have notes attached to them at all. If you only ever put to-dos in your notes and nothing else, that should work, too.)

Find the mot juste

When John McPhee edits his writings, he draws boxes around words for which he thinks might exist more precise alternatives. During his favorite editing stage, Draft No. 4,1 he focuses only on these words and looks them up in a dictionary (not a thesaurus) to find more accurate substitutes. We can do that in Ulysses, too.

Whenever I come across a word I don’t like, I mark it (choose Markup > Marked from the Menu). This way, they not only stand out, but they can also serve as a criterion for filters.

  1. Text contains > (empty) > Marked
  2. Sheet > is regular sheet

Enable Match all conditions.

Needs some headings

It’s cumbersome to read non-fiction articles or books without headings and subheadings. They make scanning the contents so much easier. And they keep readers motivated because they provide brief breaks. Nobody wants to read a giant wall of running text, after all.

To make sure your sheets contain headings, you can use this filter:

  1. Text does not contain > (empty) > Heading
  2. Sheet > is regular sheet

Enable Match all conditions.

Why only Heading? If you structure your documents correctly, there can’t be a Subheading without a Heading. And no Subheading 2 without a Subheading without a Heading. And so on. Therefore, to ensure your sheets contain any headings at all, it’s sufficient to filter by Heading alone.

Doesn’t have footnotes

I enjoy using footnotes in my writing. They’re not only an easy way to name sources, they’re also great to provide additional information to readers who can’t get enough.

While I don’t need all my articles to include footnotes—I only add them when and if they’re appropriate—, I’d like to see a list of all articles that don’t have any. This makes it much easier to find out which articles could benefit from them.

  1. Text does not contain > (empty) > Footnote | Text
  2. Sheet > is regular sheet

Enable Match all conditions.

Still needs internal links

A good blog always contains numerous internal links. Yes, they’re important for SEO, too, but that’s not the main reason you should include them. They also help users navigate through your website and find additional information (as long as you don’t overdo it).

To determine which of my articles doesn’t have any internal links yet, I created the following filter:

  1. Text does not contain > alexanderhetzel.com > Link | URL
  2. Sheet > is regular sheet

Enable Match all conditions.

Just replace my domain with yours. The filter will then show you all the sheets not containing a link to your own site.

Contains no summary

I begin my essays with a summary for those readers who either don’t want to read the full article or who are unsure whether they’ll find the information they’re looking for. Just like footnotes and internal links, this is something you can forget to add as a writer. Ulysses can help with remembering that.

How to set this up depends on how you declare the summary in Ulysses. I could add a list at the beginning of the sheet, but then I’d need to add some HTML later so my website knows this is a special list. I prefer to copy the sheet’s content as HTML, paste it into WordPress, and be done with it. That’s why I prefer adding the HTML code directly to the sheet.

Imagine, the HTML code of your summaries looked like this:

<div class="summary">
  <ul>
    <li>Summary Item 1<li>
    <li>Summary Item 2<li>
    <li>Summary Item 3<li>
  </ul>
</div>

You create the <ul> construct by adding a bullet list to the sheet. So, you only need the <div> element around it. In Ulysses, add a Raw Source Block before the list and one thereafter. The first one contains the opening <div> tag (including the class), the second one the closing </div> tag after the list.

Which means you can use a filter to look for a Raw Source Block containing the word “summary”—which seems unlikely to surface many false positives.

  1. Text does not contain > summary > Raw Source Block
  2. Sheet > is regular sheet

Enable Match all conditions.

Don’t stop here

It’s tempting to just use these pre-made examples, but the actual power of filters shines through when you adapt them to your own behaviors. The above list shall serve as mere inspiration for you to create your own filters in Ulysses. Begin by asking yourself: What do I always forget to put into my sheets? And what else could Ulysses automate for me?

  1. Draft No. 4 is also the title of his famous book in which he explains his research, writing, and editing process. Jump back.︎