{
   "version": "https://jsonfeed.org/version/1.1",
   "title": "aTbRef  v11.5.0 - JSON Feed",
   "description": "Changes to aTbRef.",
   "home_page_url": "https://atbref.com/",
   "feed_url": "https://atbref.com/atbref11/feed.json",
   "user_comment": "This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL, https://atbref.com/atbref11/feed.json, and add it your reader.",
   "favicon": "https://jsonfeed.org/graphics/icon.png",
   "authors": [
      {
         "name": "Mark Anderson",
         "url": "https://www.shoantel.com/"
      }
   ],
   "favicon": "en_GB",
   "items": [
    {
      "id": "1772216585",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Use_of_Attributes/Attribute_Data_Types/Dictionary-Type_Attributes.html",
      "title": "Dictionary-Type Attributes",
      "content_html": "<p><b>Dictionary<\/b><\/p>\n <p>A Dictionary attribute replaces like the older Tinderbox feature of <a href=\\\"\\\">lookup tables<\/a>, as a list of paired <b>key<\/b>s with <b>value<\/b>s: <code>key:value;<\/code> <\/p>\n<p>The <b>key<\/b> part comes first with a terminating colon. The <b>value<\/b> part follows, terminated by a semi-colon. White space handling in key:value pairs is described below.<\/p>\n<p>Dictionaries are faster to construct, and large dictionaries are far faster to check, than lookup tables. Dictionaries are not generally intended for handing large\/complex values or for values including punctuation and symbols. A Dictionary may be considered better for tasks previously configured using look-up lists.<\/p>\n<p>Like other attribute types, a Dictionary follows normal rules of scope and inheritance. A note using a prototype with a Dictionary holding data, will inherit that data dictionary. Similar to a Set type, a Dictionary does not allow duplicate keys, but multiple keys may use the same value.<\/p>\n<p>A key may have <i>multiple<\/i> values; this can be either []-enclosed List-type or {}-enclosed Dictionary-type data. For example, the dictionary:<\/p>\n\t<blockquote><code>{Tinderbox: 1;Storyspace: {Editor: 2; Reader:3}}<\/code> <\/blockquote>\n<p>contains two elements. The first has a key of \\\"<code>Tinderbox<\/code>\\\" and a value of <code>1<\/code>. The second has a key of \\\"<code>Storyspace<\/code>\\\" and the value that is itself a dictionary, <code>{Editor: 2; Reader:3}<\/code>.<\/p>\n<p><b>Dictionary key:value syntax<\/b><\/p>\n<p>A dictionary collects pairs of strings separated by a colon, noting that whitespace before\/after the colon in the key:value: pair is ignored when the data is added. The first string is the <i>key,<\/i> and the second string is the <i>value.<\/i> In these examples there are 3 such key:value pairs. These first two forms are better practice than the third just below:<\/p>\n\t<blockquote><code>$MyDictionary={cat:animal; dog:animal; rock: mineral};<\/code> <\/blockquote>\n\t<blockquote><code>$MyDictionary=$MyDictionary.add(\\\"cat:animal\\\").add(\\\"dog:animal\\').add(\\\"rock: mineral\\\");<\/code> <\/blockquote>\n<p>The <b>dictionary()<\/b> operator creates a dictionary (in the current note),<\/p>\n\t<blockquote><code>$MyDictionary=dictionary(\\\"cat:animal; dog:animal; rock: mineral\\\");<\/code> <\/blockquote>\n<p>The <b>key<\/b> \\\"cat\\\" has the <b>value<\/b> \\\"animal\\\", while the <b>key<\/b> \\\"rock\\\" has the <b>value<\/b> \\\"mineral\\\".<\/p>\n<p>Although it is still possible, via legacy support, to populate a directory by passing a dictionary-formatted list as a quoted string to a Dictionary-type attribute, this is <i>deprecated<\/i> in favour of the <code>{}<\/code> method, or using the <b>dictionary()<\/b> operator is explicit and indicates intent unambiguously when parsed by Tinderbox. See <a href=\\\"\\\">dictionary()<\/a> for usage.<\/p>\n<p><b>Case-sensitivity<\/b><\/p>\n<p>A <b>key<\/b> is <i>case-sensitive<\/i> and must be unique to the dictionary; the <b>value<\/b> may be the same as values for different keys within the current dictionary. Rather like the Set data type, duplicates are weeded. If a new key:pair is added to a dictionary and the key (case-sensitively) already exists, the existing value (only) for that key is updated to use the value from the new pair.<\/p>\n\t<blockquote><code>$MyDictionary = dictionary(\\\"cat:animal; dog:animal; rock: mineral\\\");<\/code> <\/blockquote>\n\t<blockquote><code>$MyDictionary = $MyDictionary + \\\"cat:mammal\\\";<\/code> <\/blockquote>\n<p>Now, the value of key \\\"cat\\\" becomes \\\"mammal\\\" and the older value is lost.<\/p>\n<p>Quoting of keys and values<\/p>\n<p>From v11.5.0, the key is <i>always<\/i> treated as a string, and does not require to be quoted: quoted keys, e.g. in older code, will still work correctly. If the value of that key is a string, it <i>should<\/i> be quoted. In addiction, the value <i>must<\/i> be quoted <i>if<\/i> the string value contains any of the following: {}():\/\/ or quotation marks.<\/p>\n<p><b>Use of whitespace, symbols, quotes, etc., with keys & values<\/b><\/p>\n<p>Any whitespace either side of a colon (:), or semi-colon (;), or at beginning or end of dictionary data is ignored. As the colon (:) and semi-colon (;) characters are used as delimiters in the stored Dictionary data, they should also not be used within key names or values.<\/p>\n<p>The expectation is that keys and values will be simple strings or numbers, so avoid use of characters like punctuation as you may experience unexpected results; additionally avoid using parentheses (), square [] or curly {} brackets, backward \\ and forward \/ slashes, single\/double quotes or commas.<\/p>\n<p>A good rule of thumb is to think hard if using other than <code>A-za-z0-9<\/code> or underscore\/hyphen\/period (the period might be needed for a decimal number value).<\/p>\n<p><b>Adding key:value pairs<\/b><\/p>\n<p>To add to a new key:value pair, use addition, as with Lists and Sets…<\/p>\n\t<blockquote><code>$MyDictionary = $MyDictionary + {apple:plant};<\/code> <\/blockquote>\n\t<blockquote><code>$MyDictionary += {apple:plant}\\\";<\/code> <\/blockquote>\n<p>adds they key \\\"apple\\\" and associates it with the value \\\"plant\\\". If the key was already found in the dictionary, its value is replaced by the new value. If the key was not found in the dictionary, both the new key and the new value are added.<\/p>\n<p>As well as using a literal value, the key (and value) to be added can be give as an attribute value or variable:<\/p>\n\t<blockquote><code>$MyString = \\\"apple:plant\\\"; $MyDictionary += $MyString;<\/code> <\/blockquote>\n\t<blockquote><code>var:string vKey = \\\"apple:plant\\\"; $MyDictionary += vKey;<\/code> <\/blockquote>\n<p>There also a <a href=\\\"\\\">Dictionary.add()<\/a> operator. This does the same as the above:<\/p>\n\t<blockquote><code>$MyDictionary = $MyDictionary.add(\\\"apple:plant\\\");<\/code> <\/blockquote>\n<p><b>Deleting keys (implicitly key:value pairs)<\/b><\/p>\n<p>Entries can be deleted from a dictionary by subtracting the key:<\/p>\n\t<blockquote><code>$MyDictionary = dictionary(\\\"dog:animal; cat:animal; rock:mineral\\\");<\/code> <\/blockquote>\n\t<blockquote><code>$MyDictionary = $MyDictionary - \\\"dog\\\";  \/\/ gives \\\"cat:animal; rock:mineral\\\"<\/code> <\/blockquote>\n<p>or in newer form:<\/p>\n\t<blockquote><code>$MyDictionary -= \\\"dog\\\";  \/\/ gives \\\"cat:animal; rock:mineral\\\"<\/code> <\/blockquote>\n<p>Be aware that setting an empty value for a key doesn\\'t delete the key:<\/p>\n\t<blockquote><code>$MyDictionary[somekey] = \\\"\\\";<\/code> <\/blockquote>\n<p>leaves the key \\'somekey\\' with no value, which is not encouraged (q.v. below).<\/p>\n<p>As well as using a literal value, the key to be removed can be give as an attribute value or variable:<\/p>\n\t<blockquote><code>$MyString = \\\"dog\\\"; $MyDictionary -= $MyString;<\/code> <\/blockquote>\n\t<blockquote><code>var:string vKey = \\\"dog\\\"; $MyDictionary -= vKey;<\/code> <\/blockquote>\n<p>It is not possible to subtract a list of keys. Instead, such a list must be iterated as a succession of individual key deletions. The only exception to this is if <i>all keys<\/i> are to be deleted, in which case set the dictionary object (attribute or variable) to the default value to delete existing data:<\/p>\n\t<blockquote><code>vDict=; $MyDictionary=;<\/code>  <\/blockquote>\n<p><b>Changing the value of a key<\/b><\/p>\n<p>New values may be assigned to specific dictionary keys.<\/p>\n\t<blockquote><code>$MyDictionary[apple] = \\\"pie\\\"<\/code> <\/blockquote>\n<p>Adds the key \\\"apple\\\" to $MyDictionary with the value \\\"pie\\\". If the dictionary previously contained a value for \\\"apple\\\", it is replaced by \\\"pie\\\"; if not, a new key and a new value are added to the dictionary. Or, use <b>.add()<\/b> can be used:<\/p>\n \t<blockquote><code>$MyDictionary.add(\\\"apple\\\",\\\"pie\\\");<\/code> <\/blockquote>\n<p>Note that the += and -= operators are not currently available for changes to dictionary (numerical) values of the form<\/p>\n\t<blockquote><code>$MyDictionary[key] += 1;<\/code> WRONG!<\/blockquote>\n<p>Instead, use the conventional form:<\/p>\n\t<blockquote><code>$MyDictionary[key] = $MyDictionary[\\\"key\\\"] + 1;<\/code> <\/blockquote>\n<p><b>Adding to a key\\'s value(s)<\/b><\/p>\n<p>The <a href=\\\"\\\">Dictionary.extend()<\/a> operator offers such a feature.<\/p>\n<p><b>Deleting the (single) value of a key<\/b><\/p>\n<p>Ideally in such a case remove the key. However is possible to delete a key\\'s value, by setting it to an empty string \\\"\\\" (or reading from a stored value that is such). To set the value of key \\'apple\\' to \\\"\\\":<\/p>\n\t<blockquote><code>$MyDictionary[apple] = \\\"\\\"<\/code> <\/blockquote>\n<p><i>Generally, the expectation is that a key has an actual value<\/i>.<\/p>\n<p><b>Keys with multi-item values are supported using [] or {} notation<\/b><\/p>\n<p>Dictionary key values can be multi-valued using either the new <code>[]<\/code> (list or set) or <code>{}<\/code> (dictionary) notation. This holds for creating dictionaries or setting key values. When retrieving a multi-value result pass the data to an appropriately type attribute or variable. The data can then be accessed using appropriate key or list address syntax. Examples of nested multi-value values:<\/p>\n\t<blockquote><code>$MyDictionary={cat:animal; dog:animal; rock:{granite:mineral;basalt:mineral}};<\/code> <\/blockquote>\n\t<blockquote><code>$MyDictionary={cat:animal; dog:{terrier:dog;labrador:dog}; rock:mineral};<\/code> <\/blockquote>\n<p>From v11.6.0, lists now allow blank (empty) list items when using the <code>[ ] <\/code>list notation. As a result, a trailing semi-colon will imply the intent of a last list item that is empty.<\/p>\n<p><b>Merging Dictionaries<\/b><\/p>\n<p>Dictionaries may be merged by adding them.<\/p>\n\t<blockquote><code>$MyDictionary = $MyDictionary+\\\"apple:plant\\\"<\/code> <\/blockquote>\n<p>adds they key \\\"apple\\\" and associates it with the  value \\\"plant\\\". If the key was already found in the dictionary, its value is replaced by the new value. If the key was not found in the dictionary, both the new key and the new value are added.<\/p>\n<p>It is possible to add two dictionaries.<\/p>\n\t<blockquote><code>$MyNewDictionary = $MyDictionary+$MyOtherDictionary<\/code> <\/blockquote>\n<p>Note that if the dictionaries share (case-sensitive) keys that have differing values, the values from the last-added, therefore those in $MyDictionary, will replace those in $MyDictionary. Thus:<\/p>\n\t<blockquote><code>$MyFirstDictionary = dictionary(\\\"apple:fruit; granite:mineral\\\");<\/code> <\/blockquote>\n\t<blockquote><code>$MyOtherDictionary =  dictionary(\\\"pear:fruit; granite:rock\\\");<\/code> <\/blockquote>\n\t<blockquote><code>$MyDictionary = $MyFirstDictionary + $MyOtherDictionary;<\/code> <\/blockquote>\n<p>MyDictionary now contains \\\"granite: rock; pear: fruit; apple: fruit\\\"<\/code> <\/p>\n<p>Note the order of dictionary items is re-ordered, reinforcing the point that additions\/subtraction of dictionary data may alter item order, and which the user does not control. It is not possible to:<\/p>\n<ul><li> subtract a dictionary from a dictionary<\/li>\n<li> subtract lists of keys<\/li>\n<li> subtract individual values<\/li><\/ul>\n<p><!--<\/p>\n<p><b>Using a default key<\/b><\/p>\n<p>Dictionaries adopt a method first available in <a href=\\\"\\\">look-up lists<\/a>. A default key is only available <i>if the user defines a \\'default\\' key<\/i>. If a kay called \\'default\\' is present and an unmatched key is presented, the default key\\'s value is returned.  An edge code exists where code might offer a key with no name, i.e. <code>\\\"\\\"<\/code>, so if using a default key, it is a good idea to ensure the source attribute\/variable has a default value.<\/p>\n<p>--><\/p>\n<p><b>Dictionaries lack the \\'default\\' key used by look-up lists <\/b><\/p>\n<p>User of <a href=\\\"\\\">look-up lists<\/a> with list-type data might assume the same notion holds for Dictionary-type: it does not! It is still possible to define a \\'default\\' key but using it requires a little extra code. Whilst it is possible to check if a key exists with <a href=\\\"\\\">Dictionary.contains()<\/a>, it may be more useful to check for a default empty (\\\"\\\") value being returned. For instance, instead of, in a <code>.each(aKey){}<\/code> loop, where you might code:<\/p>\n\t<blockquote><code>$MyString = $MyDictionary[aKey];<\/code> <\/blockquote>\n<p>consider (and assuming a \\'default\\' key\/value exists):<\/p>\n\t<blockquote><code>if($MyDictionary[aKey]){$MyString = $MyDictionary[aKey];}else{$MyString = $MyDictionary[default];};<\/code> <\/blockquote>\n<p>or:<\/p>\n\t<blockquote><code>if($MyDictionary.contains(aKey)){$MyString = $MyDictionary[aKey];}else{$MyString = $MyDictionary[default];};<\/code> <\/blockquote>\n<p>But, the key point is that is a default response is needed, the user must (a) define the \\'default\\' key:vale pair and (b) add the code to invoke it. More code-savvy users may choose to encapsulate this in a user <a href=\\\"\\\">function<\/a>.<\/p>\n<p><b>Dictionary and values()<\/b><\/p>\n<p>You can get the values of a Dictionary, but you cannot look up a key that corresponds to a given value. Remember, multiple keys may same value. Therefore, using values() with dictionaries is not recommended as this returns all the unique key:pair values as opposed to only keys or only values.<\/p>\n<p><b>Iterating Dictionaries<\/b><\/p>\n<p>Use Dictionary.keys to get a list of the keys and then iterate that list using <a href=\\\"\\\">list.each()<\/a>.<\/p>\n<p><b>Default\/Empty value<\/b><\/p>\n<p>If a requested key is not defined, or the key has no value, an empty string is returned.<\/p>\n<p><b>Dictionary sorting<\/b><\/p>\n<p>Not applicable, as Dictionaries cannot be sorted. As a Dictionary is addressed via a key value rather than a list offset, the stored order for keys is moot. By observation, a Dictionary is generally stored in key lexical sort order but this should not be assumed to always be the case.<\/p>\n<p>Whilst a Dictionary itself cannot be sorted, it is possible to make a list of the keys then sort and iterate <i>that<\/i> list. for example:<\/p>\n\t<pre><code>\tvar:list vKeyList = $MyDictionary.keys;\n\tvKeyList = vKeyList.sort; \/\/ Use .nsort if keys are numbers\n\tvar:list vSortResults; \/\/ Use List so it stays sorted\n\tvKeyList.each(aKey){\n\t\tvSortResults+=(aKey+\\\" | \\\"+$MyDictionary[aKey]);\n\t};\n\t\/\/Test\n\t\/\/$Text = vSortResults.format(\\\"\\n\\\"); <\/code><\/pre>\n<p>Note that the initial sort could be lexical (<code>.sort<\/code>), lexical case insensitive (<code>.isort<\/code>) or numerical (<code>.nsort<\/code>)<\/p>\n<p><b>Additional Dictionary definition mark-up<\/b><\/p>\n<p>Dictionaries may be written by enclosing them in braces, for example a dictionary with two key:value pair elements:<\/p>\n\t<blockquote><code>$MyDictionary = dictionary({Dog: animal; Crocus: plant});<\/code> <\/blockquote>\n<p>The use of the braces removes the need to use quotes around string values.<\/p>\n<p>This new form of Dictionary-type data allows for nesting; for example, the dictionary<\/p>\n\t<blockquote><code>{Tinderbox: 1;Storyspace: {Editor: 2; Reader:3}}<\/code> <\/blockquote>\n<p>contains two elements. The first has a key of \\\"<code>Tinderbox<\/code>\\\" and a value of <code>1<\/code>. The second has a key of \\\"<code>Storyspace<\/code>\\\" and the value that is itself a dictionary, <code>{Editor: 2; Reader:3}<\/code> .<\/p>\n<p>The dictionary .add() and .extend() operators now take a single argument — a dictionary of elements which will replace or extend the current elements.<\/p>\n<hr class=\\\"dottedruleA\\\"\/>\n<p><b>Legacy behaviour<\/b>: Prior to v9.6.0, a value could not contain more than one value The value for a key \\'pie\\' might reasonably be apple, lemon and quince. Whilst it was possible to define a dictionary like this:<\/p>\n\t<blockquote><code>$MyDictionary[\\\"pie\\\"] = \\\"apple;lemon;quince\\\"<\/code> <\/blockquote>\n<p>… the fact a semi-colon is used as both a list delimiter (within the <b>value<\/b>) and as a <b>key<\/b>:<b>value<\/b> pair delimiter, means Tinderbox <i>currently<\/i> does not know how to parse this; work is in hand to support multi-item value, i.e. lists.<\/p>\n<p><i>Temporary note<\/i>.<i> Presently generating a dictionary with nested multi-values (list\/dictionary) may be possible only if using literal string values but not if using variables\/attribute values. This is likely a by-product of the newer [ ] and { } data type notations and subject to later changes\/fixes.<\/i><\/p>\n<hr style=\\\"border: 1px dotted black;\\\"\/>\n<p><b>Dictionary-type System Attributes<\/b><\/p>\n<p>Built-in attributes of the date data type are listed below:<\/p>\n<ul translate=\\\"no\\\">\n<p><li><span translate=\\\"no\\\"><a href=\\\"\\\">$Citations<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$CityData<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$MyDictionary<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$ReferenceDictionary<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$TableFormat<\/a><\/span><\/li>\n<\/ul><\/p>",
      "date_published": "2021-06-04T04:05:13+00:00",
      "date_modified": "2026-02-27T15:15:03+00:00"
    },
    {
      "id": "1772216589",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Use_of_Attributes/Attribute_Data_Types/List-Type_Attributes.html",
      "title": "List-Type Attributes",
      "content_html": "<p><b>List<\/b><\/p>\n<p>A semi-colon delimited list of string values. In terms of stored data <a href=\\\"\\\">Sets<\/a> and Lists are the same: a string containing one or more semi-colon delimited items. The difference is in the way Tinderbox handles the two data types, as lists may contain duplicate items. Although the Set-type pre-dates List-type in Tinderbox, Lists should be thought of as the underlying form and Sets as a type of List with special features (de-duplicated, always sorted, etc.).<\/p>\n<p>List items can be read\/set via their list order number (see below) but note that this is <i>zero-based<\/i>, i.e. list item #1 has address value zero (<code>0<\/code>).<\/p>\n<p>A List, even a list of numbers or boolean values, is stored as a semi-colon delimited string, i.e. list items are not stored with an explicit data type, though multi-value value can be list or dictionaries.<\/p>\n<p><b>Declaring a new List<\/b><\/p>\n<p>If setting a List\\'s literal values via action code use the square bracket <code>[ ]<\/code> List definition:<\/p>\n\t<blockquote><code>$MyList=[Frogs;Dogs;Logs];<\/code> <\/blockquote>\n<p>Above, the brackets <i>replace<\/i> the older <i>now-deprecated<\/i> method of enclosing quotes:<\/p>\n\t<blockquote><code>$MyList=\\\"Frogs;Dogs;Logs\\\";<\/code> NOTE: do not use this for new code!<\/blockquote>\n<p>Whilst both methods work and the latter, older, method will be found in many demos and tutorials, the bracketed notation is now the preferred method.<\/p>\n<p>Importantly, when typing\/pasting a List\\'s values into a UI input box such as the Inspector, Get Info, or Displayed Attributes, the enclosing brackets or quotes (as used above) should be omitted, i.e. using <code>planes;trains;automobiles<\/code> not <code>[planes;trains;automobiles]<\/code>. If brackets are used by mistake, the Tinderbox parser should ignore an outmost pair (as it would quotes) abut still honour brackets within the overall list value as implying a nested list. If Tinderbox reads from a List via code and reports (logs) a value with enclosing brackets, Tinderbox knows—in code—to ignore those as simply being list delimiters. <\/p>\n<p><b>Adding new list items<\/b><\/p>\n<p>With a List you can add\/remove individual or multiple values and test its contents. In actions, <code>+<\/code> adds an item to a set if it is not already present. Values should be enclosed in square brackets (previous, and still supported is to use enclosing double quotes). If $PetTypes\\' value is \\\"cats;dogs\\\", then:<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes+[rabbits];<\/code> adds the new value<\/blockquote>\n\t<blockquote><code>$PetTypes=$PetTypes+[rabbits];<\/code> unlike a Set, this adds a second instance of \\\"dogs\\\" to the <i>end<\/i> of the List.<\/blockquote>\n<p>The <code>+=<\/code> <a href=\\\"\\\">increment<\/a> operator can also be used. If the List is \\'cats;dogs;frogs\\':<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes+[cats;frogs];<\/code> this gives a value of \\'cats;dogs;frogs;cats;frogs\\'; the new values appended to the list in the order supplied.<\/blockquote>\n<p>To add new—not replacement—item(s) to the beginning of a list, use the <code>[]<\/code> list declaration method:<\/p>\n\t<blockquote><code>$PetTypes= [rabbits;hamsters]+$PetTypes;<\/code> <\/blockquote>\n<p>N.B. <i>the last fails if using to old quote-enclosed format<\/i> instead of square brackets.<\/p>\n<p>To add a new item that is itself a list, note the extra set of brackets needed. The following adds a new list item whose value is a two-item list.<\/p>\n\t<code>$PetTypes=$PetTypes+[[rabbits;bunnies]];<\/code> \n<p>To insert a new list at a specified location, i.e. adding a list item as opposed to replacing an existing value, iterate the list using <a href=\\\"\\\">List.each()<\/a> with a custom counter. Store existing items in a new list and add the term when the loop reaches the desired place in the list. At the end of the loop write the new list back over the original List.<\/p>\n<p><b>Deleting items<\/b><\/p>\n<p>In actions using a <code>-<\/code> (minus) removes the supplied value(s) if present. Importantly, this removes <i>all<\/i> occurrences if the deleted item;<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes-[dogs];<\/code> leaves only \\\"cats\\\" as a value.<\/blockquote>\n<p>To delete only specific instances would require using <a href=\\\"\\\">List.each()<\/a> with a custom counter.<\/p>\n<p>The <code>+=<\/code> increment operator can also be used. If the List is \\'cats;dogs;frogs\\':<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes+[cats;frogs];<\/code> this gives a value of \\'cats;dogs;frogs;cats;frogs\\'; the new values appended to the list in the order supplied.<\/blockquote>\n<p>The <code>-=<\/code> <a href=\\\"\\\">decrement<\/a> operator can also be used. If the Set is \\'cats;dogs;frogs\\':<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes-[cats;frogs];<\/code> this leaves only \\'dogs\\' as a value.<\/blockquote>\n<p><b>Replacing a list item\\'s value<\/b><\/p>\n<p>The List[N] notation addresses any single List item using a <i>zero-based<\/i> address. Thus <code>List[1]<\/code> addresses item #2, whilst  <code>List[0]<\/code> addresses the first. To replace item #3 in a list (assuming a big enough list):<\/p>\n\t<blockquote><code>$MyList=[Frogs;Dogs;Logs];<\/code> <\/blockquote>\n\t<blockquote><code>$MyList[2]=[Pogs];<\/code> results in a list of \\\"Frogs;Dogs;Pogs\\\"<\/blockquote>\n<p><b>Additional list definition mark-up<\/b><\/p>\n<p>Lists and Sets may be written by enclosing them in square brackets, rather than inside quotes, as in the past. The newer form is more declarative of intent to the user and the app, so is recommended. Lists may be nested; for example, the list<\/p>\n\t<blockquote><code>[ 1; [2;3]; 4]<\/code> <\/blockquote>\n<p>contains a 3 elements — 1, the nested list 2;3, and 4.<\/p>\n<p>Long Tinderbox precedent holds that list addition adds each element of the two lists. For example<\/p>\n\t<blockquote><code>$MyList = [1] + [2;3]<\/code> <\/blockquote>\n<p>or<\/p>\n\t<blockquote><code>$MyList += [2;3]<\/code> <\/blockquote>\n<p>both result in the list <code>1;2;3<\/code> and <b>not<\/b> <code>1;[2;3]<\/code>. To add a sublist to a list, use the operator <a href=\\\"\\\">list.extend()<\/a>. Thus:<\/p>\n\t<blockquote><code>$MyList = [1].extend( [2;3])<\/code>  <\/blockquote>\n<p>results in the list <code>[1;[2;3]]<\/code>.<\/p>\n<p>Offset assignment to a list of notes recognises bracket-enclosed lists correctly, for example:<\/p>\n\t<blockquote><code>$Status([this;parent])=\\\"urgent\\\";<\/code> <\/blockquote>\n<p>Implicit evaluation is no longer performed in bracketed lists. Thus,<\/p>\n\t<blockquote><code>$DisplayedAttributes=[MyList;MyString];<\/code> <\/blockquote>\n<p>is now equivalent to<\/p>\n\t<blockquote><code>$DisplayedAttributes=\\\"MyList;MyString\\\";<\/code> <\/blockquote>\n<p>If new List terms need evaluation, use <a href=\\\"\\\">list()<\/a> instead.<\/p>\n<p><b>Accessing nested lists<\/b><\/p>\n<p>Consider the following:<\/p>\n\t<blockquote><code>$MyTestList = [1;[a;b];3];<\/code> <\/blockquote>\n<p>To retrieve the nested list:<\/p>\n\t<blockquote><code>$MyString = $MyTestList[1];<\/code> results in \\'[a;b]\\'<\/blockquote>\n<p>Note the square brackets are retrieved too, so for further use of the list this might be better:<\/p>\n\t<blockquote><code>$MyString = $MyTestList[1].substr(1,-1);<\/code> results in \\'[a;b]\\'<\/blockquote>\n<p>To retrieve a value from that list:<\/p>\n\t<blockquote><code>$MyString = $MyTestList[1][1];<\/code> results in \\'b\\'<\/blockquote>\n<p><b>De-duplicating a List: List vs. Sets<\/b><\/p>\n<p>Lists, unlike Sets, allow duplicate values. To de-dupe a List, use the <a href=\\\"\\\">.unique<\/a> dot-operator:<\/p>\n\t<blockquote><code>$MyList=$MyList.unique;<\/code> <\/blockquote>\n<p>An older alternate method, which may be found in old demos is simply put its contents into a Set-type attribute:<\/p>\n\t<blockquote><code>$MySet=$MyList;<\/code> (deprecated in favour of the method above)<\/blockquote>\n<p>If $MySet and $MyList both have the value [cats;dogs]: the following have different outcomes:<\/p>\n\t<blockquote><code>$MySet=$MySet + [dogs];<\/code> gives \\'cats;dogs\\'<\/blockquote>\n\t<blockquote><code>$MyList=$MyList + [dogs];<\/code> gives \\'cats;dogs;dogs\\'<\/blockquote>\n<p>The Set attribute does not add the duplicate value but the List attribute does. List data values are stored in the order added.<\/p>\n<p><b>Testing (querying) Sets & Lists<\/b><\/p>\n<p>To test a set or list, use the <a href=\\\"\\\">.contains()<\/a> operator, syntax <code>AttributeName.contains(\\\"tested_value\\\")<\/code>, returns <code>true<\/code> if any Set\/List discrete value exactly matches the designated tested_value; if case sensitivity is irrelevant for the query use <a href=\\\"\\\">.icontains()<\/a>. If a user attribute <code>$PetTypes<\/code> has a value of \\'dogs;cats\\' then<\/p>\n\t<blockquote><code>$PetTypes.contains(\\\"dogs\\\")<\/code> is <code>true<\/code>,<\/blockquote>\n<p>but<\/p>\n\t<blockquote><code>$PetTypes.contains(\\\"dog\\\")<\/code> is <code>false<\/code> <\/blockquote>\n<p>This is because Let\/List matching does not allow partial matches, as via regex, unlike with String-type data.<\/p>\n<p>Other variants:<\/p>\n\t<blockquote><code>$PetTypes.contains(\\\"Dogs\\\").lowercase<\/code> is <code>true<\/code> <\/blockquote>\n\t<blockquote><code>$PetTypes.icontains(\\\"DOGS\\\")<\/code> is <code>true<\/code> <\/blockquote>\n<p>It can be useful to use a stored value as the search term, for instance using the name of an agent as the search term:<\/p>\n\t<blockquote><code>$PetTypes.contains($MyString)<\/code> is <code>true<\/code> <\/blockquote>\n<p>A query can test a single item from a list. For instance, if $MyList for note A is <code>[3;4;5]<\/code> and for note B is <code>[1;5;10]<\/code>, then query:<\/p>\n\t<blockquote><code>$MyList[1]==$MyNumber(agent)<\/code> <\/blockquote>\n<p>will match B but not A. This is because only B has the number 5 as the second list item (\\'1\\' in a zero-based list).<\/p>\n<p><b>Escaping literal semi-colons<\/b><\/p>\n<p>If a list item must contain a semi-colon, it must be escaped, using a backslash, \\'\\;\\'. Once the backslash is entered, it disappears and the list item containing the semi-colon is enclosed in double-quotes. Do not try to escape a value by adding the quotes directly, use the backslash method. Action code methods to make lists will treat a \\'\\;\\' in an input string as an escape and act accordingly. Consider using String.replace() as a method for escaping backslashes (though only where intended!).<\/p>\n<p><b>Listing and Exporting sets<\/b><\/p>\n<p>The <a href=\\\"\\\">format()<\/a> action operator and more recent <a href=\\\"\\\">.format()<\/a> dot operator offer ways to turn sets into HTML lists for export. See <a href=\\\"\\\">Exporting Set-type data<\/a> for more.<\/p>\n<p><b>System Attributes: Sets vs. Lists<\/b><\/p>\n<p>Most group-scope operators can work with lists or sets, as well as the <a href=\\\"\\\">find()<\/a> operator (whose own output is a list) and literal list-based group designators; exceptions include $DisplayedAttributes where duplicates would not be helpful. It is the declared data type of the attribute being collected that informs the operator to return a list or set.<\/p>\n<p><b>Default\/Empty value<\/b><\/p>\n<p>An empty string.<\/p>\n<p><b>Empty values in lists<\/b><\/p>\n<p>From v11.6.0, lists now allow blank (empty) list items when using the <code>[ ] <\/code>list notation. As a result, a trailing semi-colon will imply the intent of a last list item that is empty.<\/p>\n<p><b>Sorting order<\/b><\/p>\n<p>Lists are not sorted, so retain the order in which items were passed into the list, most recent being at the end. Lists can be sorted using action code sort operators or by setting the sort attributes of containers.<\/p>\n<p><b>List-type System Attributes<\/b><\/p>\n<p>Built-in attributes of the List data type are listed below:<\/p>\n<ul translate=\\\"no\\\">\n<p><li><span translate=\\\"no\\\"><a href=\\\"\\\">$Aliases<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$Authors<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$DisplayedAttributes<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$Flags<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$GridLabels<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$MyList<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$PlotColorList<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$PosterLabels<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$PosterX<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$PosterY<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$Sentiments<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$TableAttributes<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$TextCheckboxes<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$TimelineBandLabels<\/a><\/span><\/li>\n<\/ul><\/p>",
      "date_published": "2010-08-27T14:55:00+00:00",
      "date_modified": "2026-02-27T15:15:57+00:00"
    },
    {
      "id": "1772216593",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Use_of_Attributes/Attribute_Data_Types/Set-Type_Attributes.html",
      "title": "Set-Type Attributes",
      "content_html": "<p><b>Set<\/b><\/p>\n<p>A Set date type is a special type of string, within which discrete values are delimited by semicolons. When defining a Set in code, use the conventions are described for the <a href=\\\"\\\">List data type<\/a>.<\/p>\n<p>In terms of stored data the Set and List lists are the same: a string containing one or more semi-colon delimited items. The difference is in the way Tinderbox handles the two data types, as lists may contain duplicate items. Although the Set-type pre-dates List-type in Tinderbox, Lists should be thought of as the underlying form and Sets as a refined (de-duplicated) form of List.<\/p>\n<p>A Set is useful for lists of topics, categories, and tags where duplication of listed items is <i>not<\/i> wanted:<\/p>\n\t<blockquote><code>[astronomy;marine biology;chemistry]<\/code> <\/blockquote>\n\t<blockquote><code>[dogs;cats]<\/code> <\/blockquote>\n\t<blockquote><code>[3;9;15]<\/code> <\/blockquote>\n<p>Note that the Set is always a string even if the values happen to be numbers: item values in a Set do not have explicit data types. A Set can have a single value, e.g. the third example above. With a single value there is no need to add a final semicolon and the same holds for the last of multiple values. Tinderbox will not mind if you supply a semicolon there (or after the last of multiple values), it will just strip it off as it processes the data. The default Set value is an empty string. A Set-type differs from a List-type in that duplicate values are not allowed, and the list of values is always A–Z <a href=\\\"\\\">lexically sorted<\/a>.<\/p>\n<p>To apply values directly to a Set-type attribute via the Displayed Attributes or via Info view or via the Inspector\\'s Quickstamp, simply type the values as seen into the data box. In all these methods, you do not need to add enclosing quotes, but each discrete value should be separated with a semi-colon.<\/p>\n<p><b>Legacy: Sets and auto-sorting<\/b><\/p>\n<p>Prior to v9, sets did not always re-sort. Sets were then reimplemented to improve performance with large sets, which makes a Set more aggressive in asserting its control of the sequence of their elements. Compared to previous use, the stored order of items in the Set\\'s value list are much more likely to change from the order as originally entered into case-sensitive <a href=\\\"\\\">lexical sort<\/a> order. This may catch out long term users being used to Sets generally retaining their as-created item order. If the latter is needed, it may make more sense to use a List type instead.<\/p>\n<p><b>Declaring a new Set<\/b><\/p>\n<p>If setting a Set\\'s literal values via action code use the square bracket <code>[ ]<\/code> Set definition:<\/p>\n\t<blockquote><code>$MySet=[Frogs;Dogs;Logs];<\/code> <\/blockquote>\n<p>Above, the brackets <i>replace<\/i> the older <i>now-deprecated<\/i> method of enclosing quotes:<\/p>\n\t<blockquote><code>$MySet=\\\"Frogs;Dogs;Logs\\\";<\/code> NOTE: do not use this for new code!<\/blockquote>\n<p>Whilst both methods work and the latter, older, method will be found in many demos and tutorials, the bracketed notation is now the preferred method.<\/p>\n<p>Importantly, when typing\/pasting a Set\\'s values into a UI input box such as the Inspector, Get Info, or Displayed Attributes, the enclosing brackets or quotes (as used above) should be omitted, i.e. using <code>planes;trains;automobiles<\/code> not <code>[planes;trains;automobiles]<\/code>. If brackets are used by mistake, the Tinderbox parser should ignore an outmost pair (as it would quotes) abut still honour brackets within the overall list value as implying a nested list. If Tinderbox reads from a Set via code and reports (logs) a value with enclosing brackets, Tinderbox knows—in code—to ignore those as simply being list delimiters. <\/p>\n<p><b>Adding values<\/b><\/p>\n<p>With a Set you can add\/remove individual or multiple values and test its contents. In actions, <code>+<\/code> adds an item to a set if it is not already present, and <code>-<\/code>- removes it if it is present. Values must be enclosed in double quotes. If $PetTypes\\' value is \\\"cats;dogs\\\"<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes+[dogs]<\/code> leaves $PetTypes unchanged, since \\'dogs\\' is already in $PetTypes<\/blockquote>\n<p>The <code>+=<\/code> <a href=\\\"\\\">increment<\/a> operator can also be used. If the Set is \\'cats;dogs;frogs\\':<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes+[owls;dogs];<\/code> the Set is \\'cats;dogs;frogs;owls\\'.<\/blockquote>\n<p><b>Deleting values<\/b><\/p>\n<p>In actions using a <code>-<\/code> (minus) removes the supplied value(s) if present. Importantly, this removes <i>all<\/i> occurrences if the deleted item;<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes-[dogs];<\/code> leaves only \\'cats\\' as a value.<\/blockquote>\n<p>The <code>-=<\/code> <a href=\\\"\\\">decrement<\/a> operator can also be used. If the Set is \\'cats;dogs;frogs\\':<\/p>\n\t<blockquote><code>$PetTypes=$PetTypes-[cats;frogs];<\/code> this leaves only \\'dogs\\' as a value.<\/blockquote>\n<p><b>Testing (querying) Sets & Lists<\/b><\/p>\n<p>To test a Set or List, use the <a href=\\\"\\\">.contains()<\/a> operator, syntax <code>AttributeName.contains(\\\"tested_value\\\")<\/code>, returns <code>true<\/code> if any set\/list discrete value exactly matches the designated tested_value; if case sensitivity is irrelevant for the query use <a href=\\\"\\\">.icontains()<\/a>. If a user attribute <code>$PetTypes<\/code> has a value of \\'dogs;cats\\' then<\/p>\n\t<blockquote><code>$PetTypes.contains(\\\"dogs\\\");<\/code> is<code>true<\/code>,<\/blockquote>\n<p>but<\/p>\n\t<blockquote><code>$PetTypes.contains(\\\"dog\\\");<\/code> is <code>false<\/code> <\/blockquote>\n<p>This is because Set\/List matching does not allow partial matches, as via regex, unlike with String-type data.<\/p>\n<p>Other variants:<\/p>\n\t<blockquote><code>$PetTypes.contains(\\\"Dogs\\\").lowercase()<\/code> is <code>true<\/code> <\/blockquote>\n\t<blockquote><code>$PetTypes.icontains(\\\"DOGS\\\")<\/code> is <code>true<\/code> <\/blockquote>\n<p>It can be useful to use a stored value as the search term, for instance using the name of an agent as the search term:<\/p>\n\t<blockquote><code>$PetTypes.contains($MyString)<\/code> is <code>true<\/code> <\/blockquote>\n<p>A query can test a single item from a list. For instance, if $MyList for note A is <code>[3;4;5]<\/code> and for note B is <code>[1;5;10]<\/code>, then query:<\/p>\n\t<blockquote><code>$MyList[1]==$MyNumber(agent)<\/code> <\/blockquote>\n<p>will match B but not A. This is because only B has the number 5 as the second list item (\\'1\\' in a zero-based list).<\/p>\n<p><b>Listing and exporting Sets<\/b><\/p>\n<p>The <a href=\\\"\\\">format()<\/a> action operator, and newer <a href=\\\"\\\">.format()<\/a> dot operator offer ways to turn sets into HTML lists for export. See <a href=\\\"\\\">Exporting Set-type data<\/a> for more.<\/p>\n<p><b>Set data vs. List data<\/b><\/p>\n<p>List-type attributes came to Tinderbox after Sets. Lists, unlike Sets, allow duplicate values and Sets can better be thought of as de-duped versions of Lists, i.e. lists with no duplicate entries. <\/p>\n<p>To de-dupe a List, simply put its contents into a Set-type attribute:<\/p>\n\t<blockquote><code>$MySet=$MyList;<\/code> <\/blockquote>\n<p><b>Escaping literal semi-colons<\/b><\/p>\n<p>If a list item must contain a semi-colon, it must be escaped, using a backslash, \\'\\;\\'. Once the backslash is entered, it disappears and the list item containing the semi-colon is enclosed in double-quotes. Do not try to escape a value by adding the quotes directly, use the backslash method. Action code methods to make lists will treat a \\'\\;\\' in an input string as an escape and act accordingly. Consider using String.replace() as a method for escaping backslashes (though only where intended!).<\/p>\n<p><b>Default\/Empty value<\/b><\/p>\n<p>An empty string.<\/p>\n<p><b>Empty values in lists<\/b><\/p>\n<p>Whilst, from v11.6.0, lists now allow blank (empty) list items when using the <code>[ ] <\/code>list notation. However, the Set-type behaviour of weeding duplicates and re-sorting also removes all empty items in a list (e.g. from a List-type attribute) passed to a set.<\/p>\n<p><b>Sorting order<\/b><\/p>\n<p>As for a String Data Type, using the literal string values of the Set in case-sensitive lexical sort order. For example, the 5-item of values \\'Ant\\', \\'ant\\', \\'bee\\', \\'Cow\\', \\'cow\\' when passed to a set would store as \\\"<code>Ant;Cow;ant;bee;cow<\/code>\\\".<\/p>\n<p><b>Set-type System Attributes<\/b><\/p>\n<p>Built-in attributes of the set data type are listed below:<\/p>\n<ul translate=\\\"no\\\">\n<p><li><span translate=\\\"no\\\"><a href=\\\"\\\">$Associates<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$ClusterTerms<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$Deck<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$KeyAttributes<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$LocalAttributes<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$MySet<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$NLNames<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$NLOrganizations<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$NLPlaces<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$NLTags<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$Participants<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$RefKeywords<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$ScrivenerKeywords<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$SimplenoteTags<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$Tags<\/a><\/span><\/li>\n<li><span translate=\\\"no\\\"><a href=\\\"\\\">$Tot<\/a><\/span><\/li>\n<\/ul><\/p>",
      "date_published": "2006-12-11T10:42:09+00:00",
      "date_modified": "2026-02-27T15:18:00+00:00"
    },
    {
      "id": "1772214458",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Use_of_Attributes/Attribute_Listings/System_Attribute_List/AgentCaseSensitive.html",
      "title": "AgentCaseSensitive",
      "content_html": "<p>Control case-sensitivity of the agent query (pre-v6+).<\/p>\n<p>Used for agents and (smart) adornments only. It can only modify the <a href=\\\"\\\">String.contains()<\/a> operator (and older deprecated precursors) and not <a href=\\\"\\\">list.contains()<\/a>.<\/p>\n<p>Though not itself formally deprecated, $AgentCaseSensitive is really only of use if using now-deprecated very old early action code syntax which some long-standing documents may contain.<\/p>\n<p>From v11.6.0 this attribute is deprecated as it only has meaningful use in the older version of the app, pre v6.<\/p>",
      "date_published": "2004-08-15T00:07:49+00:00",
      "date_modified": "2026-02-27T15:20:01+00:00"
    },
    {
      "id": "1772216521",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Use_of_Attributes/Attribute_Listings/System_Attribute_List/OnMouseDown.html",
      "title": "OnMouseDown",
      "content_html": "<p>Action performed in map view when mouse cursor is pressed.<\/p>\n<p>From v11.6.0, this attribute is associated with <a href=\\\"\\\">mouse actions<\/a>.<\/p>",
      "date_published": "2026-02-27T13:57:15+00:00",
      "date_modified": "2026-02-27T14:18:33+00:00"
    },
    {
      "id": "1772216519",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Use_of_Attributes/Attribute_Listings/System_Attribute_List/OnMouseDrag.html",
      "title": "OnMouseDrag",
      "content_html": "<p>OnMouseDrag is invoked while the mouse is down if the mouse is moved and the note is locked.<\/p>\n<p>From v11.6.0, this attribute is associated with <a href=\\\"\\\">mouse actions<\/a>.<\/p>",
      "date_published": "2026-02-27T13:57:24+00:00",
      "date_modified": "2026-02-27T14:18:04+00:00"
    },
    {
      "id": "1772216522",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Use_of_Attributes/Attribute_Listings/System_Attribute_List/OnMouseUp.html",
      "title": "OnMouseUp",
      "content_html": "<p>Action performed in map view when mouse cursor is released.<\/p>\n<p>From v11.6.0, this attribute is associated with <a href=\\\"\\\">mouse actions<\/a>.<\/p>",
      "date_published": "2026-02-27T13:57:19+00:00",
      "date_modified": "2026-02-27T14:18:26+00:00"
    },
    {
      "id": "1772216520",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Action_Code/Actions/Mouse_actions.html",
      "title": "Mouse actions",
      "content_html": "<p>From v11.6.0, map view (<i>only<\/i>) gains new mouse-based actions, each with an associated action-type attribute. \\'Mouse\\' refers to ma view input via mouse or trackpad:<\/p>\n<ul><li> OnMouseDown (<a href=\\\"\\\">$OnMouseDown<\/a>). OnMouseDown is invoked when the mouse is left-clicked in the body of a note.<\/li>\n<li> OnMouseUp (<a href=\\\"\\\">$OnMouseUp<\/a>). OnMouseUp is invoked when the mouse button is released.<\/li>\n<li> OnMouseDrag (<a href=\\\"\\\">$OnMouseDrag<\/a>). OnMouseDrag is invoked while the mouse is down if the mouse is moved and the note is locked. If <a href=\\\"\\\">$Lock<\/a> is false, the note is repositioned in the normal way and OnMouseDrag is not invoked.<\/li><\/ul>\n<p>These mouse actions bind two local variables when invoked.<\/p>\n<ul><li> The List-type variable <a href=\\\"\\\">modifierKeys<\/a> contains a list of keys that were pressed when the mouse of clicked. <\/li>\n<li> The Dictionary-type variable <a href=\\\"\\\">UI<\/a> holds information about the click and its environment.<\/li><\/ul>",
      "date_published": "2026-02-27T13:51:51+00:00",
      "date_modified": "2026-02-27T14:16:17+00:00"
    },
    {
      "id": "1772216525",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Action_Code/Operators/Full_Operator_List/modifierKeys.html",
      "title": "modifierKeys",
      "content_html": "<p><b>modifierKeys<\/b><\/p>\n<p>When processing a stamp, the local List-type variable modifierKeys is set to a list of strings representing the modifier keys the user was pressing when the stamp is executed. For example, a value of <code>[control;option]<\/code> indicates that the control and option keys were pressed, and that neither the shift nor the command keys were pressed.<\/p>\n<p>Component values include: <code>command<\/code>, <code>option<\/code>, <code>shift<\/code>, and <code>control<\/code>.<\/p>\n<p>From v11.6.0, this variable is associated with (map-only) <a href=\\\"\\\">mouse actions<\/a>.<\/p>",
      "date_published": "2025-11-14T21:44:57+00:00",
      "date_modified": "2026-02-27T14:13:48+00:00"
    },
    {
      "id": "1772216534",
      "url": "https://atbref.com/atbref11/index/Automating_Tinderbox/Coding/Action_Code/Operators/Full_Operator_List/UI.html",
      "title": "UI",
      "content_html": "<p>From v11.6.0, <a href=\\\"\\\">mouse actions<\/a> are associated with a local-scope Dictionary-type variable <b>UI<\/b>. This holds information about a mouse-click and its environment:<\/p>\n<ul><li> <code>x<\/code>: the mouse horizontal position in map coordinates, relative to the top left of the note.<\/li>\n<li> <code>y<\/code>: the mouse vertical position in map coordinates, relative to the top left of the note.<\/li>\n<li> <code>height<\/code>: the height of the note<\/li>\n<li> <code>width<\/code>: the width of the note<\/li>\n<li> <code>hit<\/code>: a boolean, <code>true<\/code> if the mouse is inside the note, <code>false<\/code> otherwise.<\/li>\n<li> <code>view<\/code>: a string representing the type of view, such as <code>map<\/code>.<\/li><\/ul>",
      "date_published": "2026-02-27T14:07:12+00:00",
      "date_modified": "2026-02-27T14:14:39+00:00"
    },
    {
      "id": "1772214494",
      "url": "https://atbref.com/atbref11/index/Windows/Document_Window/View_pane/Gaudi_view.html",
      "title": "Gaudi view",
      "content_html": "<p>[First introduced in v10.0.0]<\/p>\n<p>The intent of the view is to cluster child notes of a similar type together using efficient space packing—resulting in the odd-shaped notes seen in the view. The layout draws on spatial packing as seen in Voronoi diagrams. The view\\'s name is inspired by the art and design of the Catalan architect and designer Antoni Gaudí (in places within the app this is anglicised without the accent as \\'Gaudi\\').<\/p>\n<p>The cause of attraction is set by a query-based expression in the <b>Force<\/b> box—see link below for the view controls. If the <b>Force<\/b> field is empty, no notes attract other notes. But everything else in the view still happens: notes are attracted to the centroid of their hulls, friction is applied, and a new Voronoi diagram is computed.<\/p>\n<p><b>What the table shows<\/b><\/p>\n<p>All children (<i>but not<\/i> further descendants) of the container selected when choosing this view type. Adornments, separators, and notes with $GaudiHidden set to <code>true<\/code> are not shown.<\/p><b><\/p>\n<\/b><p>Press <b>[Return]<\/b> to create a note to the right of the selected note. Double-click to create a note at any point. The new note ought to be created somewhere near the click point. Of course, forces and the pressure of adjacent notes can cause it to be inserted go somewhere else in the view.<\/p>\n<p>The <b>Badge widget<\/b> and <b>Link widget<\/b> operate as in other views.<\/p>\n<p>Option-drag performs marquee select on notes within the chosen rectangle. In contrast to map view, where any note that partially overlaps the marquee rectangle is selected, in Gaudí view only notes whose centre—technically their centroid—lies within the marquee rectangle created when they are selected.<\/p>\n<p>To edit a note, select that note, then click and hold over the title. When finished, press [Return] or click elsewhere.<\/p>\n<p>Even though Tinderbox can fit plenty of notes into the map, eventually it will run out of space and computational power. 40–80 notes is probably the sweet spot, and less than 200 is recommended as a maximum.<\/p>\n<p>Note that prototypes are drawn in Gaudí view with a double border. Links are drawn among notes if both source and destination are visible in the view.<\/p>\n<p>At low roundness levels, an inter-node boundary is drawn between notes borders.<\/p>\n<p>As well as using the attribute based filtering (see Controls, below), Gaudi view supports use of the view pane Filter bar, allowing dynamic examination of a query-based subset of the container\\'s notes, temporarily simplifying the view.<\/p>\n<p>Right-clicking in the view opens a <a href=\\\"\\\">context menu<\/a>.<\/p>\n<p>Notes use <a href=\\\"\\\">$NameFont<\/a> (i.e. as in map view titles)—see also Document Settings ▸ <a href=\\\"\\\">Map<\/a>.<\/p>\n<p>The contextual menu offers to Hide notes rather than Omit them. Also, the prototype submenu of the contextual menu now sets the prototype to the original note, even if that original note has prototypes (this relates to the selected item being an alias).<\/p>",
      "date_published": "2024-06-04T10:48:10+00:00",
      "date_modified": "2026-02-27T13:14:09+00:00"
    },
    {
      "id": "1772216546",
      "url": "https://atbref.com/atbref11/index/Windows/Document_Window/View_pane/Map_view/Map_overview_mode.html",
      "title": "Map overview mode",
      "content_html": "<p>To see an overview of the entire map, press and hold the Control, Option, and Command keys (^+⌘+⌥) simultaneously.<\/p>\n<p>To zoom to a different part of the map from the overview, move the mouse cursor to the area of the map in which you are interested before you release the ^+⌘+⌥ keys.<\/p>\n<p>From v11.6.0, when using the zoomed-out overview mode, the portion of the map that is normally visible is now highlighted. In addition, the zoomOut:\/zoomBack animation is skipped for complex maps, as it is too slow to be helpful.<\/p>",
      "date_published": "2018-05-09T13:39:52+00:00",
      "date_modified": "2026-02-27T14:52:44+00:00"
    },
    {
      "id": "1772216556",
      "url": "https://atbref.com/atbref11/index/Windows/Document_Window/View_pane/Find_toolbar_view_pane.html",
      "title": "Find toolbar (view pane)",
      "content_html": "<p>The Find toolbar appears after you press ⌘-F with focus in the view pane. This adds a toobar isside, and acroos the top of the view pane.<\/p>\n<p>If the Find toolbar is already visible, ⌘-F moves the keyboard focus to the Find toolbar\\'s search field. [Esc] dismisses the Find toolbar. The width of the search term input box of the find bar grows larger if the window is sufficiently wide. To dismiss (hide) the toolbar click the toolbar\\'s <b>Done<\/b> button.<\/p>\n<p><b>Main controls<\/b><\/p>\n<p>Three independent buttons allow setting per-note search scope to use data from a <b>User<\/b> (attribute) and\/or <b>Text<\/b> (<a href=\\\"\\\">$Text<\/a>) and\/or <b>Name<\/b> (note\\'s title: <a href=\\\"\\\">$Name<\/a>), or both. By default only <b>Text<\/b> and <b>Name<\/b> are pre-selected.<\/p>\n<p>Click the <b>User<\/b> button to additionally search a single user attribute, select from a pop-up list of all user attribute for the current document. Dismiss the popover and the label of the <b>User<\/b> button becomes that of the chosen attribute and operates as a toggle like the other two buttons. for instance if \\'SomeAttribute\\' is selected, <b>User<\/b> becomes <b>SomeAttribute<\/b>. As only one user attribute selection is allowed, selecting a new user attribute will replace the existing choice. The feature is reset to \\'User\\' (i.e. no selection) at the beginning of each session, i.e. each time the TBX is (re-)opened..<\/p>\n<p><b>Additional controls<\/b><\/p>\n<p>A prototype-based filter control is offered, essentially adding a fourth query term for an exact string match on the selected prototype\\'s $Name.. The pop-up list displays all the document\\'s currently defined prototypes. Selecting a prototype, filters the Find results to only those items using the selected prototype.<\/p>\n<p>The <a href=\\\"\\\">pop-up menu<\/a> in the search term input box has 3 tick-option items. These are for case-sensitive search, disabling parsing for regular expression use, and an option to use whole document (default) search or only search in selected container(s). From v11.60, a new menu option on the Find bar\\'s search menu allows query-based search.<\/p>\n<p><b>Entering a search term<\/b><\/p>\n<p>Enter a search term in the box and press <b>Return<\/b> (<b>↩<\/b>) to see a pop-up <a href=\\\"\\\">list of matches<\/a>. Click the \\'x\\' button in the input box to clear the search. Click on the magnifying glass icon to see a <a href=\\\"\\\">pop-up list<\/a> of previous searches (up to 10 are stored); that list can be cleared via the same menu\\'s options. Dragging the view pane wider will increase the width if the search term input box.<\/p>\n<p>Autocomplete suggestions. In macOS 10.14+ (but only in supported languages), Find offers suggested related words as possible autocompletions in the Find bar and in torn-off Find windows. Otherwise, the Find Bar does not display a menu of related words as autocomplete suggestions, such a suggestions list may be requested by pressing the <b>F5<\/b> key.<\/p>\n<p>Double-clicking the chosen user attribute\\'s UI button is a convenient shortcut to searching for the currently entered find string in that attribute.<\/p>",
      "date_published": "2015-04-11T19:24:15+00:00",
      "date_modified": "2026-02-27T14:41:16+00:00"
    },
    {
      "id": "1772216579",
      "url": "https://atbref.com/atbref11/index/Windows/Inspector.html",
      "title": "Inspector",
      "content_html": "<p>The inspector dialog has TBX <a href=\\\"\\\">document<\/a> scope, i.e. you can open one for each open TB document. Its outcome works on the current selection (of the parent document). By default it opens with the Quickstamp pane selected.<\/p>\n<p>In keeping with Inspector-type windows in other apps the Inspector always sits in front of any other Tinderbox window. The Inspector is invisible when the Tinderbox app loses focus; it does not close but is simply not drawn on screen when another app is in use.<\/p>\n<p>An Inspector\\'s window title will show the name of the parent TB document, a colon, and either the <a href=\\\"\\\">$DisplayName<\/a> of a single selected or the count number of notes in a multiple selection.<\/p>\n<p>The Inspector may be resized. Code fields, in particular, may thus be expanded at will to accommodate more complex logic when needed.<\/p>\n<p>In general documentation and community usage, the tab name or full name ate used interchangeably. Thus the \\'Links Inspector\\' is the same as the \\'Document Inspector\\'s Links tab\\', etc. Likewise, the main Inspector name is assumed to refer to its default (first) tab: thus, \\'Appearance Inspector\\' may be assumed to mean the Appearance Inspector\\'s Interior tab unless a different tab name is given.<\/p>\n<p>From v11.6.0, the default size of the Inspector has ben revised to make it a little slimmer—better for small screens. The Inspector can still be resized. If this occurs the revised size is used for the rest of the current app session. Whether there are colour configuration controls, the colour wells have been moved from below to sit at the right of the other controls.<\/p>\n<p><b>Editing note $Name via the Inspector<\/b><\/p>\n<p>When the inspector displays the name of <i>a single<\/i> selected note at the top of the current pane, the name may now be edited by clicking on it. Editing is disabled when:<\/p>\n<ul><li> multiple notes are selected.<\/li>\n<li> the Tinderbox or Document Inspector is selected. This is because these Inspectors <i>always<\/i> apply to the whole document and never to a single note.<\/li><\/ul>",
      "date_published": "2009-10-09T17:18:27+00:00",
      "date_modified": "2026-02-27T15:10:24+00:00"
    },
    {
      "id": "1772216541",
      "url": "https://atbref.com/atbref11/index/Dialogs/Get_Info_pop-over/text_tab.html",
      "title": "text tab",
      "content_html": "<p>Scope: source (selected) note.<\/p>\n<p>The text tab shows the <a href=\\\"\\\">$Text<\/a> space of the current note. Dragging the pop-over will result in a \\'tear-off\\' stand-alone window that will persist until the end of the current session (i.e. the document and\/or app are closed). A torn-off window may be closed during the current session if no longer needed.<\/p>\n<p>This feature is offered in a richer form  by opening a <a href=\\\"\\\">stand-alone text window<\/a> for a note. Links in $Text are non-functional in this display.<\/p>\n<p>From v11.6.0, Text pane in Get Info has been removed, having been found to be not very useful. This reflects the fact that note text is now often longer and more complex than in the early days of Tinderbox.<\/p>",
      "date_published": "2015-04-11T19:30:08+00:00",
      "date_modified": "2026-02-27T14:28:57+00:00"
    },
    {
      "id": "1772214461",
      "url": "https://atbref.com/atbref11/index/Menus/Menus_sub-menus/Edit_menu.html",
      "title": "Edit menu",
      "content_html": "<p>The Edit menu contains the following items:<\/p>\n<ul><li> <b>Undo <\/b><b><i>(last action)<\/i><\/b>. (<b>⌘<\/b><b>Z<\/b>) Undo the <i>last action<\/i>.<\/li>\n<li> <b>Redo <\/b><b><i>(last action)<\/i><\/b>. (<b>⇧⌘<\/b><b>Z<\/b>) If no <i>last action<\/i> or <i>last action<\/i> cannot be buffered, this item reads \\\"Can not redo\\\".<\/li>\n<li> <b>Cut<\/b>. (<b>⌘<\/b><b>X<\/b>) Removes the selection and copies it to the clipboard.<\/li>\n<li> <b>Copy<\/b>. (<b>⌘<\/b><b>C<\/b>) Copies the current selection to the clipboard.<\/li>\n<li> <b>Copy View As Image<\/b>. (<b>⇧⌘<\/b><b>Z<\/b>) Copies current view pane contents (except for Attribute Browsers) to clipboard as an image in both PDF and PNG format; the saved image includes the whole view (e.g. non-visible parts of a map). \n<ul><li> No save dialog is shown, simply open an image editor and create a new document from the clipboard or paste into a new empty image document.<\/li>\n<li> The exported data is in vector form, and can be edited as such if pasted into a vector-capable image editor. The image data will be rasterised by the image editor if it is pasted into a raster image document, the PNG version of the copied data will be used. Preview will use the PDF data if creating a new document from the clipboard.<\/li>\n<li> For Outline and Chart views the image shows the tree in its current state of expansion; collapsed branches remain so in the image.<\/li>\n<li> From v11.6.0, images are available for Hyperbolic view, and the option creates better images for Gaudí view.<\/li><\/ul><\/li>\n<li> <b>Paste<\/b>. (<b>⌘<\/b><b>V<\/b>) Pastes clipboard contents to current cursor position or replaces existing selection.<\/li>\n<li> <b>Paste and Match Style<\/b>. (<b>⌥⇧⌘<\/b><b>V<\/b>) This will cause the font typeface and size of the pasted text to pick up the settings in the note immediately preceding the paste, whether note default or further altered before the paste. Font colour and bold\/italics are unaffected.<\/li>\n<li> <b>Delete<\/b>. Deletes current selection.<\/li>\n<li> <b>Select All<\/b>. (<b>⌘<\/b><b>A<\/b>) Select all $Text in the text pane (focus in $Text area) or all notes in current view in the view pane.\n<ul><li> Hold Control+Option keys (<b>⌃⌥<\/b>)down as well to see alternate menu item: <b>Deselect All<\/b>. As it says, everything in the current view pane is deselected.<\/li><\/ul><\/li>\n<li> <b>Break Composite<\/b>. Greyed out unless a <a href=\\\"\\\">composite<\/a> is selected (or one or more items that are part of a composite). Breaks the composite into stand-alone notes.<\/li>\n<li> <b>Duplicate<\/b>. Duplicates the current note(s). The new note is called \\\"[original name] copy\\\". The new note is inserted as the next sibling in views except the the Map view where it is inserted down and right slightly overlapping the source note. Any sequential attributes are incremented, otherwise all attributes are those of the source note. Multiple selections can be duplicated.<\/li>\n<li> <b>Insert<\/b>. Opens the Insert <a href=\\\"\\\">sub-menu<\/a>. This menu is only active if focus is in the $Text pane.<\/li>\n<li> [rule]<\/li>\n<li> <b>Make Alias<\/b>. (<b>⌘L<\/b>) Creates an <a href=\\\"\\\">alias<\/a> of the currently selected note (only available with a single note is selected). The new alias is inserted as the next sibling in views except the the Map view where it is inserted down and right slightly overlapping the source note. Multiple individual aliases can be made from multiple selections<\/li>\n<li> [rule]<\/li>\n<li> <b>Show Original<\/b>. (<b>⌘<\/b><b>R<\/b>) Available when an <a href=\\\"\\\">alias<\/a> is selected. Locates the position of the source note for the alias. From v11.5.2 this is disabled when more than one note is selected.\n<ul><li> Hold Shift key (⇧) to see alternate menu item: <b>Show Original In New Tab<\/b>. The original is shown, but a new tab is opened and selected. From v11.5.1 this is disabled when more than one note is selected.<\/li><\/ul><\/li>\n<li> <b>Find<\/b>. Opens the Find <a href=\\\"\\\">sub-menu<\/a>.<\/li>\n<li> <b>Writing Tools<\/b>. (macOS 15.1+ and Apple Silicon cpu). Opens the Writing Tools sub-menu (if OS version offers it).<\/li>\n<li> <b>Spelling and Grammar<\/b>. Opens the Spelling and Grammar <a href=\\\"\\\">sub-menu<\/a>. Most item is in the menu are only active if focus is in the $Text pane.<\/li>\n<li> <b>Substitutions<\/b>. Opens the Substitutions <a href=\\\"\\\">sub-menu<\/a>. This menu is only active if focus is in the $Text pane.<\/li>\n<li> <b>Transformations<\/b>. Opens the Transformations <a href=\\\"\\\">sub-menu<\/a>. This menu is only active if focus is in the $Text pane.<\/li>\n<li> <b>Speech<\/b>. Opens the Speech <a href=\\\"\\\">sub-menu<\/a>. This menu is only active if focus is in the $Text pane.<\/li>\n<li> [rule]<\/li>\n<li> <b>Document Settings…<\/b> (<b>⌘<\/b><b>8<\/b>) Opens <a href=\\\"\\\">Document Settings<\/a>. This menu is only active if focus is in the $Text pane.<\/li>\n<li> [rule]<\/li>\n<li> <b>Autofill<\/b>. Opens the Autofill <a href=\\\"\\\">sub-menu<\/a>. This menu is only active if focus is in the $Text pane.<\/li>\n<li> <b>Start Dictation<\/b>. (<b>fnfn<\/b> - i.e. \\'fn\\' key twice, or <b>fn<\/b>+<b>F5<\/b> or) Commence dictation mode using the macOS\\' built-in dictation facilities. Some F5 keys have a microphone symbol (not stated Unicode <\/li>\n<li> <b>Emoji & Symbols…<\/b> (<b>⌃⌘S<\/b><b>pace<\/b> or 🌐 or <b>fn<\/b>) Open the Emoji & Symbols pop-over.<\/li><\/ul>\n<p>Sub-menus:<\/p>",
      "date_published": "2005-03-12T14:06:50+00:00",
      "date_modified": "2026-02-27T12:57:20+00:00"
    },
    {
      "id": "1772214471",
      "url": "https://atbref.com/atbref11/index/Menus/Pop-up_menus_and_lists/View_pane_note_selected_pop-up_menu.html",
      "title": "View pane (note selected), pop-up menu",
      "content_html": "<p>This menu is shown when right-clicking in the view pane of Map, Outline, Chart or Timeline views with at least one item selected; other views have differing pop-up menus. Items may be greyed out according to context and some items vary by view type:<\/p>\n<ul><li> <b>Move To First<\/b>. In Map views this moves the current note in front of all other notes (i.e. first by outline order).<\/li>\n<li> <b>Move Note Up<\/b>. In Outline views this moves the current note up one place (at sibling level).<\/li>\n<li> <b>Move Note Down<\/b>. In Outline views this moves the current note down one place (at sibling level).<\/li>\n<li> <b>Move To Last<\/b>. In Map views this moves the current note behind all other notes (i.e. last by outline order).<\/li>\n<li> <b>Rename<\/b>. Places selected item\\'s title in Edit-in-Place mode.<\/li>\n<li> <b>Create Note<\/b>. Create a new <a href=\\\"\\\">note<\/a>, as next sibling to the current selection.<\/li>\n<li> <b>Create Agent<\/b>. Create a new <a href=\\\"\\\">Link type honouring operators<\/a>, as next sibling to the current selection.<\/li>\n<li> <b>Create Separator<\/b>. (Outline only) \/ <b>Create Adornment<\/b> (Map only). View dependent:\n<ul><li> Outline view: adds a new note as next sibling with the \\'<a href=\\\"\\\">separator<\/a>\\' option pre-ticked. If more than one note is selected, the separator is placed after the first item in the selection (by outline order).<\/li>\n<li> Map View: adds an <a href=\\\"\\\">adornment<\/a>. The adornment is created so as to enclose the currently selected note. If more than one note is selected, the adornment surrounds the top left note in the selection.<\/li>\n<li> All other views: shows \\'Create Separator\\' option greyed out.<\/li><\/ul><\/li>\n<li> <b>Make Alias<\/b>. Make an <a href=\\\"\\\">alias<\/a> of the current selection.<\/li>\n<li> <b>Show Original<\/b>. Available when an alias is selected. Locates the position of the source note for the alias.<\/li>\n<li> <b>Show Original In New Tab<\/b>. The original is shown, but a new tab is opened and selected.<\/li>\n<li> <b>Get Info…<\/b> Open the <a href=\\\"\\\">Get Info<\/a> pop-over for the selected item.<\/li>\n<li> <b>Lock\/Unlock<\/b>. (From v11.6.0) Toggles locking of the note, in <a href=\\\"\\\">$Lock<\/a>.<\/li>\n<li> <b>Copy Note Path<\/b>. This places the <a href=\\\"\\\">$Path<\/a> value of the selected note on the clipboard (i.e. in in-app path). Note that if the selected item uses a Display Expression, the last part of the path may differ from the title seen on screen.<\/li>\n<li> <b>Copy Note URL<\/b>. Copies a <a href=\\\"\\\">Tinderbox protocol URL<\/a> to the clipboard (to re-open the document with the current view and selection). From v11.6.0 this option is additionally available in Table\/Gaudí\/Hyperbolic and Attribute browser views: it also moves to its current location (from the bottom of the menu).<\/li>\n<li> <b>Arrange<\/b>. Open the <a href=\\\"\\\">Arrange<\/a> submenu.<\/li>\n<li> <b>Shape<\/b>. Open the <a href=\\\"\\\">Shape<\/a> sub-menu, this is greyed out unless the current view is a Map view<\/li>\n<li> <b>Stamps<\/b>. A sub-menu of stamps defined in the current document. Clicking an item applies the stamp to the current selection.<\/li>\n<li> <b>Recent Badges<\/b>. A sub-menu of  that contains a list of badges that have recently been selected using the <a href=\\\"\\\">Badge Picker<\/a> or the <a href=\\\"\\\">Appearance Inspector<\/a>. The most recently-used badge is listed first. Badges that are set by actions, displayed attributes, or the attributes pane of Get Info are not taken into account by this menu. Using this to select a badge places the selected badge at the top of the recent badges menu; also, this menu item is applied to all selected notes.<\/li>\n<li> <b>Text Window<\/b>. Open the curren<a href=\\\"\\\">t note as a<\/a> stand-alone text window.<\/li>\n<li> <b>Roadmap…<\/b> Open the Roadmap pop-over for the selected item.<\/li>\n<li> <b>Browse Links…<\/b> Opens the <a href=\\\"\\\">Browse Links<\/a> pop-over.<\/li>\n<li> <b>Open in a New Tab<\/b>. Open the current context as a new tab. This open a new tab and shifts outline depth focus in one move.<\/li>\n<li> <b>Open Prototype in New Tab<\/b>. Opens the <i>prototype<\/i> of the selected note. Remains greyed out if the selected note has no prototype assigned.<\/li><\/ul>",
      "date_published": "2007-07-05T01:16:58+00:00",
      "date_modified": "2026-02-27T13:07:23+00:00"
    },
    {
      "id": "1772216561",
      "url": "https://atbref.com/atbref11/index/Menus/Pop-up_menus_and_lists/View_pane_Find_toolbar_pop-up_menu.html",
      "title": "View pane Find toolbar, pop-up menu",
      "content_html": "<p>Clicking the down-chevron in the View pane\\'s <a href=\\\"\\\">Find toolbar<\/a>\\'s input box opens this menu.<\/p>\n<p>The menu includes the following options:<\/p>\n<ul><li> <b>Case-Sensitive<\/b> (default: unticked). Indicates whether the input search term is checked case-sensitively or not. This setting equates to the \\'case sensitive\\' tick-box on the stand-alone <a href=\\\"\\\">Find results dialog<\/a>.<\/li><\/ul>\n<p>From v11.6.0, the next three options operate like a set of radio-button controls, ticking one de-actives the other two:<\/p>\n<ul><li> <b>Regular Expression<\/b> (default; ticked). Indicates whether the input terms should be parsed as if a regular expressions.This should be left in the default setting. This option is <i>not<\/i> repeated on the Find results dialog, unlike the setting above. Inactive, but ticked by default on the stand-alone <a href=\\\"\\\">Find results dialog<\/a>.<\/li>\n<li> <b>Text<\/b>. The search string is tested as a literal string.<\/li>\n<li> <b>Tinderbox Expression<\/b>. New to v11.6.0, this option allows agent-style queries to be used, thus allowing checking of more than title\/text\/one other selected attribute.<\/li>\n<li>Tinderbox Expression. From <\/li>\n<li> (default: ticked) <b>Entire Document<\/b> (if ticked) or Selected Container(s) (if un-ticked). If the latter is active, the search is limited to selected notes and their descendants. If the selected notes change, subsequent searches are limited to the currently-selected notes and their descendants.  Inactive, but ticked by default on the stand-alone <a href=\\\"\\\">Find results dialog<\/a>.<\/li>\n<li>[rule]<\/li>\n<li>A list of recent search terms.<\/li>\n<li>[rule]<\/li>\n<li><b>Clear Recent Searches<\/b>. Clicking this clears the above list of past search terms.<\/li><\/ul>",
      "date_published": "2020-11-27T14:40:26+00:00",
      "date_modified": "2026-02-27T14:46:52+00:00"
    },
    {
      "id": "1772216574",
      "url": "https://atbref.com/atbref11/index/Misc_User_Interface_Aspects/Autocompletion_of_input/Displayed_Attributes_value_autocompletion.html",
      "title": "Displayed Attributes value autocompletion",
      "content_html": "<p>Some String-based attributes\\' values in the <a href=\\\"\\\">Displayed Attributes table<\/a> offer autocompletion when edited in the Displayed Attributes table of a tab\\'s text pane. Supported attribute types are:<\/p>\n<ul><li> List<\/li>\n<li> Set<\/li>\n<li> String<\/li><\/ul>\n<p>The auto-complete is quite flexible and does not just match possible matching values from the start of current input. For example, if typing \\\"kin\\\", autocompletion will offer matches such as \\\"Laurie R. King\\\" as well as \\\"kingdom\\\".<\/p>\n<p>Use the up-arrow (↑) and down-arrow (↓) keys to select alternative autocompletion possibilities.<\/p>\n<p>To not use the currently suggested auto-complete value, or to use a value that is a substring of the suggested value, use the backspace key (⌫). The edit box shows only the characters actually typed by the user.<\/p>\n<p>This list is <i>separate from<\/i> the attribute table row\\'s pop-up list of used values for that attribute<\/p>\n\t<blockquote>NOTE: this value auto-complete is also used it the Get Info::<a href=\\\"\\\">attributes<\/a> tab.<\/blockquote>\n<p><b>Maximum list length for matches <\/b> <\/p>\n<p>From v11.6.0, the maximum list of matches was increased from 199, to 399. In fact, a value count above that will still be listed but at the trade of of a slightly slower refresh rate for the list.<\/p>\n<p><b>Length of matched values in the list<\/b><\/p>\n<p>Individual listed matches are truncated at 31 characters. Values longer than that must be entered manually.<\/p>\n<p><b>Values starting with digits, decimals or a minus<\/b><\/p>\n<p>If the value being typed begins with a digit, a decimal point, or a - sign, then autocomplete is inhibited for that value. Thus, autocomplete is inconvenient when used with string attributes that happen to have numeric forms, such as Dewey Decimal numbers or numeric IP addresses or social security numbers. Previously in this case, Tinderbox eagerly made suggestions, but they were unlikely to be very helpful.<\/p>\n<p><b>\\'@ \\' in List and Set-type attributes only<\/b><\/p>\n<p>These offer autocompletion based on <i>discrete list values<\/i> (as opposed to a string of all list values stored for a given note). In List and Set types only, value autocompletion regards the character \\'@\\' as starting a word; this is to support GTD-style tag values with an \\'@\\' prefix.<\/p>\n<p><b>Diacriticals (accents)<\/b><\/p>\n<p>Autocompletion supports values with diacriticals allowing matches beyond the basic ASCII character set. Auto-completion is also used with edit-in-place of Outline view column data.<\/p>",
      "date_published": "2011-04-30T23:38:00+00:00",
      "date_modified": "2026-02-27T15:02:20+00:00"
    },
    {
      "id": "1772216552",
      "url": "https://atbref.com/atbref11/index/Formatting/Markdown_preview_rendering.html",
      "title": "Markdown preview rendering",
      "content_html": "<p><b><i>Note<\/i><\/b><i>: Markdown is not a core feature of Tinderbox, although it supports its use as detailed below. Thus, problems using Markdown syntax to get the correct HTML output are best researched in the Markdown community. Or, if asking in the Tinderbox user forum be mindful that not all Tinderbox users know about or understand Markdown.<\/p>\n<\/i><hr\/>\n<p>How does Tinderbox know to parse a note for Markdown markup?<\/p>\n<p>This is done if <a href=\\\"\\\">$HTMLMarkdown<\/a> is set to <code>true<\/code> for a note. This occurs in a number of ways:<\/p>\n<ul><li> zero-configuration use of the text pane \\'<a href=\\\"\\\">Preview<\/a>\\' tab. Doing this in a document with no export templates, adds the Hints folder (and its <a href=\\\"\\\">preview-related<\/a> content. This includes setting the note\\'s $HTMLMarkdown to <code>true<\/code>.<\/li>\n<li> setting a note to use the built-in \\'<a href=\\\"\\\">Markdown<\/a>\\' prototype (which sets $HTMLMarkdown to <code>true<\/code>).<\/li>\n<li> setting $HTMLMarkdown to <code>true<\/code> either manually or via action code.<\/li><\/ul>\n<p>As well as parsing for Markdown syntax such notes also evaluate the $Text as ^text^, including any inline ^export^ code within the $Text. Any inline explicit HTML code is treated as deliberate code (as opposed to literal text) and so is <i>not<\/i> escaped.<\/p>\n<p>Details of how Markdown and its various flavours work is out of scope for aTbRef and should be researched in Markdown resources such as <a href=\\\"https:\/\/www.markdownguide.org\\\">markdownguide.org<\/a>.<\/p>\n<p>If no export template is defined for the note, the <a href=\\\"\\\">built-in default<\/a> of ^text^ is used for selecting the content shown in the preview.<\/p>\n<p>Tags embedded in the text such as ^value()^ are evaluated before being passed to Markdown.<\/p>\n<p>Do not use place Markdown style marking around Tinderbox links in $Text (neither text nor web types of links) or the Markdown parser will double-encode the web link; it will look like a link but not work. In such a scenario, <i>always<\/i> check the source HTML of the exported page, or if working in the in-app Preview tab, look at the HTML code in the text Export tab.<\/p>\n<p><b>Markdown variants available<\/b><\/p>\n<p>Unlike HTML, evolution in the Markdown community means there are a number of \\'flavours\\' of Markdown available. Each shares core Markdown feature support but then adds additional syntax\/features some or none of which are compatible with other Markdown flavours.<\/p>\n<p>The Tinderbox app ships with two flavours including:<\/p>\n<ul><li> \\'<code>CommonMark<\/code>\\'. This is an internal pointer to the bundled copy of the newer and faster rendering fork of the original Markdown. Details of CommonMark features and how they work are at <a href=\\\"https:\/\/commonmark.org\\\">commonmark.org<\/a>. CommonMark preview permits embedded HTML.<\/li>\n<li> \\'<code>Markdown<\/code>\\'. This is an internal pointer to the bundled copy of the original Markdown processor. Details of CommonMark features and how they work are at <a href=\\\"https:\/\/daringfireball.net\/projects\/markdown\/\\\">daringfireball.net<\/a>.<\/li>\n<li> From v11.6.0, \\'<code>MultiMarkdown<\/code>\\'. If HTMLPreviewCommand is \\\"MultiMarkdown\\\", a built-in MultiMarkdown processor will be used.<\/li>\n<li> OS path to some other Markdown script. This allows Tinderbox to use a specified Markdown variant (e.g. one to which the user has added extra plug-ins) stored in the host macOS system.<\/li><\/ul>\n<p>In all the choice can be altered by setting the <a href=\\\"\\\">$HTMLPreviewCommand<\/a>. If the latter is left blank (the default) \\'markdown\\' is the assumed variant to use.<\/p>\n<p>When using export, the text pane\\'s <a href=\\\"\\\">Export<\/a> tab displays the current note\\'s $HTMLExportPreviewCommand value and allows the Markdown processing to be toggled on\/off to help with troubleshooting its use.<\/p>\n<p>Details of Markdown syntax and its various flavours work is out of scope for aTbRef and should be researched in Markdown resources such as <a href=\\\"https:\/\/www.markdownguide.org\\\">markdownguide.org<\/a>.<\/p>\n<p><b>Preview streaming to other apps<\/b>. When a <a href=\\\"\\\">Markdown-prototyped<\/a> note in Tinderbox is selected or edited, its export and Markdown code-evaluated contents will be sent to apps that support preview streaming. Markdown apps currently known to use preview streaming with Tinderbox:<\/p>\n<ul><li> Marked 2 (<a href=\\\"\\\">see more<\/a>).<\/li><\/ul>",
      "date_published": "2017-08-29T16:58:20+00:00",
      "date_modified": "2026-02-27T14:38:41+00:00"
    },
    {
      "id": "1772216463",
      "url": "https://atbref.com/atbref11/index/Use_of_AI/MCP_for_AI/AI_Additions_to_the_Hints_container.html",
      "title": "AI Additions to the Hints container",
      "content_html": "<p>The <a href=\\\"\\\">built-in Hints<\/a> container has a new AI-related new content as of v11.0.0.<\/p>\n<p>Re-adding the built-in Hints to a TBX document with a pre-existing <code>\/Hints<\/code> container will cause any newer, missing, default content to be added.  Existing customisations are not affected.<\/p>\n<p>From v11.5.0 the built-in Hints container adds a new branch <code>\/Hints\/AI\/Gemini<\/code>. Re-adding the Build-in Hints to an existing file will add the new container and its contents.<\/p>\n<p>From v11.6.0 a separate Readings and Hints area for Claude Code may be added using File ▸ Built In Hints (if hints is already present only this new content gets added. It is also possible to the AI to create a Claude Code section in existing TBX files.<\/p>\n<p>From v11.6.0, text of the built-in AI notes containers was revised to adopt a hierarchical note structure. For a new session, Claude is directed to read only the top-level notes which summarise the topic, and such additional notes as may become useful.<\/p>\n<p>From v11.6.0, Tinderbox’s AI Integration offers an additional tool, permitting AIs to obtain an image of the current view. This is primarily intended for map view, but can also be used with Outline, Chart, Gaudí and Hyperbolic views.<\/p>",
      "date_published": "2025-08-12T20:20:00+00:00",
      "date_modified": "2026-02-27T14:25:47+00:00"
    },
    {
      "id": "1772216464",
      "url": "https://atbref.com/atbref11/index/Use_of_AI/MCP_for_AI/Claude_Integration/Claude_Code.html",
      "title": "Claude Code",
      "content_html": "<p>From v11.6.0, Claude Code (accessed via the command line) can use Tinderbox MCP. Claude Code embedded in the desktop app cannot (yet).<\/p>\n<p>Claude Code is built into the Claude Desktop app but not revealed in the top button bar unless the user has a paid subscription. Using the free tier, the buttons are hidden<\/p>\n<p>Claude Code in the desktop app is able to install Claude Code for the command line.<\/p>",
      "date_published": "2026-02-27T13:14:47+00:00",
      "date_modified": "2026-02-27T13:44:29+00:00"
    },
    {
      "id": "1772216549",
      "url": "https://atbref.com/atbref11/index/Keyboard_Shortcuts/Reverse_Look-up_Map.html",
      "title": "Reverse Look-up Map",
      "content_html": "<p>This page lists all Tinderbox keyboard shortcuts ordered by the action key used with all variants (Cmd, Opt, etc.) grouped together.<\/p>\n<p>Abbreviations used:<\/p>\n<ul><li> Cmd: Command (⌘)<\/li>\n<li> Opt: Option (Alt) (⌥)<\/li>\n<li> Ctrl: Control (⌃)<\/li>\n<li> Esc: Escape  (⎋)<\/li>\n<li> Fn: Function (fn)<\/li>\n<li> Globe (🌐)<\/li><\/ul>\n\n<p><b>Shortcuts - Reverse Listing:<\/b><\/p>\n<p>----<\/p>\n<p>A+[Cmd]: Select All<\/p>\n<!-- A+[Ctrl]: Scroll to top of window (Home) -->\n<p>A+[Cmd]+[Shift]: Create Agent<\/p>\n<p>A+[Cmd]+[Opt]: Attribute Browser view (change current tab\\'s view pane view type)<\/p>\n<p>A+[Cmd]+[Opt]+[Ctrl]: Deselect All. View and text panes (hold down all 3 modifiers to see in Edit menu)<\/p>\n<p>----<\/p>\n<p>B+[Cmd]: Bold<\/p>\n<p>B+[Cmd]+[Opt]: Crosstabs view (change current tab\\'s view pane view type)<\/p>\n<p>B+[Cmd]+[Shift]: (focus in $Text) Look up selected $Text in Bookends (from v11.5.0)<\/p>\n<p>----<\/p>\n<p>C+[Cmd]: Copy<\/p>\n<!--C+[Ctrl]: Enter Edit-in-Place (view pane\\'s selected note)-->\n<p>C+[Cmd]+[Opt]: Copy Style<\/p>\n<p>C+[Cmd]+[Shift]: Copy View As Image<\/p>\n<p>C+[Ctrl]+[Globe]: Centre (window in screen)<\/p>\n\n<p>---<\/p>\n<p>D+[Cmd]: Duplicate<\/p>\n<!--D+[Ctrl]: Scroll to bottom of window (End)-->\n<p>D+[Cmd]+Shift]: Dance (map view only)<\/p>\n<p>D+[Cmd]+[Ctrl]+Selection: show Dictionary pop-up (selected $Text)<\/p>\n<p>----<\/p>\n<p>E+[Cmd]: Use current selection for Find<\/p>\n<p>E+[Cmd]+[Opt]: Cycle Text pane sub-tab selection (Text→Preview→Export→etc.) even if tab selectors are hidden<\/p>\n<p>E+[Cmd]+[Shift]: Explode<\/p>\n\n<p>----<\/p>\n<p>F+[Cmd]: Find<\/p>\n<p>F+[Globe]: Enter Full Screen mode<\/p>\n<p>F+[Cmd]+[Opt]: Find and Replace<\/p>\n<p>F+[Cmd]+[Ctrl]: Enter\/Leave Full Screen mode (toggle)<\/p>\n<p>F+[Cmd]+[Opt]+[Shift]: View pane, toggle Filter bar (Outline)<\/p>\n<p>F+[Ctrl]+[Globe]: Fill (window in screen)<\/p>\n<p>----<\/p>\n<p>G+[Cmd]: Find Next<\/p>\n<p>G+[Cmd]+[Shift]: Find Previous<\/p>\n<p>----<\/p>\n<p>H+[Cmd]: Hide Tinderbox<\/p>\n<p>H+[Cmd]+[Opt]: Hide Others (all other open apps)<\/p>\n<p>----<\/p>\n<p>I+[Cmd]: Italic<\/p>\n<!--I+[Ctrl]: Cycle Tab selection-->\n<p>I+[Cmd]+[Opt]: Get Info<\/p>\n<!--I+[Ctrl]+[Shift]: Cycle Tab selection (reverse)-->\n<p>----<\/p>\n<p>J+[Cmd]: Jump to Selection<\/p>\n<p>----<\/p>\n<p>K+[Cmd]+[Shift]: Show\/Hide Displayed Attributes (selected item in view pane)<\/p>\n<p>----<\/p>\n<p>L+[Cmd]: Make Alias<\/p>\n<p>L+[Cmd]+[Opt]: Browse Links<\/p>\n<p>L+[Cmd]+[Shift]: Park Link (from current $Text selection)<\/p>\n<p>L+[Cmd]+[Ctrl]: Link to Selection (untyped link from current $Text selection to note with case-sensitive $Name match)<\/p>\n<p>L+[Cmd]+[Opt]+[Ctrl]: Make Web Link ($Text selection only)<\/p>\n<p>----<\/p>\n<p>M+[Cmd]:Minimize<\/p>\n<p>M +[Cmd]+[Opt]: Map view (change current tab\\'s view pane view type) <\/p>\n<p>----<\/p>\n<p>N+[Cmd]: New (TBX Document)<\/p>\n<p>N+[Cmd]+[Shift]: New Window (for current document)<\/p>\n<p>----<\/p>\n<p>O+[Cmd]: Open (TBX Document)<\/p>\n<p>O+[Cmd]+[Opt]: Outline view (change current tab\\'s view pane view type)<\/p>\n<p>----<\/p>\n<p>P+[Cmd]: Print<\/p>\n<p>P+[Cmd]+[Shift]: Page Setup<\/p>\n<p>P +[Cmd]+[Opt]+[Ctrl]: Insert Regex Pattern. <b>NOTE<\/b>: Text pane, <i>only if find toolbar displayed<\/i>.<\/p>\n<p>----<\/p>\n<p>Q+[Cmd]: Quit Tinderbox<\/p>\n<p>Q+[Cmd]+[Opt]: Quit and Keep windows (hold Opt key to see in menu)<\/p>\n<p>----<\/p>\n<p>R+[Cmd]: Show Original<\/p>\n<p>R+[Cmd]+[Shift]: Show Original in New Tab<\/p>\n<p>R+[Cmd]+[Opt]: Chart view (change current tab\\'s view pane view type)<\/p>\n<p>R+[Cmd]+[Ctrl]: Show Ruler (if focus in text pane)<\/p>\n<p>R+[Ctrl]+[Globe]: Move & resize: return to previous size<\/p>\n<p>R+[Cmd]+[Opt]+[Shift]: Roadmap<\/p>\n<p>----<\/p>\n<p>S+[Cmd]: Save<\/p>\n<p>S+[Cmd]+[Shift]: Duplicate (File menu)<\/p>\n<p>S+[Cmd]+[Opt]+[Shift]: Save As (File menu - hold Opt key to see in menu)<\/p>\n<p>----<\/p>\n<p>T+[Cmd]: Show\/Hide Fonts<\/p>\n<p>T+[Cmd]+[Opt]: Show\/Hide Toolbar (for current window)<\/p>\n<p>T+[Cmd]+[Shift]: Standard Size (set selection to default $TextFontSize)<\/p>\n<p>T+[Cmd]+[Ctrl]: Table view (change current tab\\'s view pane view type)<\/p>\n<p>T+[Cmd]+[Opt]+[Ctrl]: Standard Font (set selection to default $TextFont)<\/p>\n<p>----<\/p>\n<p>U+[Cmd]: Underline<\/p>\n<p>U+[Cmd]+[Opt]: Gaudi view (change current tab\\'s view pane view type)<\/p>\n<p>U+[Cmd]+[Shift]: Open Command Bar (use Esc to close)<\/p>\n<p>----<\/p>\n<p>V+[Cmd]: Paste<\/p>\n<p>V+[Cmd]+[Opt]: Paste Style<\/p>\n<p>V+[Cmd]+[Opt]+[Shift]: Paste and Match Style<\/p>\n<p>----<\/p>\n<p>W+[Cmd]: Close Window<\/p>\n<p>W+[Cmd]+[Opt]: Hyperbolic view<\/p>\n<p>W+[Cmd]+[Shift]: Close current TBX file (hold Shift key to see in menu)<\/p>\n<p>----<\/p>\n<p>X+[Cmd]: Cut<\/p>\n<p>X+[Cmd]+[Opt]: Text Window (open current note text pane as tear-off stand-alone window)<\/p>\n<p>----<\/p>\n<p>Y+[Cmd]: (focus in $Text) Look up selected $Text in Zotero (from v11.5.0)<\/p>\n<p>Y+[Cmd]+[Opt]: Information city view (change current tab\\'s view pane view type)<\/p>\n<p>----<\/p>\n<p>Z+[Cmd]: Undo (last event)<\/p>\n<p>Z+[Cmd]+[Shift]: Redo (last event)<\/p>\n<p>----<\/p>\n<p>1+[Cmd]: Show\/Hide Inspector<\/p>\n<p>1+[Cmd]+[Ctrl]: $Text pane - Set selected text Red<\/p>\n<p>----<\/p>\n<p>2+[Cmd]: Show\/Hide Quickstamp (Document Inspector, Quickstamp tab - focus goes to search box)<\/p>\n<p>2+[Cmd]+[Ctrl]: $Text pane - Set selected text Green<\/p>\n<p>----<\/p>\n<p>3+[Cmd]: Show\/Hide Prototypes (Document Inspector, Prototype tab)<\/p>\n<p>3+[Cmd]+[Ctrl]: $Text pane - Set selected text Blue<\/p>\n<p>----<\/p>\n<p>4+[Cmd]: Text Only (hide view pane). Focus switches to text pane.<\/p>\n<p>4+[Cmd]+[Ctrl]: $Text pane - Set selected text Gray\/Grey<\/p>\n<p>----<\/p>\n<p>5+[Cmd]: View and Text (show both view and text panes)<\/p>\n<p>5+[Cmd]+[Ctrl]: $Text pane - Set selected text Black (or $TextFont if not black)<\/p>\n<p>----<\/p>\n<p>6+[Cmd]: View Only (hide text pane). Focus switches to view pane if it was in the text pane<\/p>\n<p>----<\/p>\n<p>7<\/p>\n<p>----<\/p>\n<p>8+[Cmd]: Document Settings<\/p>\n<p>----<\/p>\n<p>9+[Cmd]+[Ctrl]: View ▸ Expand All<\/p>\n<p>----<\/p>\n<p>0+[Cmd]: Standard Scale<\/p>\n<p>0+[Cmd]+[Ctrl]: View ▸ Collapse All<\/p>\n<p>----<\/p>\n<p>\\<\/p>\n<p>----<\/p>\n<p>\/+[Cmd]: Insert Short Date (in Note text)<\/p>\n<p>\/+[Cmd]+[Opt]: Insert Short Date and Time (in Note text)<\/p>\n<p>\/+[Cmd]+[Shift]: Open Help Menu (= [Cmd]+[?]) - view pane only<\/p>\n<p>----<\/p>\n<p>:+[Cmd]: Show Spelling and Grammar<\/p>\n<p>----<\/p>\n<p>;+[Cmd]: Check Document Now (for spelling)<\/p>\n<p>----<\/p>\n<p>,+[Cmd]: Tinderbox Preferences<\/p>\n<p>----<\/p>\n<p>`+[Cmd]: Send Behind (Cycle Open Windows)<\/p>\n<p>`+[Cmd]+[Shift]: Send Behind, reverse order (Cycle Open Windows)<\/p>\n<p>----<\/p>\n<p>\\' (single quote)<\/p>\n<p>\\'+[Cmd]: Go Back. Navigate back along last traversed link.<\/p>\n<p>----<\/p>\n<p>- (use hyphen\/minus key or number pad minus key)<\/p>\n<p>-+[Cmd]: Shrink<\/p>\n<p>-+[Cmd]+[Shift]: Strikethrough<\/p>\n<p>----<\/p>\n<p>.+[Cmd]: Cancel Export (during HTML or text export)<\/p>\n<p>----<\/p>\n<p>?+[Cmd]: Open Help menu (= [Cmd]+[Shift]+[\/])<\/p>\n<p>----<\/p>\n<p>=+[Cmd]: Magnify<\/p>\n<p>=+[Cmd]+[Ctrl]: Update Now (Agents). Also updates all edicts, once.<\/p>\n<p>----<\/p>\n<p>[+[Cmd]+[Opt]: Previous Tab<\/p>\n<p>----<\/p>\n<p>]+[Cmd]+[Opt]: Next Tab<\/p>\n<p>----<\/p>\n<p>{+[Cmd]: Align Left<\/p>\n<p>----<\/p>\n<p>}+[Cmd]: Align Right<\/p>\n<p>----<\/p>\n<p>|+[Cmd]: Align Center<\/p>\n<p>----<\/p>\n<p>Spacebar - View pane: Set cursor focus in text pane<\/p>\n<p>Spacebar+[Cmd]+[Ctrl]: Show the system Special Characters dialog (\\'Emoji & symbols\\')<\/p>\n<p>Spacebar - Displayed Attributes table or Get Info\/attributes: Toggle state of boolean attribute<\/p>\n<p>----<\/p>\n<p>Left Arrow: Select Previous Sibling Note - Outline Order (Map)<\/p>\n<p>Left Arrow: Select Parent (Chart). <\/p>\n<p>Left Arrow: Collapses the selected note if expanded. Otherwise, it selects the parent of the selected note if the parent is visible in the view (Outline).<\/p>\n<p>Left Arrow+[Cmd]: Move cursor to start of line (in $Text pane)<\/p>\n<p>Left Arrow+[Cmd]+[Shift]: Extend selection to start of line (in $Text pane)<\/p>\n<p>Left Arrow+[Opt]: Move cursor to start of current word, then start of previous word (in $Text pane)<\/p>\n<p>Left Arrow+[Fn]: Outline view, go to Home (top)<\/p>\n<p>----<\/p>\n<p>Right Arrow: Select Next Sibling Note - Outline Order (Map)<\/p>\n<p>Right Arrow: Select First Child (Outline & Chart) - or collapse container if no child; expands the selected container note<\/p>\n<p>Right Arrow+[Cmd]: Move cursor to end of line (in $Text pane)<\/p>\n<p>Right Arrow+[Cmd]+[Shift]: Extend selection to end of line (in $Text pane)<\/p>\n<p>Right Arrow+[Cmd]+[Ctrl]: Expand Horizontally<\/p>\n<p>Right Arrow+[Opt]: Move cursor to end of current word, then end of next word (in $Text pane)<\/p>\n<p>Right Arrow+[Fn]: Outline view, go to End (bottom)<\/p>\n<p>----<\/p>\n<p>Up Arrow: Expand View (Map)<\/p>\n<p>Up Arrow: Select Previous (Visible) Note (Outline & Chart)<\/p>\n<p>Up Arrow: Select First (Visible) Note (Outline, if no note selected)<\/p>\n<p>Up Arrow+[Cmd]: Move Note Up (Chart\/Outline)<\/p>\n<p>Up Arrow+[Cmd]: Expand View (Map)<\/p>\n<p>Up Arrow+[Cmd]+[selection]: Expand View (other view types)<\/p>\n<p>Up Arrow+[Ctrl]: Scroll Page Up<\/p>\n<p>Up Arrow+[Shift]: Extend Outline view selection upwards by one note<\/p>\n<p>Up Arrow+[Cmd]+[Opt]: Text pane focus: select previous $OutlineOrder item in view pane (Outline\/Chart\/Treemap view—possibly some other views)<\/p>\n<p>Up Arrow+[Cmd]+[Opt]: Expand view (Map view)<\/p>\n<p>Up Arrow+[Cmd]+[Shift]: Move To Front<\/p>\n<p>Up Arrow+[Cmd]: Move cursor to start of $Text (in $Text pane)<\/p>\n<p>Up Arrow+[Cmd]+[Shift]: Extend selection to start of $Text (in $Text pane)<\/p>\n<p>Up Arrow+[Opt]: Move cursor to beginning of current paragraph, then beginning of previous paragraph (in $Text pane)<\/p>\n<p>Up Arrow+[Fn]: Outline view, scroll one page (screen) up<\/p>\n<p>----<\/p>\n<p>Down Arrow: Drill Down (Map -<i> with a note icon selected<\/i>)<\/p>\n<p>Down Arrow: Select Next (Visible) Note (Outline & Chart)<\/p>\n<p>Down Arrow: Select First (Visible) Note (Outline, if no note selected)<\/p>\n<p>Down Arrow+[Cmd]: Move Note Down (Chart\/Outline)<\/p>\n<p>Down Arrow+[Cmd]: Map view + selection: Drill Down<\/p>\n<p>Down Arrow+[Ctrl]: Scroll Page Down<\/p>\n<p>Down Arrow+[Shift]: Extend Outline view selection downwards by one note<\/p>\n<p>Down Arrow+[Cmd]+[Opt]: Text pane focus: select next $OutlineOrder item in view pane  (Outline\/Chart\/Treemap view—possibly some other views)<\/p>\n<p>Down Arrow+[Cmd]+[Opt]: Drill Down (Map)<\/p>\n<p>Down Arrow+[Cmd]+[Ctrl]: Expand Vertically<\/p>\n<p>Down Arrow+[Cmd]+[Shift]: Send To Back<\/p>\n<p>Down Arrow+[Cmd]: Move cursor to end of $Text (in $Text pane)<\/p>\n<p>Down Arrow+[Cmd]+[Shift]: Extend selection to end of $Text (in $Text pane)<\/p>\n<p>Down Arrow+[Opt]: Move cursor to end of current paragraph, then end of next paragraph (in $Text pane)<\/p>\n<p>Down Arrow+[Fn]: Outline view, scroll one page (screen) down<\/p>\n<p>----<\/p>\n<p>Delete Back: Backspace key<\/p>\n<p>Delete Back - Outline: Delete current item and select <i>next<\/i> item<\/p>\n<p>Delete Back+[Cmd]: $Text area - Delete to beginning of line (from cursor)<\/p>\n<p>Delete Back+[Opt]: $Text area - Delete to beginning of word (from cursor) or delete previous word<\/p>\n<p>----<\/p>\n<p>Delete Forward: if no key, use Delete key ( extended keyboard) or [Fn]+Backspace on laptop or wireless keyboards<\/p>\n<p>Delete Forward - Outline: Delete current item and select <i>next<\/i> item<\/p>\n<p>Delete Forward+[Cmd]: $Text area - Delete to end of line (from cursor)<\/p>\n<p>Delete Forward+[Opt]: $Text area - Delete to end of word (from cursor) or delete next word<\/p>\n<p>----<\/p>\n<p>Return: Create Note (as next sibling)<\/p>\n<p>Return: Edit-in-place mode: Exit mode<\/p>\n<p>Return: Map view: create new note to right of current selection<\/p>\n<p>Return: Roadmap: follow and set focus on selected link<\/p>\n<p>Return+[Cmd]: Navigate (forwards). Follow the first listed link in Browse Links<\/p>\n<p>Return+[Shift]: Create child note as last sibling<\/p>\n<p>Return+[Shift]: Edit-in-place mode: exit and create a new note<\/p>\n<p>Return+[Opt]+[Ctrl]: Create new note below selected note (Map view)<\/p>\n<p>Return+[Ctrl]: Create new note to left of selected note (Map view)<\/p>\n<p>Return+[Ctrl]: Create note as previous sibling (Outline, Chart view)<\/p>\n<p>Return+[Cmd]+[Shift]: Rename selected note (enter edit mode)<\/p>\n<p>Return+[Opt]+[Shift]: Create child note as first sibling<\/p>\n<p>Return+[Cmd]+[Opt]+[Ctrl]: Split the current note at the insertion cursor position (focus in $Text area of text pane)<\/p>\n<p>Return+[Fn]: Rename selected note (enter edit mode)<\/p>\n<p>----<\/p>\n<p>Double-click: Create Note (in Outline\/Map\/Chart when no note selected)<\/p>\n<p>Double-click: Edit note\\'s title (in Outline\/Map\/Chart when a note selected. Also, note a different result if an Outline <i>icon<\/i> is double-clicked as the view is hoisted)<\/p>\n<p>Double-click+[Outline Note icon]: Focus view (\\'Hoist\\' in older versions)<\/p>\n<p>Double-click+Roadmap (clicking in in\/outbound link lists): shift view focus to destination note<\/p>\n<p>Double-click+[selected Map container icon]: Drill down (double click must be in <i>viewport<\/i> area of icon)<\/p>\n<p>----<\/p>\n<p>Tab - Outline: Demote current selection<\/p>\n<p>Tab: Roadmap: cycles from first inbound link → first outbound link → link type → etc.<\/p>\n<p>Tab+[Opt]: Toggle focus: $Text → first Displayed Attribute → View pane → $Text<\/p>\n<p>Tab+[Shift]: Outline - Promote current selection<\/p>\n<p>Tab+[Ctrl]: Select next document tab<\/p>\n<p>Tab+[Ctrl]+[Shift]: Select previous document tab<\/p>\n<p>----<\/p>\n<p>Enter: Rename selected note (enter edit mode)<\/p>\n<p>Enter: Enter\/Leave Edit-in-place mode (selected note in view pane)<\/p>\n<p>----<\/p>\n<p>Esc: Stop creating a link (when link drag is active)<\/p>\n<p>Esc: Clear typeahead buffer (major\/minor views using typeahead)<\/p>\n<p>Esc: Edit-in-place mode: exit edit mode, ignore current edits<\/p>\n<p>Esc: Exit Full Screen mode<\/p>\n\n<p>Esc+[Opt]: invoke OS text autocomplete (view and text pane)<\/p>\n<p>----<\/p>\n<p>Home: Scroll $Text to start of note $Text without moving insertion point (in $Text pane)<\/p>\n<p>----<\/p>\n<p>End: Scroll $Text to end of note $Text without moving insertion point (in $Text pane)<\/p>\n<p>----<\/p>\n<p>Page Up: Scroll $Text up one page, by $Text pane size, without moving insertion point (in $Text pane)<\/p>\n<p>----<\/p>\n<p>Page Down: Scroll $Text up down page, by $Text pane size, without moving insertion point (in $Text pane)<\/p>\n<p>----<\/p>\n<p>[Cmd]: Force toggle Select tool<\/p>\n<p>[Cmd]+drag-select: Select text in read-only notes.<\/p>\n<p>[Cmd]+drag window edge: resize document window retaining text pane width.<\/p>\n<p>[Cmd]+[Opt]: Underline links (Note $Text area only)<\/p>\n<p>[Cmd]+[Shift]+drag: add to container as last ($OutlineOrder) sibling(s); default is to be added as first sibling<\/p>\n<p>[Cmd]+[Opt]+[click]: (in link anchor text) follow link, i.e. open destination note<\/p>\n<p>[Cmd]+[Opt]+[Ctrl]: Toggle zoomed-out <a href=\\\"\\\">overview mode<\/a> (map view only)<\/p>\n<p>----<\/p>\n<p>[Option]: Toggle Select Area tool<\/p>\n<p>[Option]+[click]: Text pane, click inside $Text link anchor without following link<\/p>\n<p>[Option]+[drag or click]: View pane, duplicate clicked note (Map, Outline, possibly other views)<\/p>\n<p>[Option]+[Shift]+[drag or click]: View pane, make alias of clicked note (Map, Outline, possibly other views)<\/p>\n\n<p>----<\/p>\n<p>[Ctrl]+[click]: Open content menu (OS feature)<\/p>\n<p>----<\/p>\n<p>Outline disclosure triangle+[click]+[Cmd]: Show\/hide children of this and all sibling containers <i>after<\/i> this in $OutlineOrder (toggle)<\/p>\n<p>Outline disclosure triangle+[click]+[Cmd]+[Opt]: Expand\/Collapse All Containers (toggle)<\/p>\n<p>Outline disclosure triangle+[click]+[Opt]: Expand All Descendants (toggle)<\/p>\n<p>----<\/p>\n<p>View selection+[click]+[Cmd]: Add\/remove item<\/p>\n<p>View selection+[click]+[Shift]: Expand selection<\/p>\n<p>----<\/p>\n<p>Mouse wheel - Vertical Map Scroll<\/p>\n<p>Mouse wheel+[Shift]: Horizontal Map scroll<\/p>\n<p>Mouse wheel+[Ctrl]: zoom screen (OS feature: System Prefs ▸ Accessibility)<\/p>\n<p>----<\/p>\n<p>[Outline icon]+[Double-click]: Focus view (\\'Hoist\\' in older versions)<\/p>\n<p>----<\/p>\n<p>Trackpad+[drag]: scroll view<\/p>\n<p>----<\/p>\n<p>[drag]+[Shift]: Timeline view maintain date (horizontal position) dragging between time-bands (Shift must be pressed <i>before<\/i> commencing drag)<\/p>\n<p>[drag]+[Shift]: Map view - constrain to horizontal\/vertical movement ignoring guides (Shift must be pressed <i>before<\/i> commencing drag)<\/p>\n<p>[drag]+[Option]: Map view - resize around current object centre ignoring guides (Option must be pressed <i>before<\/i> commencing drag) (from v11.5.1)<\/p>\n<p>[drag]+[Option]+[Shift]: Map view - constrain to horizontal\/vertical movement whilst resizing around current object centre (Option and Shift must both be pressed <i>before<\/i> commencing drag) (from v11.5.1)<\/p>\n<p>----<\/p>\n<p>[fn]: Show\/hide OS Emoji & Symbols palette<\/p>\n<p>----<\/p>\n<p>[f5]: Start Dictation (tap key twice for OS Dictation function)<\/p>\n<p>[f5]: View pane find bar: show suggested autocompletions<\/p>\n<p>----<\/p>\n<p>[Globe]: Show\/hide OS Emoji & Symbols palette<\/p>\n<p>[Globe]+[Ctrl]+← : Move & resize: left<\/p>\n<p>[Globe]+[Ctrl]+→ : Move & resize: right<\/p>\n<p>[Globe]+[Ctrl]+↑ : Move & resize: top<\/p>\n<p>[Globe]+[Ctrl]+↓ : Move & resize: bottom<\/p>\n<p>[Globe]+[Ctrl]+[Shift]+← : Move & resize: arrange left & right<\/p>\n<p>[Globe]+[Ctrl]+[Shift]+→ : Move & resize: arrange right & left<\/p>\n<p>[Globe]+[Ctrl]+[Shift]+↑ : Move & resize: arrange top & bottom<\/p>\n<p>[Globe]+[Ctrl]+[Shift]+↓ : Move & resize: arrange bottom & top<\/p>\n<p>----<\/p>\n<p>[microphone symbol]: (also F5) Start Dictation (tap key twice for OS Dictation function)<\/p>",
      "date_published": "2006-05-12T05:27:29+00:00",
      "date_modified": "2026-02-27T14:32:27+00:00"
    },
    {
      "id": "1772214455",
      "url": "https://atbref.com/atbref11/index/Change_Log/v11_6_0b779_26_Feb_2026.html",
      "title": "v11.6.0b779 (26 Feb 2026)",
      "content_html": "<p>Released 26 Feb 2026. Build number is 779.<\/p>\n<p>Minor changes not necessarily warranting explicit mention in an aTbRef note:<\/p>\n<ul><li> <b>Action Code<\/b>:\n<ul><li> The <a href=\\\"\\\"><b>List.size()<\/b><\/a> operator failed to count empty elements in lists.<\/li>\n<li> Lists (List, Set and Dictionary) now allow blank (empty) list items when using the new <code>[ ] <\/code>list notation. As a result, a trailing semi-colon will imply the intent of a last list item that is empty.<\/li><\/ul><\/li>\n<li> <b>Inspector<\/b>:\n<ul><li> The Inspector should more reliably reflect the current document.<\/li>\n<li> The layout of the appearance inspector has been modified. If this layout is palatable, it may be used elsewhere.<\/li>\n<li> Rewrote the mechanism through which Tinderbox lets you choose colours.<\/li><\/ul><\/li>\n<li> <b>Map view<\/b>:\n<ul><li> Zoom-out (⌘-⌥-^) and zoom-back were miscalculating their scale factors and needed to force a new layout in order to get the new portRect. Both zoom-out and zoom-back have a new animation.<\/li>\n<li> The tendency of Map View to shift when changing performing zoom-in\/zoom-out cycles should now be ameliorated. Errors in link placement after changing the view focus should also be reduced.<\/li>\n<li> Map view scaling has been rewritten with better animation.<\/li><\/ul><\/li>\n<li> <b>Miscellaneous<\/b>:\n<ul><li> Fixed a crash in complex hyperbolic views when dragging the view during animation.<\/li>\n<li> Fixed a loading crash arising because RTF parsing is not thread safe.<\/li>\n<li> Addressed a rare hang when resetting the map layout while changing a note’s title or subtitle.<\/li>\n<li> Extensive revisions to internal map view infrastructure to clarify coordinate systems.<\/li>\n<li> Map view scaling has been rewritten with better animation.<\/li>\n<li> Fixed a shutdown crash when a document is closed while a watch process is in progress.<\/li>\n<li> View splitter: A cause for the view pane splitter to sometimes \\\"snap back\\\" after the user has moved it has been identified and rectified. Several small glitches in pane splitter management have been corrected.<\/li>\n<li> Added many recent operators to the command-bar’s repertoire.<\/li>\n<li> Revised management of the Recent Documents List. It should now be more robust when changing Tinderbox versions.<\/li>\n<li> Fixed a crash in the Plot Inspector that could occur when switching between documents.<\/li>\n<li> Fix a TbxWindowController crash in b778.<\/li>\n<li> Several popovers could be awkward to dismiss, requiring clicking in the text pane or in the view pane. This has been corrected. Some popovers affected include Get Info, Link View, Key Attribute Picker, Explode, Map Background, Parking Space, and Summary Table.<\/li>\n<li> When switching views, the selected note is now scrolled into view.<\/li>\n<li> When using the breadcrumb bar to set focus, the target note is now scrolled into view. <\/li><\/ul><\/li><\/ul>\n<p>This version is cited in the following notes:<\/p>\n<ul><li><a href=\\\"\\\">AgentCaseSensitive<\/a><\/li>\n<li><a href=\\\"\\\">AI Additions to the Hints container<\/a><\/li>\n<li><a href=\\\"\\\">Claude Code<\/a><\/li>\n<li><a href=\\\"\\\">Dictionary-Type Attributes<\/a><\/li>\n<li><a href=\\\"\\\">Displayed Attributes value autocompletion<\/a><\/li>\n<li><a href=\\\"\\\">Edit menu<\/a><\/li>\n<li><a href=\\\"\\\">Find toolbar (view pane)<\/a><\/li>\n<li><a href=\\\"\\\">Inspector<\/a><\/li>\n<li><a href=\\\"\\\">List-Type Attributes<\/a><\/li>\n<li><a href=\\\"\\\">Map overview mode<\/a><\/li>\n<li><a href=\\\"\\\">Markdown preview rendering<\/a><\/li>\n<li><a href=\\\"\\\">modifierKeys<\/a><\/li>\n<li><a href=\\\"\\\">Mouse actions<\/a><\/li>\n<li><a href=\\\"\\\">OnMouseDown<\/a><\/li>\n<li><a href=\\\"\\\">OnMouseDrag<\/a><\/li>\n<li><a href=\\\"\\\">OnMouseUp<\/a><\/li>\n<li><a href=\\\"\\\">Set-Type Attributes<\/a><\/li>\n<li><a href=\\\"\\\">text tab<\/a><\/li>\n<li><a href=\\\"\\\">UI<\/a><\/li>\n<li><a href=\\\"\\\">View pane (note selected), pop-up menu<\/a><\/li>\n<li><a href=\\\"\\\">View pane Find toolbar, pop-up menu<\/a><\/li>\n<\/ul>",
      "date_published": "2026-01-21T19:48:51+00:00",
      "date_modified": "2026-02-27T15:13:59+00:00"
    },
    {
      "id": "1772214452",
      "url": "https://atbref.com/atbref11/index/Change_Log/v11_5_2b771_21_Jan_2026.html",
      "title": "v11.5.2b771 (21 Jan 2026)",
      "content_html": "<p>Released 21 Jan 2026. Build number is 771.<\/p>\n<p>Minor changes not necessarily warranting explicit mention in an aTbRef note:<\/p>\n<ul><li> <b>Miscellaneous<\/b>:\n<ul><li> Removed unwanted and spurious animation in chart view.<\/li><\/ul><\/li><\/ul>\n<p>This version is cited in the following notes:<\/p>\n<ul><li><a href=\\\"\\\">Edit menu<\/a><\/li>\n<\/ul>",
      "date_published": "2026-02-27T12:51:34+00:00",
      "date_modified": "2026-02-27T12:51:34+00:00"
    }
  ]
}