Textexpander Disenchantment

For completeness: LaunchBar has snippets capabilities too.

1 Like

Yes, same here. Like with anything there are Pros and Cons with Typinator but surprised it doesn’t get more airtime because it’s a solid App. In my use cases, I am findeing my need for TE or Typinator has significantly decreased as I extend Hazel usage, …

It is the future if we allow it. I pay for software I like and can afford. Typinator was my replacement when Smile uses a subscription.

1 Like

Asserting greater productivity is not at all fallacious in this instance.

First, in a practical sense, it is reasonable to say that those “40 seconds” saved are during the workday and in the workplace (notwithstanding obvious caveats and unforeseen circumstances). Therefore, the overwhelming odds are that the time someone has to react increases.

Also, if using the snippets improves accuracy (meaning, standardization, avoiding typos, etc.) then that is time saved editing that you haven’t even contemplated and would be hard to in fact measure because you can’t predict how many times, or even if, you will make an error by manually typing out whatever you’ve used TE for.

1 Like

I really think it comes down to exactly how the time is saved. I think @Wolfie is half right. The seconds saved here and there may or may not add up to meaningful productivity gains. It just depends on how that time is being saved.

For me, I use text expansion (formerly TE, now Alfred) in a number of contexts. One thing I do is often send a large number of nearly identical email messages. Without expansion, the fasted way would be to have a template file stored somewhere and copy and paste the contents. But this means locating the template, copy and pasting subject lines and message bodies, bouncing back and forth between files. Let’s say if I do that, the task might take me 30 minutes to complete.

With expansion, I don’t have to locate a template file (A one-time time-saver), and I don’t have to do any bounding between files and copying different components (saving me a small amount of time for each email). This might cut down the time it takes to about 25 minutes. The five minutes it saves me IS meaningful because instead of completing the task at 9:30, I’m done at 9:25 and I am legitimately starting my next task 5 minutes earlier.

Similarly, I use a lot of expansion while transcribing interviews. Often I use it for complicated or difficult to type words (Resource Recovery and Circular Economy Act; Recyclability; municipalities), as well as inserting boilerplate and things like “[carriage return][carriage return] Interviewer:” “[carriage return][carriage return] Respondent:” These shortcuts might allow me to run the audio I am transcribing 10% faster than if I didn’t have those shortcuts, which is roughly a 10% time saving. When we’re talking about a 10% savings on a task that might take 120 minutes, that’s not trivial. I am 10% more productive – if I were billing (at all!) on a per-transcript basis, I could do (approximately!) 10% more transcription because of the expansion, and thus, 10% more business, than without.

That said: I also use expansion to insert email signatures, components of my address, or my phone number, and a few other little things here and there for me. These save me seconds, or fractions of seconds, which accumulated over the course of the day may total some number of minutes, and certainly they are convenient! But they don’t likely add meaningfully to my productivity such that they could turn into extra dollars and cents.

So all this is to say, not all time saved through text expansion is equal, and I’d say some contributes more meaningfully to productivity/time savings than others.

4 Likes

Yeah, if you’re doing transcription it’s absolutely essential.

I hadn’t thought of it that way. Thanks. What additions can you put on. I hang in with TE frankly I find that though Peter Lewis recommends one uses TE rather than his own Keyboard Maestro, that I could manage with text expansions just on KM. I don’t have THAT many; I know some folk have hundreds and I don’t expect to reach that number ever. What should I do? Any suggestions?

I have never used TextExpander, so I don’t really know all it can do. I have some macros in Keyboard Maestro that pop up an input dialog to ask for some values and then use those values in the right place in the expanded text. They actually fill out the To:, CC:, Subject:, and body of the email and insert a link from the front-most page in Safari. So all I do is type my trigger, fill in the values, and just check to make sure the link actually works. Then I press send.

I have finally decided to transition my snippets from TE to Alfred’s snippet expansion.

It’s not so much that I am disenchanted with TE; I have been a subscriber since they went to the subscription model. It’s more that I am no longer really using the advanced capabilities of TE to any extent and so it’s just an unnecessary subscription for me, and moving to Alfred is just one less piece of software to take care of.

The majority of my TE snippets are simple text substitutions, which work well with Alfred’s snippet expansion. I don’t know how Alfred performs with large numbers of snippets, but I haven’t seen issues yet, having imported maybe 50 or so thus far.

I do have some TE snippets which utilize pop-ups for selection among several options, and I’ll be playing with Alfred’s snippet triggers in coming days to see how well I can reproduce this functionality. Hopefully this will work out well.

I also have a couple of very complex TE snippets that are based on executing python code for some very complex operations. I suspect I could port those to Alfred snippet triggers as well, but since I actually haven’t needed any of these in a while due to workflow changes, I’ll leave that on the back burner.

For anyone who is also thinking of making this transition, I will include below a python script I am using to transfer my snippets to Alfred. BEWARE that I threw this together quickly last night to automate my own transition. It has minimal if any error checking and recovery; I didn’t invest the time since I only need to use it once.

