Rallying Support for Built-In Word Count Feature

I’ve made the feature request via email (and Twitter… and probably more than once… hope I’m not bugging OG), but wanted to post here, too. I’m assuming I’m not the only one who would appreciate having a word count feature in OmniOutliner (iOS and OS X)?

I know there’s a nice-looking script in the forums to do this (from September 2014), but having the feature included in the app itself would be awesome.

Just posting here to see what sort of groundswell of user support for the idea there may be…


I’d LOVE this

I haven’t wanted a word count in OO…until today.

Normally I use OO for merely outlining/notes/brainstorming, but right now I’ve got a task where I need to write a bunch of short, 300 word pieces and was thinking of using OO. However, without a word count, the workflow is too tedious.

Well, the good news is that it’s coming! From the yearly update blog entry:

For OmniOutliner, I’m very pleased to share that we have some major writing improvements on the way! On both Mac and iOS, we plan to support distraction-free full-screen editing, the ability to see your current word count, and support for directly editing Markdown documents. (And on iPad, we hope to let you directly print your outline without first having to export to HTML.)

That sounds great.

I reckon it’d be great if they can implement, not just full document word counts, but some way of displaying how much is under each heading/level—the use case is writing a piece where you want to keep to a certain word count under each heading (e.g. introduction should be 100 words, point one is 500, point 2 is 750…)

1 Like

Agreed 100%. Editorial on iOS has his feature, and it’s incredibly useful.

@AbramKJ—with the risk of taking this thread on a tangent and outside the scope of these forums, are there any apps for Mac that support this?

I too would really love to see this feature. Practically all of my writing projects have a word limit, so it would be fantastic to have an inbuilt word count rather than having to continually copy and pasted into another app in order to make the count.

Not sure, @funkydan2. I was going to suggest FoldingText, which is much like the writing part of Editorial, except for Mac. FoldingText lets you collapse text under a heading. And it has a word count for the whole document/file. But I don’t think there’s a way (unless I’m missing it) to show word count for individual sections.

Racking my brain to think of any other app along these lines–I don’t know of any.

My daughter uses a Web page she found on the Internet. Apparently there are several. Regards.

In the meanwhile, YAOWCS (yet another interim script – JavaScript for Automation this time)

(function () {
    'use strict';

    var ds = Application("com.omnigroup.OmniOutliner4")
        d = ds.length ? ds.at(0) : undefined;

    var rgxSpace = /\s+/

    if (d) {
        var rows = d.rows,
            intWords = rows.topic()
            .reduce(function (a, x) {
                return a + x.split(rgxSpace)
            }, 0);

        var a = Application.currentApplication(),
            sa = (a.includeStandardAdditions = true, a),

            result = sa.displayDialog(intWords + ' topic column words\n\nin ' +
                rows.length +
                ' rows', {
                    withTitle: 'Word count',
                    buttons: ['Cancel', 'Copy word count', 'OK'],
                    defaultButton: 'OK',
                    cancelButton: 'Cancel',
                    withIcon: sa.pathToResource('OmniOutliner.icns', {
                        inBundle: 'Applications/OmniOutliner.app'
                    givingUpAfter: 20

        if (result && result.buttonReturned === 'Copy word count') {
            var strResult = intWords + ' words';


            sa.displayNotification(strResult, {
                withTitle: 'Word count',
                subtitle: '(number of words in topic column)',
                soundName: 'default'

            return strResult
1 Like

Thanks - could you post some basic details about how to actually run this script, for the less techy-minded among us?

OmniGroup sells scripting as a premium value of the Pro version of OmniOutliner 4, so there must be documentation somewhere, tho curiously, ‘script’ seems to draw a blank in the Help file. Worth a quick letter to them, I think, through Help > Contact Omni

Script Editor.app is in Application/Utilities – paste in the code and select JavaScript at top left before a test run.

In Script Editor > Preferences enable the script menu:

and if you want to use the script regularly put it in the OmniOutliner script folder – reachable through the script menu when OO is running – this will make it appear in the OO script menu.

1 Like

Thanks so much! I have tried this and it works brilliantly - thanks! One more question - where is the OmniOutliner script folder? (Or, if I have to create one, where does it go?) Thanks for your help, I have been in dire need of a word counter. Oh, sorry - you already explained this - please ignore my question.

1 Like

This is really helpful–thanks! Again, not being Script-minded at all, I have not tried this until now. However, I get this error: “Error on line 4: Error: Application can’t be found.” The application there is named “com.omnigroup.OmniOutliner4”. Is there something else I should do to get it to run? (This is on the test run stage before pressing the play button.)

Are you running the Pro version of OmniOutliner 4 ? (required for scripts, I think)

Assuming that you have copied the whole of the script, and set the language selector to JavaScript, you could try editing




Thanks. Yes, Pro version. That didn’t work earlier but I’ll try again.

“OmniOutliner Pro” works, but then I get an error on line 28: can’t convert types (" withIcon: sa.pathToResource(‘OmniOutliner.icns’, {

This is why Omni needs to go ahead and add the feature… (noobs like me)

If “OmniOutliner Pro” works, then the script is finding an instance of OmniOutliner 3 rather than 4.

If you are also running 4, then you may need to uninstall 3.

(The script is not written for .003, I’m afraid, and I don’t have a copy of it here to test)

Ha! I got it. Thanks for your help. I never had 3, but I had to change

                withIcon: sa.pathToResource('OmniOutliner.icns', {
                    inBundle: 'Applications/OmniOutliner.app'


                withIcon: sa.pathToResource('OmniOutliner.icns', {
                    inBundle: 'Applications/**OmniOutliner Pro**.app'
1 Like