diff options
Diffstat (limited to 'src/Digraphs.adoc')
-rw-r--r-- | src/Digraphs.adoc | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/Digraphs.adoc b/src/Digraphs.adoc new file mode 100644 index 0000000..0a3d116 --- /dev/null +++ b/src/Digraphs.adoc @@ -0,0 +1,114 @@ +Digraphs +======== +:author: Aaron Ball +:email: nullspoon@iohq.net + +Wikipedia defines digraphs (and trigraphs) as + +[quote, Wikipedia, 'http://en.wikipedia.org/wiki/Digraph_%28computing%29[Digraphs and trigraphs]'] +____ +sequences of two and three characters +respectively, appearing in source code, which a programming language +specification requires an implementation of that language to treat as if they +were one other character. +____ + + +If you've spent much time in Unix, you have likely seen their character +representations on a rare occasion. Usually they begin with a ^ followed by +some key code. Note though that I said "spent much time in _Unix_ though. This +is because Linux doesn't _usually_ (with some exceptions) have problems with +digraphs. When I say Unix though, I am referring to the really old ones that +claim to be up-to-date like AIX, Solaris, and HPUX. + + +[[what-do-digraphs-have-to-do-with-old-unix]] +== What do digraphs have to do with old Unix? + +Digraphs are actually used every time you use a Unix/Linux box from the +command line. There's this realy nifty thing called *stty* that flies +under the radar most if not all of the time on newer systems. I don't +know of a single Linux distro that doesn't set stty for you. The reason +it flies under the radar so often is because it's something that's been +standardized for so long that it is all but set in stone (as far as I +know). It's also super handy to have set, and super infuriating to not +have set. + + +[[what-is-stty]] +=== What is stty? + +Well, technically STTY is an acronym for "**S**et **TTY**". That's tons of help +though. What's TTY? It turns out that +http://en.wikipedia.org/wiki/Tty_%28Unix%29[TTY] is an acronym for +**T**ele**TY**pewriter. Combining all that goodness, we have **S**et +**T**ele**TY**pewriter. + +Now, all this is great, but really, what does this have to do with anything? It +turns out that while we nearly never need to directly deal with it, we actually +use it all the time. Here's a short list of a few things we use it for in +*nix... + +* Backspace +* Scrolling with a mouse in a terminal +* Ctrl+C (sigterm) +* Ctrl+D (logout/eof) +* All arrow keys, both horizontal and vertical + +I mentioned earlier that stty is set by default on nearly all modern Linux and +Unix distributions with the exception of old Unix distributions such as AIX, +Solaris, and HPUX. I posed this question to a few AIX admins I know and all of +them told me that IBM doesn't set stty for you by default because it's more +customizable than Linux, therefore better. I have my own very charged opinion +as to why they don't set a default, but I will leave that out of this post. + + +[[what-does-stty-look-like]] +== What does stty look like? + +Where I work, management is endeavoring to make their Linux environment as much +like AIX as possible. One step in that process is to merge the .profile +configurations. Since Linux doesn't have stty set in .profile because the +system has a default, AIX using a Linux .profile doesn't support the +afforementioned list of modern keyboard keys (backspace? really? no). Imagine +how infuriating command line can get without arrow keys for cursor movement, a +backspace to correct your mistakes, and Ctrl+C to clear your line or stop your +process. The only option we have here is to re-set the Linux stty so when the +profile is sent over to an AIX system, it also has stty set on login. Here's my +attempt at porting my Arch Linux stty to aix. + +---- +stty erase ^? kill ^U intr ^C eof ^D quit ^\ start ^Q stop ^S susp ^Z rprnt ^R werase ^W lnext ^V flush ^O time 0 -parenb -parodd cs8 -hupcl -cstopb cread -clocal -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 +---- + + +[[what-does-all-that-do]] +== What does all that do? + +I really only want to cover a few things in that list because they are the most +frequently used and caused me trouble when I was trying to set this up. + +Each of those items up there starting with a +https://en.wikipedia.org/wiki/Caret#Circumflex_accent[\^ (Circumflex Accent)] +represents a control key combination. For instance, +eof \^D+ will send the +logout signal upon pressing Ctrl+D. The problem here is that those "circumflex +accents" aren't caret characters. A circumflex accent is its own character. How +do we do these in vi/vim? You need another control key combination to tell +vi/vim that you are going to be pressing a control key combination of course! + +To do, for instance, the Ctrl+D sequence in vim, go into insert mode and type ++Ctrl+v Ctrl+d+ (the d is not capitalized) and you should see +\^d+ show up. + +I did have two problems with this method though: \^S and \^Q. It turns out that +those aren't Ctrl+S and Ctrl+Q. Since I didn't know those, I elected to use the +actual digraph instead of the character version to set them. To do this, go +into insert mode again and hit +Ctrl\+k+ and type the digraph. In the +case of \^Q and \^S, these are D1 and D3, respectively. + + +Category:Linux +Category:Vim +Category:Unix + + +// vim: set syntax=asciidoc: |