I've been using this for about a year now - I parsed 6 months of my messages on slack and found the most common phrases I use and generated keyboard shortcuts for them.
I also wrote a blog post with video about the project: <a href="https://erikschluntz.com/software/2023/08/26/compressing-my-typing.html" rel="nofollow noreferrer">https://erikschluntz.com/software/2023/08/26/compressing-my-...</a><p>This has been one of the rare side projects that has actually saved me more time than I've put in :)
This is a very clever idea.<p>However, I realize that I would never want to use something like this that would change over time. E.g. if I ran it every 6 months and last year "db" produced "debug", while this year it produces "database". Because talk about messing up my muscle memory and habits. And the language I write changes very much over time.<p>So I'd actually be much more interested in a "universal" version of this -- if you ran it across books and e-mails and text messages from thousands of authors covering diverse backgrounds and contexts, then what would most reliably help <i>everyone</i>?<p>E.g. expanding "t" to "the" seems like a no-brainer, just like "st" to "something". Is there a minimal set of, say, 200-500 of these that could simply be turned into a "standard keyboard" that everyone could learn?
Here's something you probably didn't know if you are not native Chinese speaker:<p>Chinese language has this feature "built-in".<p>It is officially called 双拼 (Shuangpin)where you type two (English) characters of each word to type out the entire word:<p><a href="https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC" rel="nofollow noreferrer">https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC</a><p>Even if you don't use Shuangpin officially, most Chinese input methods supports a similar feature (简拼) for popular phrases, where you type first English character of each word to type out a phrase of several words.<p>For example, to type "thank you" in Chinese (xiexie), you just type "xx" and it should automatically give you "xiexie" (Chinese characters) in most popular Chinese input methods.
I _love_ to see projects like this.<p>I was working on a similar problem this weekend, but with whole words instead of abbreviations I had made in a dictionary, and in the general case, fine-tuned on any given corpus of text.<p>I wanted to know: could I write an autocorrect that is "fine-tuned" on a given corpus of text? Use case: I write a lot of docs with long phrases (i.e. "data augmentation"). Could I automate them?<p>I arrived at:<p><pre><code> 1. Calculate "surprisal" of unigrams and bigrams (entropy) from a general dataset (an NYT corpus), give a boost to words in the "fine-tuned" index;
2. Create a trie data structure that is weighed by surprisals. The more surprising a word, the more weight it gets.
3. Use that as advanced autocomplete.
</code></pre>
I got a working solution here: <a href="https://github.com/capjamesg/autowrite/blob/main/autocomplete.py">https://github.com/capjamesg/autowrite/blob/main/autocomplet...</a><p>(No docs yet -- coming in the next few days. Leave a GitHub Issue if you want to chat about it!)
Idea for extending this: keylogger (yeah, that's a downside...) that'll watch what you type, learn common phrases, identify common ones, then come up with shortcuts, then each time you type the full phrase it gently reminds you of the shortcut.<p>Then anyone can install it, no friction, and over time it'll slowly start making you gently more productive.
I feel like typing is never really the bottleneck for me except maybe in some chat interactions would have benefited from the extra bandwidth of video or audio. Do you actually save time on task with these kinds of shortcuts?
I have spent a good deal of time trying to create text expansions for myself.
(manually)<p>It is a lot harder than I thought it would be.
To find aliases that dont misfire too often and provide enough value.
Give that I daily communicate in several languages that adds even more
trouble.<p>I have now split it by application.
Different aliases for different applications.
I still have misfires.
Mostly I have found I need delinators.
First, I have to make a personal confession — I never liked the SMS short-hand thingy that worked with pre-iPhone phones. That was one of the reason I seldom use SMS/Text-Messages unless I really need to.<p>I have been using text-expansion since the early days of TextExpander[1], an app that works on iOS and macOS. However good the iPhone keyboard was, it was always not convenient to type and retype details such as home address, home/work map, and many other work/personal related info. TextExpander helped a lot.<p>I started looking for an alternative when TextExpander converted to a subscription model, which I (personal) believe is not suitable for such a tool. I found a better alternative in Alfred[2], bundled with its Powerpack — Snippets.<p>macOS/iOS also has its built-in “Text Replacements” but it fails me quite often in non-Apple apps. What you have here is similar to that of Apple’s Text Replacement. I let that remain and the others are managed via Alfred. Honestly, I may move to this once I can totally walk out of Alfred (Spotlight is becoming good enough.)<p>However, I’d like to use a delimiter to expand so it does not come in the way of my normal typing (I can touch type). Currently, I use “,” (comma) as a delimiter (Affix) because, in English, there is always a space after a comma and my expansion is only after I type a comma and the short-text without a space. Also the comma key is located conveniently when you touch type.<p>If I do reconcile and stay with the OS’s Text Replacement, I might still introduce the delimiter to prevent automatic expansion of the word which wasn’t intended for that particular scenario.<p>1. <a href="https://textexpander.com" rel="nofollow noreferrer">https://textexpander.com</a><p>2. <a href="https://www.alfredapp.com" rel="nofollow noreferrer">https://www.alfredapp.com</a>
Years of autocomplete has already made my second language i.e. English poorer. I know words but I often forget to pronounce them because I can no longer remember their spelling. A tool like this would completely obliterate all of my skills.
Instead of keywords and memorizing it, why not just use the first letters? I played around with ChatGPT with this few weeks ago and I don't think there is an existing software for this, I am not good in programming but hopefully somebody will create. Please see screenshot below.<p><a href="https://imgur.com/a/0o4zLwT" rel="nofollow noreferrer">https://imgur.com/a/0o4zLwT</a>
Out of curiosity...sure you type less, but do you need to think more about which abbreviation was which word?<p>In iOS I maintain a small list of abbreviations (@@ expands to my e-mail address, lk expands to my name etc.) but if it was hundred(s) I'd probably lose more time thinking about "what was the abbreviation of 'online meeting' again" or correcting accidental abbreviations that are part of normal words, than I'd save time typing...but maybe that's just me.
Pretty cool and very useful, as long as you can remember all of the shortcuts (I guess it comes with time!)<p>It kind of reminds me of stenography in a way
Also the most surprising part of doing this was seeing that abbreviating super short words like "the" -> "t" actually saves far more characters overall than abbreviating long words and phrases that are less common, like "what do you think" -> "wdytk".
This is really cool!<p>I did something similar on Mac, but completely manually. I'm using Espanso now, but I suffix every shortcut with an ";" character which causes the expansion. Since it's home row, it's incredibly easy to actually type it right after typing some letters, making it ideal, cause then I can use whatever shortcuts I want and very rarely have collisions.<p>I do think this automated generation of suggestions is a great idea, and I it made me realize I hadn't thought enough about the amount of times I type something vs. how big the word is. Since I have an extra letter, I don't want to do this for very very short words, but possibly something I type a lot is still worth it even if it's very short. I tend to use it for semi-long words that I have a hard time typing for whatever reason.<p>Anyways, very cool, I'll probably be running this script sometime soon to get a list of suggestions, then converting them into Espanso scripts!
I use similar abbreviations in code editor, for example:<p><pre><code> r0 -> return false
rn -> return null
t -> this
puf -> public function
</code></pre>
You can easily find the opportunities for saving typing by analyzing existing code and most used words there.
EasyScript is another rule-based shorthand system for typists.<p>I created an EasyScript translator for GPT-4: <a href="https://gist.github.com/boticello/1ea9c7105e5c369ea937158411c32921" rel="nofollow noreferrer">https://gist.github.com/boticello/1ea9c7105e5c369ea937158411...</a><p>As others have commented, this is not the most efficient or practical approach, but for me it was an experiment which worked.<p><a href="http://www.easyscript.com/" rel="nofollow noreferrer">http://www.easyscript.com/</a>
<a href="https://www.openstenoproject.org/plover/" rel="nofollow noreferrer">https://www.openstenoproject.org/plover/</a><p>If you want to go the extra mile.
Cool! I thght t wld b bt at-xpndg vwls. I gs smth lk tht shld b psbl nw wth LLMs. smth wh y wldd jst rndml drp chrs t incrs spd nd it wld jst gs th rght wrd 99% f ttime bsd on ctx. Nt sr hw prctl t wld b thgh bt I thnk I cld qckl gt sdd t t.
I was thinking about similar solution (actually, textblaze funded by YC is pretty much that) but I didn't like remembering the shortcuts part. So I made a different kind of indexing for it: <a href="https://discu.space/" rel="nofollow noreferrer">https://discu.space/</a> Presentation uses 'what are you answering to' as a key, but you can use anything.<p>It currently exists as (hopefully working for everyone, could use more testing) Chrome extension, but there's a universal API underneath. It could be run entirely locally if one was to give up portability.
The down side of this is you have to remember them, for some time now I've been writing with n-gram auto-completion based on a large body of text (including code-comments for projects I work on), see <a href="https://codeberg.org/ideasman42/emacs-mono-complete" rel="nofollow noreferrer">https://codeberg.org/ideasman42/emacs-mono-complete</a><p>I have it configured to be enabled when typing in code-comments or commit logs & it often gives helpful suggestions.
I prefer an autocomplete mobile like experience for most typing. I use autohotkey to have global autocomplete for English, anywhere in any app i type it gives me options in a little tabbable box immediately. I disable it for vscode usually except when I'm typing markdown I manually enable it. I love it.<p>Beyond this I use ahk's hotstrings feature to have "snippets". I separate them by topic and activate them as and when they're required. For example I have one for css which has things like<p><pre><code> display: flex;
justify-content: center;
align-items: center;
</code></pre>
bound to a single hotstring.<p>I know I can use vscode snippets but I prefer this.<p>I also have global hotstrings for say my emails, address, etc,. Unencrypted in my home directory. I don't care too much but you might.<p>The coolest one is a password manager that lets you use your username/email on any website as the password.<p>You just press a hotkey and are prompted to enter the secure master password. Once you do that, it decrypts your passwords and activates the hotstrings required to convert usernames to their respective passwords. When you press enter and submit the form it kills it. This is only one of the variations I have. The previous one had me enter the master password in the form itself, and it'll read the context of the browser itself get the URL from there and automatically replace the correct password. I stopped using this as it became unwieldy once I had to have multiple Gmail accounts for example.
Very interesting! I used to create some abbreviations in Office which saved me a lot of typing, but usually only for very simple words that I typed very frequently. Never occurred me that I could do sit for a few more words and even phrases.<p>But I'm wondering if I would be able to learn all these shortcuts. There would be a lot of time invested, and I don't know how stable a solution this is - ie will I be able to use it everyday for the next five years?<p>I'm betting on the capabilities of LLMs right now - I think they can predict a lot of my typing and save me enough time and, if msft is smart, they will soon enough be present everywhere.
Self plug but high relevancy - measuring keystrokes-per-second to convert the characters saved into actual $TIME.<p>Calculation for "the" from the screenshot in the repo:<p>9933 characters saved / 8 kps = ~20 minutes<p><a href="https://www.inttodouble.com/explore/keystrokes-per-second" rel="nofollow noreferrer">https://www.inttodouble.com/explore/keystrokes-per-second</a>
I’ve thought about doing something like this, only using foot pedals to put it into “shorthand mode”. Having the pedal as a modifier would eliminate the need to worry about text collisions between your shorthand and normal typing.
This would be especially amazing on mobile. I was not expecting to see an improvement to typing anytime soon, but I think I might actually be more productive with this.<p>Now I'm imagining building a keyboard that has it built in, with a little OLED right on the keyboard, and when you press space it types out the closest match to what's in the buffer, and you don't have to take your eyes away from the board to see what the autocorrect is doing.
This is great. Is it possible to somehow use it with keyd, as I don't use autohotkey?<p><a href="https://github.com/rvaiya/keyd/">https://github.com/rvaiya/keyd/</a>
I love the idea of a tool digesting my own writing. Ticket systems like Zendesk should offer this built-in as boilerplate.<p>Instead, I use native iOS/macOS “text replacement” for customer service responses. It saves me so much time. I have all of my FAQ URLs as 4 letter shortcuts.<p>e.g. lltr becomes <a href="https://label.live/guides/label-printer-troubleshooting" rel="nofollow noreferrer">https://label.live/guides/label-printer-troubleshooting</a><p>llty = Thank you for the email.
lllmk = Let me know if this helps.
If you like this, you’ll also like Plover, an IME (input method) that translates chorded keystrokes to text. It can use certain gaming keyboards but people also sell custom hardware. Court reporters frequently use special-purpose chorded keyboards to quickly prepare court transcripts.<p><a href="https://www.openstenoproject.org/plover/" rel="nofollow noreferrer">https://www.openstenoproject.org/plover/</a>
This looks like a great project. Medieval manuscripts used something similar: <a href="https://en.wikipedia.org/wiki/List_of_medieval_abbreviations" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/List_of_medieval_abbreviations</a><p>You can go back even farther to ancient inscriptions. Humans have been trying to save a few characters here and there for quite a while.
This is a pretty cool project! I am concerned about how reliant this is on my memory and if the keybindings keep changing every once a while, adapting to new ones might actually be time consuming.<p>This is what I thought while I was learning Vim too, but now I honestly prefer Vim keybindings everywhere. So maybe this is not too bad. I would definitely try out if one can also build a vimtutor like version for this usecase.
> I was surprised that very short and frequent words topped this list, such as the -> t<p>Having studied some shorthand, I'm not surprised in the least! There, the most frequent words tend to get single-symbol abbreviations. Common wisdom even says that much of the benefit from shorthand writing comes from these few one-symbol abbreviations.
This would probably drive me up the wall. I like the idea of snippets, but not automatically changing st -> something, hw -> hardware, etc. I type in 2-3 different languages on a regular basis (English and Dutch mainly). There are certain idiosyncrasies in both languages that would drive me up the wall with a system like this.
It reminds me of Bref shorthand and autohotkey:
<a href="https://www.reddit.com/r/shorthand/comments/esjhdk/bref_shorthand/" rel="nofollow noreferrer">https://www.reddit.com/r/shorthand/comments/esjhdk/bref_shor...</a>
The author is clearly using this for prose (as opposed to code), and I wonder how it compares to dictation in terms of speed.<p>I've never really tried using text to speech for writing blog posts and the like, but I know David Sparks (MacSparky) swears by it; and he produces a lot more written content than I do.
Speaking personally, I feel like any time I save by reducing keystrokes would be lost by having to think about shortcuts (or making corrections). However, I Once believed the same thing about vim-mode (which I believe saves me time though I couldn’t prove it).
1000 mph into a concrete barrier scenario, but I like the enthusiasm behind it. I would imagine some words with nearly the same spelling have potentially collided with automation causing some hilarious feedback. English is a pretty annoying language.
My friend does this on dating apps, he aliased a bunch of typos in his iphone with paragraphs of progressive sounding text that many women want to hear, interlaced with lots of flirty emojis<p>branches of conversation too, one step above botting<p>works for what he’s looking for
PhraseExpress for Win/Mac does something similar but different:<p>It parses your choice of documents and send emails and suggest to auto complete frequently used phrases.<p>Advantages:<p>+ no need to memorize abbreviations<p>+ no interference with your other typing.
> If the next few words I’m going to write are obvious, why do I even need to write them?<p>Same thing chatgpt (trapped in the philosopher's Chinese room) is asking itself millions of times a day.
I aspire to reach 300 wpm at some point like Rocket has <a href="https://www.youtube.com/watch?v=no99cJBwqdk">https://www.youtube.com/watch?v=no99cJBwqdk</a>
Very interesting. I once recorded all my vim keypresses to do something similar for vim, but never actually did anything with the data. Seems like it should be easily doable with this project now.
I do something similar using BeefText. A few long words I set with no modification others or entire phrases I precede with a ` backtick. If no backtick it can quickly become unmanagable.
From the gif I originally thought this was a "AI" predictive typing assistant, which would not require a shortcut map heuristic but rather predict text based on probability.
The obvious issue would be if you - for whatever reason - wanted to actually type something that happens to also constitute a shortcut and it gets involuntarily replaced.
Is it possible to alter built-in autocorrect (e.g. in firefox) to prioritize a list of words/phrases? I feel like remembering a bunch of shortcuts is not ideal.
Is there a way to combine steno typing w/ a standard keyboard so that you can seamlessly switch?<p>In the current setup there are too many collisions.
this reminded me of speed writing [1]<p>[1] <a href="https://www.reddit.com/r/Classic_Speedwriting/wiki/list108/" rel="nofollow noreferrer">https://www.reddit.com/r/Classic_Speedwriting/wiki/list108/</a>
I tried this similar concept with ChatGPT and it somehow understands what I am trying to say. Nice to have a tool that works almost the same. Thank you!
I use a tool called "Espanso" to accomplish something similar at work. It only runs locally, so no weird data scraping issues to worry about. And it's easy to update as things changes because everything lives in a simple yml file.<p><a href="https://espanso.org/" rel="nofollow noreferrer">https://espanso.org/</a><p>It can do simple text replacement, so I have words, phrases, and sentences I use frequently compressed into a few keyboard clicks. It can also grab what is in your clipboard, so that can be incorporated into responses, which is simple but very handy.<p>A simple text replacement looks like this in the yml file:
- trigger: ":espanso"
replace: "Hi there!"<p>But it can even work with a shell, which I think is amazing! For example, I have a particular task at work where I often need to insert a random number into a text document. I can have Espano run PowerShell behind the scenes to run a simple PowerShell command, and that looks something like:<p><pre><code> - trigger: ";rand"
replace: " {{output}}"
vars:
- name: output
type: shell
params:
cmd: "Get-Random -Minimum 100000"
shell: powershell</code></pre>
This is cool but I see so many posts in HN about “hacks” that increase productivity/save time that it makes me anxious.<p>I don’t know if it’s our field or just life these days but I would really love a more relaxed approach to work (or life in general?). It feels like I’m in a race and struggling to keep up with the pack.
We have finite brain power.
The power you dedicate to thinking about what hotkey (/combination of) to press for niche tasks, is not, per say, wasted. But it definitely isn't going towards thinking about what to write, the objective.
Maybe useful for less information-dense writing.
I did this sort of thing quite a lot early in my career, but stopped quite a long time ago. The problem is that I started using multiple machines running different OSes, and not all of those machines are "mine", so I couldn't have these sorts of specializations everywhere.<p>That turned a positive into a negative when using machines that didn't have these optimizations.
On Windows, better fit is Autohotkey and its hotstrings for people wanting to use this. It's much better for that as it supports full programming language so you could use function results and similar to produce abbreviations.<p><a href="https://www.autohotkey.com/docs/v1/Hotstrings.htm" rel="nofollow noreferrer">https://www.autohotkey.com/docs/v1/Hotstrings.htm</a>
<a href="https://kapeli.com/dash" rel="nofollow noreferrer">https://kapeli.com/dash</a><p>Somewhat similar tool to Autokey for MacOS that I use as a text expander.<p>Allows for great customization - appending ; to a phrase ensures you don't accidentally expand a keystroke into a phrase/URL/etc<p>";url" expands into "whatever string you configure"
If you're going to use models, why not models all the way through?<p>In other words, rather than using them merely to identify words to abbreviate and suggested abbreviations, why not use an LLM that can take a bunch of abbreviated text and infer what you're trying to abbreviate?<p>Tht wy, u dn't hv 2 mem lsts f abbrs ahd f tm.<p>ChatGPT was able to successfully guess that last sentence in abbreviated form:<p>That way, you don't have to memorize lists of abbreviations ahead of time.