Stenotypy is a system of typing where you press multiple keys at the same time, letting you send more than one letter at a time. This is a video from the 1920s. The man is holding a stenotype, a device used for stenotypy. This particular one is called Grand-Jean. It's made for the French language. In this demonstration, the man is going to be dictating a passage, first slowly, and then quickly. The lady on the left doesn't have trouble keeping up. She's using stenotypy. The lady on the right is a good typist, but she can't keep up when the dictation gets faster. I'm nowhere near as fast as this lady. She's extremely skilled. I'm not even a tenth of what she is. I don't use Grand-Jean, I use Melani, which is a system for Castilian and Italian. If I want to make the word solo, I press S, O, L, which is made by two keys, and O. Here's what that looks like. The hyphen between S and O means that the S is on the left side, and the rest of the letters are on the right side. If I want to write the word solo, which is just like the previous word, but with the first O accented, I would press the asterisk key. In Melani, the asterisk is used to put an accent on a letter. If you speak English, then you would likely use the Ireland system. S-E-T makes the word set. In Ireland, you can make a long vowel sound by pressing the two thumb keys on the other side of the vowel you want to make long. S-long-E-T makes the word seat. This is me programming. After a few lines, I'll explain what's going on. In GNU Emacs, you can create abbreviations that expand to strings. For example, you can create an abrev, like btwx, that will expand to by the way when you succeed btwx, with a space or some punctuation. Here that's what I'm doing. I type d, and then emacs, which expands to this. But this is a different kind of expansion, from a simple string like by the way. This one has structure. It has interesting points that I can jump to. It's called the skeleton. This is the skeleton. The part that I want you to focus on is the at symbols. Those are the interesting points that I jump to. So at one interesting point, I can write the name of the function. At another interesting point, the arguments, if the function will need them, the doc string, and finally the body. When I get to the body, I use stenotypy to write the words of the functions I'm looking for. Then I call a completion framework to choose from a list of candidates. This completion framework doesn't care what order the words are in or how many words I use. This completion framework is called CORFU, which stands for Completion in Region Function. And I'm using a package called ORDERLESS to make it stronger. Here, I use another skeleton, the same one as before. This time, it has an argument. Then, when I get to the body, I write another skeleton, one that has an interesting point between the quotes, and creates a new line right underneath it. I typed i, and then emax, and I got the interactive skeleton. Now, I use another skeleton, the same one as before, and I write a new line right underneath it. Then, when I get to the body, I use another skeleton, but this one's different because it prompts me for a string, and I can make the skeleton as long as I want. If I keep entering text in the prompt, then emax will keep making the skeleton bigger. When I enter an empty string, it knows to stop asking, and it sends me to the point I've designated to go to when a skeleton is created. That's what the underscore means. I type c, and then emax, and I get the conditioned skeleton. And then I use CORFU and ORDERLESS to program. On two functions, I use a debrev. A debrev is a dynamic abbreviation, and here's how it works. If I have three strings that begin with st—string, strawberry, and stop—I can write st, and then call debrev expand. First this will give me stop, because I'm nearest to the word stop. Then when I call it again, I'll get strawberry. And if I call it a third time, I'll get string. If I start off with str, then I'll get strawberry first, and then string. I use debrev twice in this function. If you read the top of the screen, you can see which commands I use, and how I invoke them. Finally, I use one last skeleton to map the function I just wrote to a hotkey. In this case, CTRL-O. Here we can see what the function I just wrote does. It opens a line with the line below indented, if it isn't blank. I've kept the old behavior with an argument of zero, and done something for when I use a negative argument. You can see the interesting points. I could jump to any of them, or cycle through them. I normally use a 9 to 16 setup. To me, Emacs, and computing in general, is much more pleasant to use that way. When I stenotype a word, a space is sent immediately afterwards. Orderless treats spaces as delimiters. This is very helpful, because I can enter commands with stenotypy, without having to worry about whether words are in the right order. Lem, spelled L-E-M, is another Emacs. It's extremely powerful. But Lem doesn't have skeletons, not yet at least. So I'm going to program the traditional way. Nothing fancy, just left-to-right programming. With Plover, you have dictionaries. I added Fibonacci to my dictionary. I made my own dictionary from scratch. But if you don't want to do that, there are free dictionaries available that have many words already in them, saving you lots of time. The reason I made my dictionary from scratch is because I wanted to know my system inside and out. On one stroke, I typed T. And on the next stroke, I stenotyped Colton. And then I got Colton top level and a new line. It's similar to what I did in GNU Emacs, when I expanded a skeleton. This is actually not stenotypy, but a different kind of steno, known as serial steno. Plover is capable of this as well. Here are some things that Plover can do. Plover can glue words, like if you need to make a compound word. It can break a compound word. You can press keys to turn off Plover, or to turn it back on. You can case words the way you want, uppercase, lowercase, capitalize. You can change your stenotype layout, like say, if you want to use Grandjean for French, Melani for Castilian, and Ireland for English. All of that's possible. Here I should note that I'm using a Plover plugin called Full Keyboard Steno. It makes my entire keyboard into a stenotype. Lem also has a completion feature built in. But I didn't need it for the code that I wrote. It's quite good. In summary, if you add in the symbols that you're going to need when you're programming, you'll be fine. Even without skeletons, Plover is nice to use for programming. The search tool is the primary way of navigating in Emacs. Every Emaxer can be measured by their skill with the search tool. Ctrl-S begins a forward search. The S stands for search. I'm reading Aesop's Fables, and I want to look for the word fox. So I press Ctrl-S and type fox. If I want to go back to the beginning of the word fox, I press Ctrl-R, which stands for reverse search. With Stenotypy, spaces are added to the end of words. So sometimes that causes problems. We can remedy that by changing the way Emacs interprets our whitespace. When I press Alt-Ctrl-S, whitespace is interpreted as a wildcard. It's a function I made myself. Fox mask will take me to the fox and the mask. The whitespace is a wildcard. For me, Ctrl-S makes the whitespace literal. I like having both options available to me. Go whitespace and wildcard whitespace. Say I want to find the cat and the fox, one of my favorite fables. I write cat, fox, but I don't get what I want. I've written a function that reverses the order of my search query. Now I get what I want. Something like this is very convenient. In LEM, we can do something similar. I want to read the fox and the lion. I search for lion, fox, notice those words are capitalized. Now I'm going to transform the last two words into a regular expression, so that the order doesn't matter. And now I can find the fable I'm looking for. I did this with a plugin called RetroStringOp, op meaning operation. I can perform any operation on the last n words. Let's look at that. The to means that I want to do something to the last two words. The operation I'm performing is Python code. To be honest, I don't know any Python, but string manipulation is easy to understand. If you do know Python, then you can make your own plugins and even help with the development of Plover. A feature I like in LEM is that when you gracefully exit search with Enter or Control-M, what you searched for is highlighted. You can cycle through the results, the highlights, and you can toggle the highlights on or off. 1978, John Culp designs a keyboard known as the Space Cadet Keyboard. This keyboard has many distinctive qualities, one being the modifiers, numbering 7 in total – Shift, Control, Meta, Super, Hyper, Greek, and Top. This keyboard influences the development of Emacs. 2000, designer Kiyoshi Kimura and programmer Yoji Hagia release Sans, a program that lets you turn your space bar into a dual-function key, sending space on tap and acting as the shift modifier on hold. This idea, the dual-function key, later revolutionizes typing. These two concepts, the space cadet modifiers and the dual-function key, can be combined. I use a program called Kanata to put all the modifiers on my home row. When I tap the letter A, I get an A. If I hold it down for longer than 200 milliseconds, it acts as the meta modifier, and really I can add as many layers to my keyboard as I want. I don't use a little steno type. Thanks to Full Keyboard Steno, the Plover plugin, I use my whole keyboard. I have an alternative keyboard layout on it, so even when I'm typing in the traditional way it feels amazing. My layout is called Curron, and I lay it over Melani, so that I have both available to me at all times. I don't get them confused, because I set them off with the way I press keys. If I press one key at a time, I'm using Curron, my keyboard layout. If I press multiple keys at the same time and let them go quickly, then I'm using steno type, in my case Melani. And if I hold one key longer than 200 milliseconds, then I'm activating it as a modifier key or a layer key. I always know what state I'm in by the way I press my keys. It's impossible for me to get confused. Using multiple modifiers is not a problem, because the keycaps used for steno type are flat and square. Pressing two or more keys at once with the same finger is easy. Notice how close they are to each other. In steno type, the home row is the border between the two rows of keys. It took me a while to get used to it, but now that I am used to it, I quite like it. So if I have to press a hotkey with all six modifiers, shift, control, meta, alt, hyper, super, it's easy. Thanks to Kanata, I have a Greek layer on my board. Additionally, I have alpha, beta, and gamma layers that send sequences of keys that I can use as hotkeys in both GNU Emacs and LEM. Maybe you noticed a few while I was programming. Now it's possible to bring the Space Cadet to any keyboard and to build on its wonderful ideas. Here I'll note that another Emaxer, Excalamus, has made a page called Plover with Emacs, with information on how to use Emacs with the standard steno type, the one that has two rows, the one I call a little steno type. While I use my full keyboard, I understand how a small board can be useful. Finger movement is greatly reduced, leading to a very ergonomic typing experience. In fact, all of the speed records are set with this steno type, the standard steno type. There are many great ideas on this page. Thank you, Excalamus. Special thanks to Richard Stallman, the creator of GNU Emacs and the Free Software Foundation, Sasaki Ryosuke, first name Ryosuke, the creator and lead developer of LEM, Mirabai Knight, the creator of the Open Steno project, which oversees the development of Plover, and J-True, the creator and lead developer of Kanata. The views expressed in this talk are solely my own. I have no connection to any of the parties mentioned herein, and therefore cannot be seen as representing them in any capacity. What I've said cannot be taken as medical advice. I used the Transight theme for GNU Emacs in this talk. It's beautiful and functional. I love how the code looks, and I can read the comments. In LEM, I used Gruber. Again, the comments are readable, and the code looks nice. When I first started using Emacs, I used the Wheatgrass theme. Another theme that I love is OS-1. It's a light, warm, modern theme for Emacs, inspired by film palettes. Regarding typography, for programming, I used Julia Mono, which was designed by Cormuljon. It's extensive, and it's beautiful. For graphics, I used PromptFont, which was made by Yukari Hafner. She's very talented. I really like her work, including this font. There are so many packages that I love in Emacs. If I talked about all of them, my talk would last for days, so I'm only going to mention three. Keycast. At the top of the screen, you can see the commands I'm executing and how I'm invoking those commands. That's Keycast. Rainbow Delimiters is another one I like. It lets me know visually when my parentheses are out of balance. Very helpful when I'm programming in Lisp. Moodline is another. The Mode line is where I can see relevant information about the file I'm working on. Moodline only gives me the information I want. I'm not really worried about too many things. The file name, the mode I'm in, and where I am in the file.