summaryrefslogtreecommitdiff
path: root/src/Digraphs.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/Digraphs.adoc')
-rw-r--r--src/Digraphs.adoc114
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:

Generated by cgit