TEA for Espresso Change Log

v1.1.1Dec 20, 2009

Adds compatibility for custom zen coding abbreviations using user snippets, switches to built-in $EDITOR_SELECTION variable for snippets and other actions, and fixes numerous bugs (mostly zen coding problems).


  • New preference: “Use user snippets as zen coding abbreviations”. Turning this on will copy all of your user-defined snippets in Espresso into zen coding abbreviations, allowing you to use them as part of standard zen coding compound abbreviations. Currently overriding existing zen coding abbreviations doesn’t work too well, but otherwise this can be a handy alternative to tab completions for accessing your snippets.
  • $SELECTED_TEXT in TEA actions has been deprecated in favor of Espresso’s built-in $EDITOR_SELECTION variable. Where possible, the $EDITOR_SELECTION variable is run through Espresso’s snippet handling (allowing you to use transformations or whatever on it). $SELECTED_TEXT will continue to work for the foreseeable future, but may be removed in future. Please update your snippets and Sugar actions!

Bug fixes

  • Wrap With Abbreviation no longer totally screws up on multiple lines
  • Selection → Balance action no longer throws a “NoneType not iterable” error when reaching the top level of the document
  • Zen custom snippet cache file moved into Support folder to prevent read/write errors
  • Far better error handling for folder and cache creation
  • Switched to reading Espresso Preferences via Cocoa rather than relying on Python’s plist parser (much more reliable)
v1.1Dec 14, 2009

Though introducing few new features, TEA for Espresso 1.1 has been completely rewritten in Objective-C to provide better speed and take greater advantage of Espresso’s API. Requires Espresso 1.1

TEA for Espresso 1.1 is bundled with Espresso 1.1, so there is no need to download it. Just update your version of Espresso and you’ll get to use all of TEA’s new functionality immediately!

There is one known issue that I haven’t been able to fix yet: currently the first TEA action that you invoke will have a short delay before it is completed (you may get a very short beachball). This is thanks to the Python interpreter no longer being launched along with Espresso, and although it vastly improves Espresso’s launch time (and improves memory usage for people who aren’t using TEA actions) it means that the delay is present when you run your first action. Subsequent actions should perform at normal or better speeds, and I will hopefully come up with some way around this problem for a future version.

New Features

  • All core classes (TEAforEspresso, TEALoader, etc.) are now coded in Objective-C
  • New Preferences screen included within Espresso’s preferences; preferences now display the version of TEA for easy reference
  • New shortcuts for Select Word (command-shift-W) and Documentation For Tag (command-shift-H) to prevent conflicts with new Espresso shortcuts

Fixes and improvements

  • New generic TEAUserInput class replaces various classes that needed to load in sheets, making sheet handling for custom actions easier
  • Added workaround to fix zen coding’s html_matcher’s inability to handle text without HTML tags in it
  • Snippet indentation now relies on Espresso’s built-in auto-indentation
  • Action.xml files are now better organized
  • TEA for Espresso no longer needs to be compiled on 10.5 to run on both 10.5 and 10.6
v1.0.3Nov 30, 2009

Includes the latest improvements to zen coding (v0.5), including a new Wrap With Abbreviation command.


  • Zen Coding updated to version 0.5
  • New Wrap With Abbreviation command (control-shift-A) allows you to wrap arbitrary selections in zen coding abbreviations (see the Smashing Magazine article for details, although we’re using a different shortcut)
  • Action shortcuts should now be populated more accurately in OS 10.6
v1.0.2Oct 25, 2009

New balancing commands allow selecting text in balanced code blocks regardless of language.

New features

  • Actions → Select → Balance: attempts to find the delimited code block surrounding the cursor or selection, and selects it. In HTML and XML, zen coding’s new tag balancing algorithm is used. For other languages, the action relies on Espresso itemizers (which means how well the balancing works will depend on how well the language’s Sugar supports itemizers).
  • Actions → Select → Balance Inward: much like Balance, but tries to move inward rather than outward.

Bug fixes

  • When harvesting characters for Expand Abbreviation, TEA now properly respects the > in self-closing HTML tags (for instance, <img />)
v1.0.1Sep 22, 2009

1.0.1 fixes bugs with some actions that require a selection, and adds a shortcut for inserting tabs within a tab stop


  • Reverted actions to disable selection-context; Espresso does not re-check actions when the selection changes, so when invoked by hotkey the actions were failing with a beep
  • Temporarily removed Insert Tag alternative to Wrap Selection In Tag as it relied on selection-context
  • Added Insert Tab In Tab Stop (option-tab) to allow inserting tabs while in a tab-stopped snippet; currently visible as a menu item until Espresso supports hotkeys for hidden items
v1.0Sep 8, 2009

Version 1.0 offers numerous generic text actions for working with HTML and includes zen coding along with the capability for users to define their own custom actions without needing to create a Sugar.

Initial release

  • All my favorite HTML actions, inspired by Textmate
  • Zen coding embedded
  • Support for custom user actions, using TEA or third party sugars
  • Generic scripts to allow easy customization of actions via XML
  • Python utility functions to jumpstart Python actions
  • Ability to run shell scripts in arbitrary languages a la Textmate
Clicky Web Analytics