Boon tutorial. See end for copying conditions. This tutorial assumes that you know Emacs already. Make sure boon is installed. Load the colemak configuration with: (require 'boon-colemak) You may also additionally (require 'boon-extras) if you like. Turn on boon globally with (boon-mode) If you just eval'ed the above, Boon may not be active in the current buffer. If it is not activated, activate it by M-x turn-on-boon-mode Boon indicates the difference between command mode and insert mode in several ways: - The modeline says Boon: (where state can be INS or CMD) - The cursor is a box in command mode, and a bar in insert mode. - If you eval (boon-powerline-theme) and have powerline installed then the mode text will be of various colors. You can switch from command to insert mode by typing v (mnemonic: v looks like an insert mark) and back to command mode by typing . >> Switch to command mode now (type ) Most Emacs key-chord commands via M-... and C-... are accessible as normal. For example, M-x turn-off-boon-mode reverts to your regular experience. The characters ">>" at the left margin indicate directions for you to try using a command. For instance: >> Type C-u and C-y to scroll this text * BASIC CURSOR CONTROL ---------------------- How do you move to a specific place within the text on the screen? The whole right-hand side of the keyboard is dedicated to this purpose. There are several ways you can do this. You can still use the arrow keys, but it's more efficient to keep your right hand around the home row and use the commands: e i u y. These characters are equivalent to the four arrow keys, like this: Previous line, u : : Backward, e .... Current cursor position .... Forward, i : : Next line, y >> Move the cursor to the line in the middle of that diagram. You'll find it easy to remember these letters by their location on the keyboard. In fact, most of the time you'll forget what you're typing exactly, and just know intuitively what you're doing. Note that, when you navigate within a line your hand stays on the home row. Navigating lines happens on the top row. Soon you will forget the letters that your hand is typing when moving the cursor. You will be using these basic cursor positioning commands a lot, but there are faster ways to go about moving the cursor. If moving by characters is too slow, you can move by words. The key "o" moves forward a word and "n" moves back a word. >> Type a few o's and n's. As in regular Emacs, when you are in the middle of a word, o moves to the end of the word. When you are in white space between words, o moves to the end of the following word. "n" works likewise in the opposite direction. In fact, o and n move by whole syntactic units: they will skip over parentheses when it makes sense. >> Move the cursor to the '*' in the following expression. Move to the relevant line, then type o and n a few times. Combine these keys with e and i to get to the place you want. 54 / ((8 + y) * (x - 3)) Notice that you can quickly move in the expression while staying comfortably on the home row. You can move to the beginning or end of a line by typing "l" or ";". As u and y, these line-based commands are on the top row. Emacs tries to manage the cursor position inside a line intelligently. This often works, but one sometimes need to quickly move to the beginning or end of line after moving up or down. You can do all this by staying on the top row. If you want to speed up moving up and down, use the shift key: "U" and "Y" move by whole paragraphs. >> Try a couple of "U", and then a couple of "Y". >> Try a couple of "l", and then a couple of ";" Checkout the cheat sheet (linked from README) for a summary of movement operations. >> Try all of these commands now a few times for practice. These are the most often used commands. Two other (less important) cursor motion commands are "<" (two characters), which moves to the beginning of the whole text, and ">", which moves to the end of the whole text. >> Try < now, to move to the beginning of the tutorial. Then use Y repeatedly to move back here. You can type a prefix argument by typing the numbers before the command. >> Move forward by seven words. To insert a character several times, you can use the escaping command "q" (mnemonic: quote). >> Try that now -- type 8 q * to insert ********. * OTHER MOVEMENT COMMANDS ------------------------- There are two other movement commands, bound to h and k. - k (mnemonic: bacK to marK) jumps pops a mark and jumps to it. (If a region is active, exchange point and mark) - h (mnemonic: hop) activates avy-goto-word-1 (if installed) - Additionally, j is bound to 'jump to definition' which is mode-dependent. * IF EMACS STOPS RESPONDING --------------------------- If Emacs stops responding to your commands, you can stop it safely by typing C-g. You can use C-g to stop a command which is taking too long to execute. You can also use C-g to discard a numeric argument or the beginning of a command that you do not want to finish. is an alternative which works in many contexts. * C-x prefix ------------- Instead of the C-x prefix; you may just type 'x' >> Type x 2 to split this window >> Type x 1 to close the other windows Additionally, the execute-command command (M-x) is bound to 'xx' * C-c prefix ------------ Mode-specific commands have often the form "C-c C-". These are accessible by typing simply "c " from command mode. Unfortunately there is no such binding in text mode by default --- so you cannot test this right away. * INSERTING AND DELETING ------------------------ If you want to insert text, type 'v' (can you remember the mnemonic?). Ordinary characters, like A, 7, *, etc., are then inserted as you type them. To insert a Newline character, simply type . In insert mode, regular Emacs editing commands can be used. >> Type v to insert some text; then to go back to command mode. Deleting text is mostly done with the 't' command (mnemonic: take). The take command expects an argument. This argument can be any right-hand move command, such as 'e' (backward-char). >> Type "te" to delete the character before the cursor In the above "e" is the argument to the "t" command. >> Type "tn" to delete backwards, up to the beginning of a word You can also use a left-hand _region specifier_ as an argument to 'take'. Such arguments include 's': the symbol at point. >> Type "ts" to delete the symbol where the cursor is (even if in the middle of the symbol) One of the most useful region specifier is , which refers to the current line. >> Type "t" to delete the current line. The region specifiers are defined in the boon-select-map keymap. (Type C-h v boon-select-map to inspect it) Region arguments can be given a repeat count. >> Type "t7e" to delete seven characters forward. You can also kill a segment of text by selecting it first, then use the kill command. Move to one end of that part, and type . ( is the Space bar.) Next, move the cursor to the other end of the text you intend to kill. As you do this, Emacs highlights the text between the cursor and the position where you typed . Finally, type "t". This kills all the text between the two positions. >> Move the cursor to the Y at the start of the previous paragraph. >> Type . Emacs should display a message "mark 0" at the bottom of the screen. >> Move the cursor to the n in "end", on the second line of the paragraph. >> Type t. This will kill the text starting from the Y, and ending just before the n. Selecting text with actually takes a region argument. When this argument is a move command, behaves like putting a mark at the current point. But, can take any region argument, including left-hand ones. >> Type "p" to select a paragraph >> Type again to undo the selection In particular, the region specifier "current line" () can be given to the marking command (). >> Type to select the current line >> Type "y" a few times to select some lines >> Type "t" to delete all these lines You can kill and switch to insert mode in a single command, bound to 'r' (mnemonic: replace). >> Try typing 'rs' to replace the symbol at point. The command for yanking is "s". (mnemonic: splice) >> Try it; type s to yank the text back. (Shifted "S" does yank-pop.) It is often the case that yanking a word does not give correct spacing. You can automatically fix the spacing after a yanking by repeating the command; (type 'ss'). >> Kill the word between parenthesis, for example by using "ts": (very). >> Yank it somewhere in a sentence using "ss". * UNDO ------ Undo is bound to "-" (minus); while redo is bound to "_" (underscore). * WHITESPACE ------------ In regular Emacs, it is sometimes annoying to manage whitespace; yanking a word may leave extra space here and lack a space there. In boon, repeating the 'splice' command attempts to automatically fix spaces. >> Copy the word " very" in this sentence to the kill ring, including a space before and no space after >> Move the cursor to the 'a' of the word annoying in the previous paragraph >> Splice the word " very"; notice how the spacing is wrong. >> Repeat the splice command and see how the spacing gets fixed for you. Cutting away space can be done in hindsight. That is, you can cut a word, and then the space before (or after) such word. Emacs will automatically 'glue' adjacent cuts in the killring. With boon, cutting space can also be done in foresight, using the region combinator 't'. >> Move the cursor to a word you wish to cut >> type "ttf" to remove the word and surrounding spaces. * PARENS -------- Boon provides help to manipulate parentheses. The command 'a' (mnemonic: around) adds parentheses around a region. It takes two arguments: 1. the kind of parentheses to use ('p' for regular parentheses) 2. the region to surround. This region is specified by the same language as the 't' command >> Move the cursor inside a word and type 'aps' to enclose it in parens. It's often useful to put parens around what has been just pasted. The just pasted region is accessible using the single quote ('). >> kill a word (tw), then paste it (s). Put parens around it. (ap') >> Inspect the kind of parentheses available by typing 'C-h v boon-enclosures ' It is possible to remove parentheses by using the 'a' operator, which transforms a region argument to its enclosure. >> Move the cursor inside a (sexp), and type 'tx' to delete the expression. >> Move the cursor inside another (sexp), and type 'tax' to delete the parens. The 'a' operator is especially useful when applied to 'x' (sexp), 'n' and 'o' --- but it works on any region. * SEARCHING ----------- Searching is bound to "f" (search forward) and "w" (search backward). The stands for the kind of thing you want to search. For example "fe" moves to the next error. "f" does incremental search. "fs" searches the symbol at point. "F" finds the next occurrence. Use "f C-h" to see all the things you can search. * MULTIPLE REGIONS, MULTIPLE CURSORS ------------------------------------ Boon provides a region operator to work on all occurrences of a string in a region. This operator takes two arguments: 1. the string 2. the region where to match the string. The string itself is specified by a region containing it. For example, you can remove all occurrences of boon in this paragraph. >> Move the cursor inside the word 'boon' in the above paragraph >> Type 't@sp' If you have the 'multiple-cursors' package installed, you can also replace such occurrences. >> Undo the previous command >> Move the cursor inside the word 'boon' in the above paragraph >> Type 'r@sp' Boon has special support for multiple cursors, which means that all commands described above should work out of the box with multiple cursors. * HELM ------- Helm is a very useful package. Boon provides special support for it. >> If you have not done it yet, install helm now. (package-install 'helm) The command 'p' starts helm-occur; which does a quick search for all occurrences of a pattern in the current buffer. >> Type 'p' now >> type "helm" to jump to the beginning of this section. You can search for the current symbol by typing "" in an empty helm mini-buffer. >> Move the cursor to an occurrence of the helm word, and type "p". >> Use C-y and C-u to select an occurrence, then type to jump to the currently selected occurrence Other, less common uses for helm are bound to "g". >> Type "g C-h" to see the bound helm variants. * SPECIAL BUFFERS ----------------- Certain Emacs mode already offer their "own" command system. Such modes include 'dired', 'magit', and others. In such buffers, it makes little sense to have an 'insert mode', and most edit commands do not make sense either. Thus, boon switches to "special mode". In "special mode", boon overrides just a few keys: - x (C-x map) - g (helm) - G (revert-buffer) You can get the original behavior of x, g and G by prefixing them with a quote ('). * COPYING --------- This tutorial descends from a long line of Emacs tutorials starting with the one written by Stuart Cracraft for the original Emacs. This version of the tutorial is not a part of GNU Emacs, but derived from the standard Emacs tutorial, Copyright (C) 1985, 1996, 1998, 2001-2013 Free Software Foundation, Inc. LocalWords: colemak eval'ed modeline CMD eval powerline ESC o's n's LocalWords: README bacK marK avy goto te spc keymap ss WHITESPACE tx LocalWords: whitespace killring ttf PARENS aps parens RET sexp fe fs LocalWords: dired magit Cracraft tw ap