Deep linking to specific rows of an OmniOutliner document

Hookmark now supports deep-linking to specific rows of an OmniOutliner document. See Using Hookmark with OmniOutliner – Hookmark.

You may be familiar with OmniOutliner’s Copy Link function. When you select a row in an OmniOutliner document and use this OmniOutliner command, you get a link, like this: omnioutliner:///open?row=lAgiZr2AgMn. These links are great because they bring you to the specific row in the document. But they only work if the document from which the link was copied is currently open.

Hookmark extends OmniOutliner’s deep linking functionality, enabling you to create deep links that

  1. do not require the file to be open,
  2. are robust, meaning the links continue to work even if you move the files around!

All you need to do is

  1. select a row in the OmniOutliner document,
  2. invoke Hookmark’s Copy Link command.

The link you create will automatically be deep, like this one. If you inspect that link you’ll see that Hookmark has embedded rowid=lAgiZr2AgMn in the URL. (That’s the row ID provided by OmniOutliner that we mentioned above.)

Deep links are very convenient for long and deep outlines. The bigger purpose here is to help users focus their attention to the precise information they require, without needing to search (or use Finder to navigate).

software update

This update was released as software integration v. 273. Simply use the Check for App Updates and Update Scripts... to get that. Or enable automatic software updates in Hookmark.


We expect to soon release robust deep-linking to Bike documents too.

Hi @LucB this doesn’t work (deep linking) for me, am using 5.1.2 (5440) script version 275.
Example link (after selecting row or clicking in row and using copy link).
It simply opens document when using the link and has no row identifier.
Latest MacOS Version 13.3.1 (a) (22E772610a)

Omnioutliner version 5.11.1 (v215.0.2)

When I am looking in preferences in hook, and in the script tab, if i select only “Show only installed apps”, neither OO4 or OO5 show up.

Any thoughts?

Is it possible that you previously overrode the OmniOutliner Pro “Get Address” script in Script Editor?

oops! I just noticed the integration seems to be for stand alone OmniOutliner Pro only at the moment. (Only OmniOutliner Pro has AppleScript).

Are you using OmniOutliner from App Store or stand alone?

If you are using Hookmark Pro, you can add the script in Script Editor by clicking the “+” button and selecting your OmniOutliner Pro app. Then you can copy the Get Address and Open Item scripts from the standalone version and paste them into your new OmniOutliner Pro entry.

Will look at this in the morning.

Deep linking doesn’t work for me either – at least not reliably. (I’m using OmniOutliner 5.11.1 (v215.0.2) - the stand-alone, not the App Store version)

If I create a link to a row in OmniOutliner, then quit OmniOutliner and trigger that link, OmniOutliner opens a blank new outline. If I close that and click on the link again, it works correctly - the desired outline is opened and focus is on the specific row to which I linked. (If I don’t close the blank new outline, clicking on the link takes me back to that blank outline again and again.)

Hi LucB I have the app store pro version. I don’t think i have adjusted the script in the editor. I tried adding OO5 with the + button but that broke all linking even at file level. So I have deleted that and restarted computer and it works on a file level again.
So the app store pro version doesn’t deep link with Hook is that correct?

I should have mentioned changing the bundle ID in lines like in my late night evening last night, i.e., re:

tell application id "com.omnigroup.OmniOutliner5"

We’ll publish an integration update for the App Store version of OmniOutliner momentarily that will give you deep linking.

Thanks for reporting this. This is different from @Relax’s issue (which was simply that we didn’t upload the script for App Store version).

I’m able to reproduce an issue: when there is an Untitled (unsaved) OmniOutliner document, clicking on a deep link does not work reliably. We’ll look into that. For now the work around is to ensure there is no unsaved OmniOutliner document when a deep OmniOutliner link is used.

Thank you for reporting the issues, @tbm , @Relax.

Script 276 is available for download.

Please update the script and let us know if the issue is resovled.

