Wells extended Morse code - agwells/dotdash-keyboard-android GitHub Wiki
In order to make it easier to use Morse code as the only input method on my phone, I have invented a number of additional Morse code groups. I have designed these with the hope that they will be easy(ish) to remember, and to not conflict with any existing standard or customary Morse code groups.
I'm releasing these code groups under the public domain. If you'd like to adopt them in your own Morse code software, feel free to do so. (Though I would appreciate a shout-out.)
Symbol | Name | Code Group | Digraph | Mnemonic |
---|---|---|---|---|
\n |
Enter | . - . - | AA | AA prosign customarily represents "end of line" |
# |
Hash | . . . . - - | HM | Hash Mark |
^ |
Caret | . - - . . - . | PO | Power Of |
~ |
Tilde | . . . - - . - | SQ | SQuiggle |
% |
Percent | . - - . . - . | PR | PeRcent |
| |
Pipe | . - - . . . | PI | PIpe |
\ |
Backslash | . - . . - | EX | Reverse of forward-slash (XE - . . - .) |
* |
Asterisk | - . - . - | KA | Similar to + (. - . - .) |
` |
Backtick | - - . . - | GA | Grave Accent (not yet supported in DotDash Keyboard) |
The code groups for matching bracket characters, follow the pattern set by the official code group for parentheses; the code group for the opening symbol is the same as the code group for the closing symbol, but short one signal.
Symbol | Name | Opening | Closing | Digraph | Mnemonic |
---|---|---|---|---|---|
( ) | Parentheses | - . - - . | - . - - . - | KK | Standard; defined by the ITU |
[ ] | Square brackets | . . - . . | . . - . . - | UU | Shaped a bit like a U |
{ } | Curly brackets | . - - . - | . - - . - - | WW | Shaped a bit like a W |
< > | Pointy brackets | - - . - - | - - . - - . | GG | Greater than |
The story
I use DotDash Keyboard as my only keyboard on my Android phone, and have been since January 2012. One of the first things I noticed was how incomplete Morse code is. At first I worked around this by adding a utility keyboard to DotDash, which provides access to many characters with no Morse equivalent. But then I got on Twitter, and I was constantly swiping to the utility keyboard to make the # symbol.
After a few months of that I thought, why not just come up with my own code group for #? I'd already basically done that for newline, using the traditional "end of line" AA prosign to represent the newline.
So, I added the HM digraph for the # character to DotDash Keyboard 1.1.6, using the mnemonic Hash Mark. I based this on the pattern set by the ITU's adoption of the AC digraph for the @ character in 2004, which was adopted with the idea that it was a mnemonic for "Commercial At" or the shape of the character.
Having done this, my life was much easier, but now I was still swiping a lot to make emoticons, especially the kissy face :-* and the heart <3 when exchanging cutesy text messages with my SO. Sometimes if I felt too lazy I'd just type the words "kiss" or "heart" instead. And then it hit me, why not add code groups for those too? Heck, why not add enough to replace the utility keyboard entirely? So I did, and released this in DotDash Keyboard version 1.1.7.
In retrospect, I forgot the backtick aka grave accent (`). I've provisionally assigned a code group to it, and will try to add it in the next release of DotDash.
The rationale
It makes sense that Morse code, as a code, has been slow to adopt new symbols. Morse code is a communication medium, and it relies on receivers and senders agreeing upon the same standard.
However, Morse code as a keyboard replacement is a much different beast. I transmit my Morse code to no one except my own phone, so I may as well customize it as much as I want. Indeed, I could have created a whole new two-button encoding of the Latin alphabet. The only reason I went with Morse code is because I didn't want to re-invent the wheel.
What about Morse code's standards?
ITU Morse code already defines a few of these characters, but they're done by overloading existing code groups. For instance, for % you're supposed to write 0/0 or 0/00. For square brackets, you're meant to use parentheses.
These approaches weren't really usable in DotDash Keyboard, because they require you to look at, and understand, the context of what you're writing, and change the characters based on that.
How about diacriticals? Unicode?
I've got these on my to-do list. :) Wikipedia includes a list of Morse encodings for many diacritical letters. Some of these overlap with some of my custom abbreviation code groups, so I may rework a few of them yet.
More importantly to DotDash keyboard, the Wikipedia list of diacritical letters overloads many of them. For instance, it's the same code for O with an umlaut, O with an accute accent, and O with a stroke through it. In practice, I imagine the listener determines which is which based on which language they're speaking. And indeed, I could put a language selection option into DotDash Keyboard to handle that. But I often write words in English, Spanish, and Maori, so I'm as likely to want an accute accent, a diaresis, or a macron. So I'm more inclined to again invent my own system, wherein some particular code group will represent a particular diacritical mark, and then the following code group indicates which letter to place it over (or a null code group to represent the diacritical on its own). This would be more like the behavior of many computer keyboard systems.
(If DotDash keyboard was my full-time job, I might add support for both modes. But I don't make any money off this. It's just a hobby, and a piece of software I use.)
I am inclined to do something similar to add Unicode support. A code group that represents "start unicode", followed by the number for a unicode glyph, followed by an "end unicode" code group.
Alternatives
I'm not the only person to have this idea. This stack exchange page links to a few other Morse code extensions:
- A Morse code optimized for use with a sip-and-puff accessibility input device (and many Morse accessibility links)
- TandemMaster USB Morse code device's default code set:
- The code sets supported by Gboard's Morse code setting: