Ideas for Future Features

Release notes of existing versions are here

Table of Contents

File Associations

  • Able to right-click a .csv file (for example) - say 'open with' nimbletext - and then it will open into the data pane.
  • Able to right-click a .nts file (for example) - say 'open with' nimbletext - and then it will open the session
  • Able to right-click a .ntp file (for example) - say 'open with' nimbletext - and then it will open the pattern
  • Able to have the app attempt to set its own file associations (dangerously close to wanting an installer here!)

NumColumns or NumCols not just NumFields

The keywords must include "NumColumns".

NumFields is treated as an alias of this, as is NumCols. The canonical name is NumColumns.

  • Other aggregates too!
  • MaxNumCols, MaxNumFields, MinCols, ModeCols, ModeFields, MedianCols, MedianColumns, MedianFields,
  • (has to be a canonical hierarchy where some are aliases to others.

Named Columns

Have long wanted to be able to refer to cell values either by their number, e.g. $3 or by the name of the column, e.g. $CustomerNo -- assuming we did not err by treating the first row as a header row.

  • There are rules about what it will or won't treat as a possible column name.
  • Can't start with a number
  • Can't start with a reserved word
  • Spaces... well spaces and tabs can't be allowed can they!
  • Dashes, underscore, dots, numbers(after the first letter) -- these are all good.
  • (Dots? really??)
  • Long words not allowed... max length... 64? 45? come on, nothing too long.
  • Reserved words are:

    [number] once each rownum rownumzero numrows dollar percent lt gt h[number] -[number] h-[number]

  • And these words would also be reserved in case we implement For each for Columns (described further down)

    coleach endcoleach c[number] colnum colnumone cell

  • Next, you start to allow a named column followed by a well known function, e.g.
    • $0.toLowerCase() would not need to be contained in "<% beestings %>"
  • And a named column, followed by any chain of well known functions, would be recognised: $0.toLowerCase().reverse() etc. and then you'd have to allow other expressions inside the ().....
  • Soon see the direction we're heading in is "full template compiler." at which point you ask...
    • can we switch to a typescript related compiler infrastructure?
    • can we switch to a razor-based compiler infrastructure, with some simple substitutions by a pre-processor... i don't know, $ becomes @Model or something.
    • pure javascript based would only work if the browser was better than the current embedded browser. see Investigate Edge WebView2 or find an acceptable way to embed chrome. Despite my reservations, an electron based version could also satisfy that requirement and help deliver a Mac/Linux version.

Templates folder

  • Currently there are example snippets that you can add to and edit.
  • In addition to this I could have a templates folder, that you can visit and that you can save to.
  • Any ".session" file can be saved to the template folder and will then be available for use as an item in the template main menu of the application.
  • When you select a template from the folder -- it will perform or not perform several replacements:
    • the auto run checkbox will be set to false.
    • the pattern textbox will be replaced in its entirety. This will actually be the last change applied, so undo will allow you to undo this change, if you did indeed have a pattern you were working on.
  • If data is empty it replaces the data.
  • If data is not empty:
    • If the first row of your data does not match the first row of the template data then it prepends the first row of the template data. i.e. these could be headings that it is pasting in.
    • If the first row of your data does match the first row of the template data then it does nothing to your data.

New Functions

There are always more functions to add. Currently on the proposed list:

  • Spintax
  • Color converting
    • (rgb,hex,hsl,rgba, etc.) and back again, e.g. rgb to hex
  • C Constant style (captitalization) if not already present (aka SHOUTING_SNAKE_CASE)

Date functions

  • PARSE -- string to date
  • FORMAT -- date to string
  • REFORMAT -- string date to string date.
  • Date Add
  • Date Diff
  • TimeSpan - format

Investigate Edge WebView2

This: "Microsoft Edge WebView2" looks interesting but is still in developer preview. It might mean that the embedded browser is finally able to handle arrow functions and better styling.

Read through questions people are having at stackoverflow to take the pulse of the developer community on this emerging tech: search tags webview and microsoft-edge at stackoverflow.

In time it might also be useful for a Mac/Linux version without resorting to Electron.

Investigate WebWindow

This: "WebWindow" looks interesting. It's status is: prerelease.

Investigate React Native

We could also use react native to make it just as good on tablets and ipads and smart phones and more. Though the browser version should be the canonical one.

Embed Monaco editor

Monaco editor as used by vs code is the way to go to achieve block editing syntax highlighting line numbering and a lot of other functionality.

This would rely on using a chromium browser such as edge webview2

A lot of effort but an awesome goal. 🥇

Improved Regex

  • Chromium has named capture groups. With Edge Webview2 this would become within reach.
  • Provide documented examples

For each for Columns

Currently there are $ONCE, $EACH for looping through rows (and the special token $EACH+ for looping through all rows after the first row.

I would like to add the ability to loop through columns. The tokens involved could be:

  • $COLEACH -- means loop through all the columns... but it might also be able to handle a parameter...
  • $COLEACH(4..) Means everything from number 4 to the end ?
  • $COLEACH(5,6,7) Just items 5,6 and 7.
  • $COLEACH(..5) From start to number 5.
  • $COLEACH(-2..) From second last to the end...?
  • $COLEACH(%2 == 1) Odd numbers only?... I'm just making up a nonsense syntax here as a demo.

Let's say there could be a suitable syntax, though I'm not sure where it ends.

When we are inside a $coleach what do we use to refer to the current cell for the current row? $cell ?

And then every $coleach ends at when any of these things are found:

  • the end of the pattern obviously ends the col each,
  • an $each (which can also be represented now by the synonym $roweach... since that's what it means)
  • a $once token, or
  • the special token: $endcoleach

BUT what happens if you hit another $coleach inside a $coleach ? does that mean you effectively emit a $endcoleach (to exit the current endcoleach) before continuing into the next $coleach or does it mean there is an inner loop of cols inside cols...?

It might seem cool to allow it to be an inner loop... but what would $cell then mean? the inner loop's current cell or the outer loop's current cell?

I think it would not allow inner loops. So then where are we?

What happens if we hit two $endcoleach's in a row? It's an error, but how do we flag that kind of error within nimbletext? We would simply ignore the second $endcoleach and continue on, but it would be good to report a warning in some way.

Current and Previous Row Examples

Have to at least document examples of doing work with current and previous rows.

You can set up variables, for example:

$ONCE<% current = -1; ""; %>$EACH
 previous = current; 
 current = $0;
 if (rowNum !== 0 && current != previous)  {"  cell 0 has changed " } else {" cell 0 has not changed"}; 

External tool commands

In the tools folder, you could link in external tools. An external tool command:

  • can take macros such as a temp table containing the data, pattern, or results, or a literal string containing same. Any of the settings, etc.
  • can be triggered: after the calculation, by a button.
  • could later be triggered by: - before calc, before 'once pattern, after once pattern, before each row, after each row -- etc.


Language idea: Repeat

Consider a language feature for repeating a section an arbitrary number of times. e.g. could generate data with it.


Auto Detect delimiters

If the user has not touched the column separator textbox, and the data is changed (and a short duration has passed.. i.e. debounce the event) then detect the column separator.


If the user has not touched the row separator textbox, and the data is changed (and a short duration has passed.. i.e. debounce the event) then detect the row separator.

Collect Voluntary Usage Data

To understand how to proportion and relocate and emphasize or deemphasize certain items in the user interface:

Create a voluntary (opt in only) way for enthusiastic users to collect useful information for us that will be inspectable (and quite legible) to the end user, but which cannot be used to de-anonymize the user. Then the info will be used to improve (or reduce) the visibility, impact and style of user interface elements, in order to maximize success with the product.

I am not sure what benefit would accrue to this voluntary force. I could certainly offer a badge that is visible on nimbletext. But I would like it to enhance the appearance of NimbleText, which is already overburdened with "flair"

Dark Mode (Done)

(Released August 2020)

Of course this is the highest priority. It would default to be being based on your system settings. But you could override it. Hence you would have three possibilities:

  • System
  • Dark
  • Light.

Other theme/skin features are not proposed at this time. (I do have to do some theme selection features in ClownCar, an open source .net core static site generator I tinker with at times.)

Version 4 features (Done)

(Released June 2023)

  • Filter menu provides helpful filter examples
  • Snippet menu: categories
  • More functions (as always)
  • Finish/improve handling for high/mixed-DPI
  • Finish/improve Dark mode feature

"Filter" menu -- gives you example filters. (Done)

Note the filter menu is restricted for use to registered customers.

The filter menu would include an editable selection of filter examples. Selecting one of them turns on the filter menu (if it is not already on) and pastes in the selected example filter. In built from day one would be examples for the following:

  • Odd rows only
  • Even rows only
  • rowNum >
  • Matches - Row or column matches regular expression
  • Contains - Row or column contains substring
  • Starts with - Row or column starts with substring
  • Ends with -
  • Mega Example - everything at once, uncomment what you need.
  • Is Longer than
  • Has a number of columns

(any other examples from where filter documentation -- and add more examples there as needed)

From the "Add Filter Example" button there is a form where you can add more. Could also be a button to let you send the example you're working on back to '' as a suggested item to include in future versions.^1 From the "Edit filters" example there is a modal where you can rearrange the menu items, or edit them, or remove them.

^1 Similarly there could be a "suggest this for next version" button in the form to add/edit a snippet.

Functions (Done)

  • atob, btoa (i.e. base 64 conversion)
  • "qu" and or "enquote"
  • "s" (e.g. I bought $0 fish{$0.s('es')}) for pluralizing --

Function Grouping (Done)

  • A major feature of a forthcoming version will be:
  • Function grouping.

We've always been limited in adding new functions because all functions are available in the function submenu and i wanted to keep it usable.

New plan is to have a single menu that -- firstly lists all your pinned/favorite functions and then lists categories of functions -- a function will only exist in one category.

Categories could include:

  • string
  • conversion
  • datetime
  • math/stats

Further help

You can also get general help, help on all the symbols and keywords, or on the built-in functions, filtering with a where clause, help with the powerful command-line automation, or applying custom formats to your dates and times.

You need to purchase a license to unlock all the features in NimbleText.

If you haven't downloaded NimbleText yet, then for added power, privacy and versatility I sincerely think you should download it now.

Download NimbleText