From c2e41082e4b2e0e1dba6a980a7f09ccaad88cbd0 Mon Sep 17 00:00:00 2001 From: Blaž Hrastnik Date: Sun, 11 Sep 2022 11:09:12 +0900 Subject: Remove the .txt suffix from tutor The tutor file is loaded as .txt which can potentially spawn a language server. Then the path is unset, but the LS remains active. This can cause panics since updates are now submitted for a doc with no path. As a quick workaround we remove the extension which should avoid detection. Fixes #3730 --- runtime/tutor | 1059 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1059 insertions(+) create mode 100644 runtime/tutor (limited to 'runtime/tutor') diff --git a/runtime/tutor b/runtime/tutor new file mode 100644 index 00000000..4a6c4425 --- /dev/null +++ b/runtime/tutor @@ -0,0 +1,1059 @@ + _ _ __ __ + | | | | _ \ \ / / + | |_| | ___ | | (_) \ \/ / + | _ | / _ \ | | _ ) ( + | | | | | __/ | | | | / /\ \ + |_| |_| \___| |_| |_| /_/ \_\ + + A post-modern modal text editor. +_________________________________________________________________ + + Welcome to the Helix editor! Helix is different from editors + you might be used to in that it is modal, meaning that it has + different modes for editing text. The primary modes you will + use are Normal mode and Insert mode. While in Normal mode, the + keys you type won't actually type text. Instead, they will + perform various actions with the text. This allows for more + efficient editing. This tutor will teach you how you can make + use of Helix's modal editing features. To begin, ensure your + caps-lock key is not pressed and hold the j key until you reach + the first lesson. + + +================================================================= += 1.1 BASIC CURSOR MOVEMENT = +================================================================= + + ↑ + k * h is on the left + ← h l → * l is on the right + j * j looks like a down arrow + ↓ + + The cursor can be moved using the h, j, k, l keys, as shown + above. The cursor/arrow keys will also work, but it is faster + to use the hjkl keys as they are closer to the other keys you + will be using. Try moving around to get a feel for hjkl. + Once you're ready, hold j to continue to the next lesson. + + + + + + + +================================================================= += 1.2 EXITING HELIX = +================================================================= + + 1. Type : to enter Command mode. Your cursor will + move to the bottom of the screen. + 2. Type q or quit and type to exit Helix. + + Note: The quit command will fail if there are unsaved changes. + To force quit and DISCARD these changes, type q! or quit!. + You will learn how to save files later. + + To exit Command mode without entering a command, type . + + Now, move on to the next lesson. + + + + + + + +================================================================= += 1.3 DELETION = +================================================================= + + Type the d key to delete the character under the cursor. + + 1. Move the cursor to the line below marked -->. + 2. Move the cursor to each extra character, and type d to + delete it. + + --> Thhiss senttencee haass exxtra charracterss. + This sentence has extra characters. + + Once the sentence is correct, move on to the next lesson. + + + + + + + + +================================================================= += 1.4 INSERT MODE = +================================================================= + + Type the i key to enter Insert mode. + + 1. Move the cursor to the line below marked -->. + 2. Move to a place in the line which is missing text and type + i to enter Insert mode. Keys you type will now type text. + 3. Enter the missing text. + 4. type to exit Insert mode and return to Normal mode. + 5. Repeat until the line matches the line below it. + + --> Th stce misg so. + This sentence is missing some text. + + Note: If you want to move the cursor while in Insert mode, + you may use the arrow keys instead of exiting and + reentering Insert mode. + Note: The status bar will display your current mode. + Notice that when you type i, 'NOR' changes to 'INS'. + +================================================================= += 1.5 SAVING A FILE = +================================================================= + + Type :w/:write to save a file. + + 1. Exit Helix using :q! as explained before, or open a new + terminal. + 2. Open a file in Helix by running: hx FILENAME + 3. Make some edits to the file. + 4. Type : to enter Command mode. + 5. Type w or write, and type to save the file. + + You can also type wq or write-quit to save and exit. + + Note: You can optionally enter a filepath after the w/write + command in order to save to that path. + Note: If there are any unsaved changes to a file, a plus [+] + will appear next to the file name in the status bar. + + + +================================================================= += CHAPTER 1 RECAP = +================================================================= + + * Use the h,j,k,l keys to move the cursor. + + * Type : to enter Command mode. + * The q/quit and q!/quit! commands will exit Helix. The + former fails when there are unsaved changes. The latter + discards them. + * The w/write command will save the file. + * The wq/write-quit command will do both. + + * Type d to delete the character at the cursor. + + * Type i to enter Insert mode and type text. Type to + return to Normal mode. + + + + + +================================================================= += 2.1 MORE INSERT COMMANDS = +================================================================= + + As you saw, you can type i to enter Insert mode at the current + position of the cursor. There are a few other ways you can + enter Insert mode at different locations. + + Common examples of insertion commands include: + i - Insert before the selection. + a - Insert after the selection. (a means 'append') + I - Insert at the start of the line. + A - Insert at the end of the line. + + 1. Move to anywhere in the line below marked -->. + 2. Type A ( + a), your cursor will move to the end of + the line and you will be able to type. + 3. Type the text necessary to match the line below. + + --> This sentence is miss + This sentence is missing some text. + +================================================================= += 2.2 OPENING LINES = +================================================================= + + Type o to add a newline and insert below the cursor. + Type O to add a newline and insert above the cursor. + + 1. Move the cursor to the line below marked -->. + 2. Type o to open a line below and type your answer. + + --> What is the best editor? + + + + + + + + + + + +================================================================= += CHAPTER 2 RECAP = +================================================================= + + * Type a to append to the selection. + + * Type I to enter Insert mode at the first non-whitespace + character at the start of a line. + + * Type A to enter Insert mode at the end of a line. + + * Use o and O to open lines below/above the cursor respectively. + + + + + + + + + + +================================================================= += 3.1 MOTIONS AND SELECTIONS = +================================================================= + + Type w to select forward until the next word. + + The d key doesn't actually delete the character at the cursor, + it deletes all selected text. Your cursor is like a + single-character selection. + + 1. Move the cursor to the line below marked -->. + 2. Move to the beginning of a word that needs to be deleted. + 3. Type w to select until the beginning of the next word. + 4. Type d to delete the selection. + 5. Repeat for all extra words in the line. + + --> This sentence pencil has vacuum extra words in the it. + This sentence has extra words in it. + + + + +================================================================= += 3.2 MORE ON MOTIONS = +================================================================= + + As you saw, typing w moves the cursor forward until the start + of the next word, selecting the text traversed. This is useful + for moving around text and for selecting text to operate on. + + Some common motions include: + w - Move forward to before the beginning of the next word. + e - Move forward to the end of the current word. + b - Move backward to the beginning of the current word. + + The w,e,b motions also have counterparts - W,E,B - which + traverse WORDS instead of words. WORDS are only separated by + whitespace, whereas words can be separated by other characters + in addition to whitespace. + + All of these motions select the text they traverse. + + + +================================================================= += 3.3 THE CHANGE COMMAND = +================================================================= + + Type c to change the current selection. + + The change command deletes the current selection and enters + Insert mode, so it is a very common shorthand for di. + + 1. Move the cursor to the line below marked -->. + 2. Move to the start of an incorrect word and type w to + select it. + 3. Type c to delete the word and enter Insert mode. + 4. Type the correct word. + 5. Repeat until the line matches the line below it. + + --> This paper has heavy words behind it. + This sentence has incorrect words in it. + + + + +================================================================= += 3.4 COUNTS WITH MOTIONS = +================================================================= + + Type a number before a motion to repeat it that many times. + + 1. Move the cursor to the line below marked -->. + 2. Type 2w to move 2 words forward. + 3. Type 3e to move to the end of the third word forward. + 4. Type 2b to move 2 words backwards + 5. Try the above with different numbers. + + --> This is just a line with words you can move around in. + + + + + + + + + +================================================================= += 3.5 SELECT/EXTEND MODE = +================================================================= + + Type v to enter Select mode. + Type v again or to return to Normal mode + In Select mode every movement will extend the selection, as + opposed to replacing it. + + 1. Move the cursor to the line below marked -->. + 2. Move to the F of FOO and type v2w to select the two words. + 3. Type d to remove the two words. Notice d returns you to + Normal mode. + 4. Move to the B of BAZ and repeat the sequence to delete them. + + --> Remove the FOO BAR distracting words BAZ BIZ from this line. + + + + + + +================================================================= += 3.6 SELECTING LINES = +================================================================= + + Type x to select a whole line. Type x again to select the next. + + 1. Move the cursor to the second line below marked -->. + 2. Type x to select the line, and d to delete it. + 3. Move to the fourth line. + 4. Type x twice or type 2x to select 2 lines, and d to delete. + + --> 1) Roses are red, + --> 2) Mud is fun, + --> 3) Violets are blue, + --> 4) I have a car, + --> 5) Clocks tell time, + --> 6) Sugar is sweet, + --> 7) And so are you. + + Note : X works similarly to x although it doesn't extend to + subsequent lines. X on an empty line does nothing. + +================================================================= += 3.7 COLLAPSING SELECTIONS = +================================================================= + + Type ; to collapse selections to single cursors. + + Sometimes, you want to deselect without having to move the + cursor(s). This can be done using the ; key. + + 1. Move the cursor to the line below marked -->. + 2. Use the motions you have learned to move around the line, + and try using ; to deselect the text after it is selected + by the motions. + + --> This is an error-free line with words to move around in. + + Note: This works the same in select mode. + Note: Another related command is A-; which flips selections. + + + + +================================================================= += CHAPTER 3 RECAP = +================================================================= + + * Type w to select forward until the next word. + * Type e to select to the end of the current word. + * Type b to select backward to the start of the current word. + * Use uppercase counterparts, W,E,B, to traverse WORDS. + + * Type d to delete the entire selection. + * Type c to delete the selection and enter Insert mode. + + * Type a number before a motion to repeat it that many times. + + * Type v to enter Select mode, where all motions extend the + selection. + + * Type x to select the entire current line. Type x again to + select the next line. + + * Type semicolon ( ; ) to collapse selection. + +================================================================= += 4.1 UNDOING = +================================================================= + + Type u to undo. Type U to redo. + + 1. Move the cursor to the line below marked -->. + 2. Move to the first error, and type d to delete it. + 3. Type u to undo your deletion. + 4. Fix all the errors on the line. + 5. Type u several times to undo your fixes. + 6. Type U ( + u) several times to redo your fixes. + + --> Fiix the errors on thhis line and reeplace them witth undo. + + + + + + + + +================================================================= += 4.2 COPYING AND PASTING TEXT = +================================================================= + + Type y to yank (copy) the selection. + Type p to paste the yanked selection after the cursor. + Type P to paste the yanked text before the cursor. + + 1. Move the cursor to the line below marked -->. + Make sure your cursor is on the "b" of banana. + 2. Type w to select "banana" and y to yank it. + 3. Move to the space between "2" and "3" and type p to paste. + 4. Repeat between "3" and "4". + + --> 1 banana 2 3 4 + 1 banana 2 banana 3 banana 4 + + Note: Whenever you delete or change text, Helix will copy the + altered text. Use alt-d/c instead to avoid this. + Note: Helix doesn't share the system clipboard by default. Type + space-y/p to yank/paste on your computer's main clipboard. + +================================================================= += 4.3 SEARCHING IN FILE = +================================================================= + + Type / to search forward in file, enter to confirm search. + Type n to go to the next search match. + Type N to go to the previous search match. + + 1. Type / and type in a common word, like 'banana'. + 2. Type enter to confirm the search. + 3. Use n and N to cycle through the matches. + + Like the select command, searching also uses regex. + + Note: To search backwards, type ? (shift-/). + Note: Unlike Vim, ? doesn't change the search direction. + N always goes backwards and n always goes forwards. + + + + + +================================================================= += CHAPTER 4 RECAP = +================================================================= + + * Type u to undo. Type U to redo. + + * Type y to yank (copy) text and p to paste. + * Use space-Y and space-P to yank/paste on the system + clipboard. + + * Type / to search forward in file, and ? to search backwards. + * Use n and N to cycle through search matches. + + + + + + + + + + +================================================================= += 5.1 MULTIPLE CURSORS = +================================================================= + + Type C to duplicate the cursor to the next suitable line. + + 1. Move the cursor to the first line below marked -->. + 2. Type C to duplicate the cursor to the next suitable line. + Notice how it skips the line in the middle. Keys you type + will now affect both cursors. + 3. Use Insert mode to correct the lines. The two cursors will + fix both lines simultaneously. + 4. Type , to remove the second cursor. + + --> Fix th two nes at same ime. + --> + --> Fix th two nes at same ime. + + Fix these two lines at the same time. + + Note: Type alt-C to do the same above the cursor. + +================================================================= += 5.2 THE SELECT COMMAND = +================================================================= + + Type s to select matches in the selection. + + 1. Move the cursor to the line below marked -->. + 2. Type x to select the line. + 3. Type s. A prompt will appear. + 4. Type 'apples' and type . Both occurrences of + 'apples' in the line will be selected. + 5. You can now type c and change 'apples' to something else, + like 'oranges'. + 6. Type , to remove the second cursor. + + --> I like to eat apples since my favorite fruit is apples. + I like to eat oranges since my favourite fruit is oranges. + + + + + +================================================================= += 5.3 SELECTING VIA REGEX = +================================================================= + + The select command selects regular expressions, not just exact + matches, allowing you to target more complex patterns. + + 1. Move the cursor to the line below marked -->. + 2. Select the line with x and then type s. + 3. Enter ' +' to select any amount of consecutive spaces >1. + 4. Type c and change the matches to single spaces. + + --> This sentence has some extra spaces. + This sentence has some extra spaces. + + Note: If you want to perform find-and-replace, the select + command is the way to do it. Select the text you want + to replace in — type % to select the whole file — and + then perform the steps explained above. + + + +================================================================= += 5.4 ALIGN SELECTIONS = +================================================================= + + Type & to align the contents of the selections. + + 1. Move the cursor to the first line below marked -->. Place + the cursor on the whitespace just after the arrow. + 2. Type C four times or 4C. + 3. Type W to select the numbers and brackets. + 4. Type & to align the words. + + --> 97) lorem + --> 98) ipsum + --> 99) dolor + --> 100) sit + --> 101) amet + + Note: & only cares about the alignment of the "head" of the + selections - the end that moves. The other end is called + the "anchor". + +================================================================= += 5.5 SPLIT SELECTION INTO LINES = +================================================================= + + Type A-s (Alt-s) to split the selection(s) on newlines. + + 1. Move the first row of the table below. + 2. Select the entire table with 6x. + 3. Type A-s to split into selections at each line. + 4. Align the table with &. + + | FRUIT | AMOUNT | + |---------|--------| + | Apples | 8 | + | Bananas | 6 | + | Oranges | 3 | + | Donuts | 4 | + + + + + +================================================================= += CHAPTER 5 RECAP = +================================================================= + + * Type C to copy the current selection to below and Alt-C for + above. + + * Type s to select all instances of a regex pattern inside + the current selection. + + * Type & to align selections. + + * Type A-s to split the selection into lines. + + + + + + + + + +================================================================= += 6.1 SELECTING TO A CHARACTER = +================================================================= + + Type f to select up to and including (find) a character. + Type t to do the same, but not including (till) a character. + Type uppercase F / T to do the same backwards. + + 1. Move the cursor to the line below marked -->. Place the + cursor on the first dash. + 2. Type f[ to select to the square bracket. + 3. Type d to delete your selection. + 4. Go to the end of the line and repeat with F]. + 5. Move to the second line marked -->, just after the arrow. + 6. Use t and T to delete the dashes around the sentence. + + --> -----[Free this sentence of its brackets!]----- + --> ------Free this sentence of its dashes!------ + + Note: Unlike Vim, Helix doesn't limit these commands to the + current line. It searches for the character in the file. + +================================================================= += 6.2 THE REPLACE COMMAND = +================================================================= + + Type r to replace all selected characters with . + + 1. Move to the second line of the table, place the cursor on the + first =. + 2. Type t| (Shift-\) to select the = separator. + 3. Type r- to replace the separator with dashes. + + + | Month | Days | + |=======|------| + | Jan | 31 | + | Feb | 28 | + | Mar | 31 | + | ... | ... | + + + + +================================================================= += 6.3 REPETITION = +================================================================= + + Type . to repeat the last insert command. + Type A-. to repeat the last f / t selection. + + 1. Move the cursor to the line below marked -->. + 2. Make a change, insertion or appendage and repeat it with . . + 3. Try using A-. with f and t, to select multiple sentences for + instance. + + --> This is some text for you to repeat things. You can repeat + insertions like changing words, or repeat selections like f/t. + + + + + + + + +================================================================= += CHAPTER 6 RECAP = +================================================================= + + * Type f / F to extend selection up to & including a character. + * Type t / T to extend selection until a character. + + * Type r to replace selected characters. + + * Type . to repeat the last insertion. + * Type A-. to repeat the last f / t selection. + + + + + + + + + + + +================================================================= += 7.1 REPLACE WITH YANKED TEXT = +================================================================= + + Type R to replace the selection with previously yanked text. + + 1. Move the cursor to the line below marked -->. + 2. Type w to select "watermelons" and then y to yank it. + 3. Select "oranges" with w. + 4. Type R to replace "oranges" with "watermelons" + + + --> I like watermelons because oranges are refreshing. + I like watermelons because watermelons are refreshing. + + + + + + + + +================================================================= += 7.2 JOINING LINES = +================================================================= + + Type J to join together lines in selection. + + 1. Move the cursor to the line below marked -->. + 2. Type x four times or 4x to select all four lines. + 3. Type J to join the lines together. + + --> This sentence +is spilling over +onto other +lines. + + This sentence is spilling over onto other lines. + + + + + + +================================================================= += 7.3 INDENTING LINES = +================================================================= + + Type > to indent a line and < to outdent it. + + 1. Move the cursor to the line below marked -->. + 2. Move down to the second line and type > to indent it. + 3. Move to the third line and type < to outdent it. + + --> These lines + are indented + very poorly. + + These lines + are indented + much better. + + + + + +================================================================= += 7.4 INCREMENTING AND DECREMENTING = +================================================================= + + Type C-a to increment the number under selection. + Type C-x to decrement the number under selection. + + 1. Move the cursor to the third line below marked -->. + 2. Type C-a to increment the second point marked 2. + 3. Repeat for the point marked 3. + 4. Move to the last point and type C-x to decrement the 6. + + --> 1) First point. + --> 2) Added point. + --> 2) Next point. + --> 3) Another point. + --> 6) Last point. + + Note: If there isn't a number under the selection the cursor + will jump to the next number in the line and act on it. + + +================================================================= += CHAPTER 7 RECAP = +================================================================= + + * Type R to replace the selection with yanked text. + + * Type J to join lines in selection. + + * Type < and > to indent / outdent lines. + + * Type C-a to increment the selected number. + * Type C-x to decrement the selected number. + + + + + + + + + + +================================================================= += 8.1 REGISTERS = +================================================================= + + Registers are containers identified by a character for storing + things like yanked text. Registers are also used to store the + most recent search term as well as macros, which you'll learn + about in the next section. + + Type " to select register . + + 1. Move the cursor to the line below marked -->. + 2. Type w to select "watermelons" and yank with y. + 3. Type w to select "bananas". + 4. Change to register b with "b and yank with y. + 5. Select "mangoes" and type R to replace it with "watermelons". + 6. Select "pineapples" then type "b R to replace with "bananas". + + --> I like watermelons and bananas because my favorite fruits + are mangoes and pineapples. + + +================================================================= += 8.2 MACROS = +================================================================= + + Macros are a way to record a set of actions you want to repeat. + You can also record macros to a specific register (default @). + Type Q to start recording a macro - you should see a popup at + the bottom of your screen. Type Q again to stop recording. + Type q to repeat the macro from register @ (the default). + + 1. Move the cursor to the first line below marked -->. + Ensure your cursor is on the > of the arrow. + 2. Type Q to start recording. + 3. Edit the line to look like the bottom one. + 4. Exit insert and Type Q again to stop recording. + 5. Move to the line below and put your cursor on the > again. + 6. Type q to repeat the macro. + + --> ... sentence doesn't have it's first and last ... . + --> ... sentence doesn't have it's first and last ... . + This sentence doesn't have it's first and last word. + +================================================================= += CHAPTER 8 RECAP = +================================================================= + + * Type " to select a different register. + + * Type Q to start and stop recording a macro to a register, + the default being @. + + * Type q to replay a macro from @ or the selected register. + + + + + + + + + + + + +================================================================= += 9.1 SEARCHING FOR SELECTIONS = +================================================================= + + The most recent search with / is stored in register /. + n and N both refer to register /, this means we can set that + register without having to type in a search. + + Type * to copy the primary selection into register /, setting + the search term to the selection. + + 1. Move the cursor to the line below marked -->. + 2. Select "horse" with e and type *. + 3. Use n and N to jump between the instances of "horse". + + --> A horse is a horse, of course, of course, + --> And no one can talk to a horse of course. + + Note: * is like a shorthand for "/ y as all it really does is + copy the selection into the / register. + + +================================================================= += 9.2 ADDING SELECTION ON NEXT SEARCH MATCH = +================================================================= + + A property of select mode (v) when using n and N is that instead + of moving the selection to the next match, it adds a new + selection on each match. + + 1. Move the cursor to the line below marked -->. + 2. Select the first "bat" and type * to set it to search. + 3. Type v to enter select mode. + 4. Type n to select the other "bat". + 5. Use c or r to change the "bat"s to "cat". + + --> Everybody wants to be a bat, + --> because a cat's the only bat + --> who knows where it's at. + + + + + +================================================================= += 9.3 USING THE JUMPLIST = +================================================================= + + Helix can keep track of "jumps" which are big movements, like + searching or jumping to the definition of a function in code. It + stores these in what's called the jumplist. + + Type C-s (ctrl-s) to manually save your current position to + the jumplist. + + Type C-i ("in") and C-o ("out") to move forward and backwards in + the jumplist respectively. + + 1. Type C-s somewhere. + 2. Move far away in the file. + 3. Type C-o (just once!) to come back to where you saved. + + + + + +================================================================= += CHAPTER 9 RECAP = +================================================================= + + * Type * to set the search register to the primary selection. + + * Type n / N in visual mode to add selections on each search + match. + + * Type C-s to save position to the jumplist. + * Type C-i and C-o to go forward and backward in the jumplist. + + + + + + + + + + + +================================================================= += 10.1 CYCLING AND REMOVING SELECIONS = +================================================================= + + Type ) and ( to cycle the primary selection forward and backward + through selections respectively. + + Type A-, to remove the primary selection. + + 1. Move the cursor to the line below marked -->. + 2. Select both lines with xx or 2x. + 3. Type s to select, type "would" and enter. + 4. Use ( and ) to cycle the primary selection and remove the + very second "would" with A-, . + 5. Type c "wood" to change the remaining "would"s to "wood". + + --> How much would would a wouldchuck chuck + --> if a wouldchuck could chuck would? + + Note: Additionally, A-( and A-) cycle the *contents* of the + selections as well. + +================================================================= += 10.2 CHANGING CASE = +================================================================= + + Type ~ to switch the case of all selected letters. + Type ` to set all selected letters to lowercase. + Type Alt-` to set all selected letters to uppercase. + + 1. Move the cursor to the first line below marked -->. + 2. Select each wrongly capitalised or lowercase letter + and type ~ over them. + 3. Move to the second line marked -->. + 4. Type x to select the line. + 5. Type ` to change the line to lowercase. + 6. Move to the third line marked -->. + 7. Type x to select the line. + 8. Type Alt-` to change the line to uppercase. + + --> thIs sENtencE hAs MIS-cApitalIsed leTTerS. + --> this SENTENCE SHOULD all be in LOWERCASE. + --> THIS sentence should ALL BE IN uppercase! + +================================================================= += 10.3 SPLITTING SELECTIONS = +================================================================= + + Type S to split each selection on a regex pattern. + + 1. Move the cursor to the line under ---. + 2. Type xx / 2x to select the lines. + 3. Type S then \. |! (note the spaces after . and !). + This effectively splits the selection into sentences at each + dot or exclamation mark. + 4. Type A-; to reverse the selections. + 5. Type ; to reduce selections to a single character - the first + letter of each sentence. + 6. Type A-` to convert all selected letters to uppercase. + +--- +these are sentences. some sentences don't start with uppercase +letters! that is not good grammar. you can fix this. + + + +================================================================= += CHAPTER 10 RECAP = +================================================================= + + * Use ) and ( to cycle the primary selection back and forward + through selections respectively. + * Type A-, to remove the primary selection. + + * Type ~ to alternate case of selected letters. + * Use ` and A-` to set the case of selected letters to + upper and lower respectively. + + * Type S to split selections on regex. + + + + + + + + + +================================================================= + This tutorial is still a work-in-progress. + More sections are planned. -- cgit v1.2.3-70-g09d2