Thank you

Script updated, and works like a charm, in every scenario I could think of.

Even when the blank new outline is opened/created, the appropriate link is in the foreground and highlit.

Well done! Thank you for such swift and stellar work.

1 Like

Awesome! Thanks for letting us know.

I have the 276, and my app store version is listed in the scripts tab, but deep linking still not working. It opens the file OK, but doesn’t go to row. Here is a sample link that has been generated by the copy link command after selecting row.

hook://file/M8s3ffEPH?p=aUNsb3VkfmNvbX5vbW5pZ3JvdXB+T21uaU91dGxpbmVyL0RvY3VtZW50cw==&n=PWC Notes.ooutline#rowid=n7KeKGaN07_

But clicking on this just opens the file.


The link looks good.

Could you please check Hookmark Preferences->Script->OmniOutliner5-MacAppStore, see if it is modified? If “Reset to Default” button is enabled, it has been modified. If yes, please click on Reset to Default button.

Or do you have multiple version of Hookmark on your machine?

Thank you

Thanks bchend, all seems good now, I was a bit confused as testing in long outline, and it did not scroll to selected row. I see it does highlight that row, but still have to find it, but command-shift-focus (in omnioutliner) would probably work to find it. Many thanks for the new scripts.


How would one NOT deeplink? What if I want to create a link that just opens the file and does NOT jump to a specific Omnioutliner row? Sometimes I want the deeplink, sometimes I do not. In the instructions you indicate that a deeplink will be created any time a row is selected. But to the best of my knowledge a row is always selected in outliner. Also: similar to what Relax said/implied, it would be great if the doc auto-scrolled to the highlighted row. Thanks!

Welcome to the Hookmark Forum , @Joe12 . thanks for asking.

If you click outside a row, at bottom of doc, you get a document-wide link (no rowid parameter)

Agreed, we’ll look into that.

We plan to introduce Copy Selection and Link for compatible outliners. That would be like Copy Selection and Link – Hookmark for PDFs. Currently Hookmark’s Hookmark’s Copy Link in context of Bike yields row name. It might make more sense to separate the two.

can you please

  1. make sure the target OmniOutliner doc is open
  2. apply this link: omnioutliner:///open?row=n7KeKGaN07_ = omnioutliner:///open?row=n7KeKGaN07_

And let us know if it works. That will tell us whether the equivalent OmniOutliner link is handled properly by OmniOutliner.

Also might be a good idea to compare the link created by Hookmark’s Copy Link command and OmniOutliner’s Copy Link command to make sure the rowID parameters are identical.

(If one deletes a row with the target ID there’ll be nothing to scroll to, of course.)

I may obviously be missing something, but I see no way to “click outside a row.” Everything in outliner is a row. Scrolling to the bottom works, but in a long doc, it means I have to take my hands off the keyboard, scroll all the way to the bottom, then make my Hook. It also means I have to remember where I was, then scroll back up and find that row. Overall, it slows me down quite a bit. Would love a simple option to make one of two types of “Hooks”: a deep-link hook, or a “regular” hook that just opens the doc and doesn’t attempt to highlight a row (or change which row is already highlighted). Worst case, if both link types can’t be supported, then I’d like a way to revert back to the previous no-deep-link approach. (I use Hook links between outliner docs constantly, so the addition of deeplinks seems to hold great promise; but if I can’t also quickly create “regular” links then I run the risk of a) slowing down my workflow and/or b) inadvertently creating a deeplink then getting lost when all I really wanted to do was open the document or bring it to the foreground). Great work on Hook, btw. It changed my life for the better when I discovered it!

I should have mentioned OmniOutliner has a Deselect All (⇧⌘A) command in its Edit menu, so you don’t need to scroll or use mouse to deselect.

Copy Selection and Link will give you that, when we have it.

I’ll share the old script in a moment.

understood. I spend a huge amount of my life in outliners.

Thank you!