You run it from the command line in Terminal, using the command:
te2alfred Textexpanderfile prefix suffix

Textexpander file is a file exported from TE by using the function to save the contents of a group; control click on a group name to get the context menu to find this. Export each group to a separate file which you run the script on. (It works this way because of the way exporting works when you use the subscription version of TE, which is what I have).

prefix and suffix specify the prefix/suffix that Alfred should apply to each snippet in the group. If you look at Alfred’s snippets setup this should be clear. Note that TE also allows you to apply a prefix (but not suffix) to a group as well. For unclesr reasons, when you do the export from TE this information does not appear in the output file, so you need to supply this info on the command line, You can leave it blank (specify “” for each parameter to indicate an empty string) and add it in Alfred later if you want, but you DO have to put something on the command line even if blank strings. Again, quick and dirty as a run-once script for me.

The program’s output is a file with the same name as the TE group file, but the extension changes to .alfredsnippets. This is a zip file as required for import to Alfred. Double click it and Alfred will import your snippets.

Again, this is a quick script for my purposes, so I would suggest checking the group just created in Alfred to ensure your snippets are properly imported. Use at your own risk. The code is brief and you can see what it is doing easily enough.

This code also ONLY handles TE plaintext snippets (type 0). All other types are exported into individual files named with the group, snippet name, and UUID of that snippet, and the contents of the file is both an Alfred-format JSON snippet description and the XML from TE. I did this so things like my more complex TE snippets that run code could be saved and I could decide what to do with them later if I need them.

Note that TE snippets that contain substitutions, like inserting the clipboard, are handled by this program because they are just plaintext snippets. However, not everything that TE can include works in Alfred, like pop-ups and choose lists and the like, so those snippets will get imported into Alfred but won’t actually work. If you use that functionality a lot you probably want to stay with TE in the first place.

There is a variable called snippet_replacement_strings near the top of the code. This provides a listing of strings for string substitution in the snippet. There is one entry, which replaces %clipboard (the TE code for inserting the clipboard into the snippet expansion) with {clipboard}, the Alfred equivalent. You can add any other substitutions as parenthesized pairs that you might want. I don’t use a lot of stuff like dates and the like in my snippets, so I didn’t include that here; I’ll fix those snippets by hand since I only have a few of them.

Anyway, this is not intended as criticism of TE, which I have used for years and was OK with paying for on the subscription plan when it was useful for me. I just don’t need the functionality anymore and so I have decided to employ Alfred for the limited text replacement I need.

Sorry for the length of this posting. I hope someone finds it helpful!

Code:

#!/usr/bin/python

import plistlib
import sys
import os.path
import zipfile


output_location = os.path.expanduser('~/Desktop/Test')

snippet_replacement_strings = (
	('%clipboard', '{clipboard}'),
	)

plist_template = u'''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>snippetkeywordprefix</key>
	<string>{}</string>
	<key>snippetkeywordsuffix</key>
	<string>{}</string>
</dict>
</plist>
'''

snippet_template = u'''{{
  "alfredsnippet" : {{
	"snippet" : "{}",
	"uid" : "{}",
	"name" : "{}",
	"keyword" : "{}"
  }}
}}
'''


def fail(s):
	sys.stdout.write(s)
	sys.exit(1)


def replace_strings(t):
	for f, r in snippet_replacement_strings:
		t = t.replace(f, r)
	return t


def transform_snippet(s):
	name = s['abbreviation'] if s.label == '' else s.label
	filename = '{} [{}].json'.format(name, s['uuidString'])
	ts = snippet_template.format(
				replace_strings(s['plainText']),
				s['uuidString'],
				name,
				s['abbreviation']
				)
	return filename, ts


def main():

	args = sys.argv

	# Parse the arguments; any errors, just fail.
	try:
		te_file = args[1]
		prefix = args[2]
		suffix = args[3]
		output_filename = os.path.splitext(os.path.basename(te_file))[0]
	except:
		fail('usage: TE2Alfred <TEFile>.textexpander <prefix> <suffix>\n')

	# Get the plist file
	try:
		p = plistlib.readPlist(te_file)
	except:
		fail('Failed to read textexpander plist file.\n')

	# Get the snippets
	snippets = p['snippetsTE2']

	# Create the zip archive for the group
	zfile = zipfile.ZipFile(
		os.path.join(output_location, output_filename) + '.alfredsnippets', 
		'w')
	
	# Write the info.plist file to the zip archive
	zfile.writestr('info.plist', plist_template.format(prefix, suffix))

	# Write the snippets to the file
	for s in snippets:
		filename, alfred_snippet = transform_snippet(s)
		if s['snippetType'] == 0: 		# Only handle text substitutions now
			zfile.writestr(filename, alfred_snippet.encode("utf-8"))
		else:							# Just write this one to a file
			with open(os.path.join(
				output_location, '[' + output_filename + '] ' + filename), 'w') as f:
				f.write(alfred_snippet)
				f.write('\n')
				f.write(repr(s))
		

	# Close the archive to ensure proper cleanup
	zfile.close()


if __name__ == '__main__':
	main()
4 Likes

Here’s an existing alternative (Linked from https://www.alfredforum.com/topic/8883-import-textexpander-snippets-into-alfred-v3/)

http://alfred.danieldiekmeier.de/

But with a little work you can create more powerful list and script filters in Alfred that can do things that weren’t possible in TE as well as replicate existing functionality – see Does TextExpander subscription version offer any advantages? - #12 by BradG at the end

WWDD - What Would David Do?

Cost-benefit analysis is valid, even if the cost outweighs the benefit. Sure 40 seconds is trivial to most of us, but someone like MacSparky would probably see tens of minutes or more a day. For a day trader 40 seconds may be worth thousands of dollars.

For me, I have one fill-in form and a half dozen expansions and forget to use the rest so this thread has helped me consider alternatives.

3 Likes

I will take a look at that.

I agree that Alfred can provide some pretty powerful functionality with script and list filters, although TE vs Alfred is a bit of apples to oranges.

I have built a lot of very useful Alfred workflows for my own use and could easily see translate some of the TE snippets into Alfred snippet trigger workflows.

It all comes down to need. I don’t use enough of TE’s specific form of sophistication to need to continue my subscription, but others will have different needs.

All good feedback here on TextExpander. I just learned that TextExpander will no longer be supported as a native service in Day One, one of my favorite writing apps. This was announced on Day One’s most recent podcast, citing TextExpander’s lack of updates. They did say you could still use TextExpander’s keyboard which, at least to me, takes away the time savings that TE normally affords. This, and the suggestions from other MPUers, has convinced me to cancel my TE subscription and move to Alfred for snippets on the Mac and native keyboard shortcuts on iOS.

I have added my TE snippets to iOS through settings… keyboard … keyboard shortcuts, and so far everything is working well, including syncing properly between devices (when did this get fixed?). It’s actually a better experience to have my snippets available in every app, including mail, vs. the more limited apps that integrate with TE.

My next challenge is to see if I can create SIri Shortcuts for the form based TE snippets I use on the Mac …

1 Like

I still use the version of TextExpander before the subscription model and will continue to do so as long as it keeps working.

Same here, and I couldn’t agree more with what you’ve said. As software companies move to subscriptions, I stop using their software in favour of alternatives, I simply can’t afford not to.

I don’t mind paying for software. Developer time is worth money, and they should be compensated for it. But it should be my choice whether to pay them for additional work, not theirs. It takes no additional work to let a piece of software continue to run. If it takes work to update TE (or any software), charge for updates and I’ll pay for them if I want them. But if you’re selling me continued access to functional software I don’t need or want you to modify, I’m not buying.

2 Likes

Nice articles comparing Mac text expansion apps below, and they mention two apps I’d never heard of - Rocket Typist and Dash (which was designed as a code-snippets app):

1 Like

While I am not in love with subscriptions, this is a very real benefit of them. A slight twist on this is that you can get access to programs you want or need for only a short time too. For example, while I usually get by with any of PDFPen and Scanner Pro and DEVONthink for my OCR needs, these options generally either do not offer sufficient quality for some tasks, or crash under large tasks (Ahem, PDFPen, I’m looking at you, ahem). Being able to get just one month of Adobe Acrobat, which is the next OCR (using what was formerly called ClearText) out there, is a lifesaver.

Now, of course, Adobe are dingbats and don’t allow you to subscribe to just Acrobat, they force you into subscribing to a bundle, which I think is terrible, but even at that, I’d rather spend $14 for one month of killer OCR once in a blue moon than drop $200 for an application I’ll use once in a blue moon.

2 Likes

Oh sure, I’m not saying subscriptions are bad for everyone, they’re just not for me. So when I say it’s disheartening how common they are becoming for utility-type software, that’s just personally, rather than as a state-of-the-world thing. :slight_smile:

I still think the consumer can get all the benefits you mention using a trial period, but someone below mentions renting expensive software for a short time, which I can also see the benefit of. However I only do this out of absolute necessity. For software I use professionally, it’s unlikely I’d need it for a short enough time for this to be a consideration. (Speaking for me, I’m sure others find the flexibility useful.)

Point of example, I used Photoshop CS4 for probably 10 years and had no need to upgrade. At current CC subscription levels this would have cost me nearly £2400, instead of the £240 or whatever I paid for CS4 originally. When an upgrade became necessarily for compatibility (after 10 years!), I obviously switched to non-subscription Affinity Photo, which is approx as capable as CS4, and now I can rely on it.

1 Like

What I really hate is that they make it easy to sign up but a real chore to canx, teaser rates are there for a reason.

Go to My Account at Textexpander.com and click “Deactivate”.