diff --git a/doc/emacs-notes.org b/doc/emacs-notes.org index dda468c..41d7c1f 100644 --- a/doc/emacs-notes.org +++ b/doc/emacs-notes.org @@ -3,6 +3,313 @@ #+options: toc:t +* Workshop for Emacs Macros + +(By [[https://www.howardism.org/][Howard Abrams]], 2015 Nov 24) + +Basic idea of this file is to be both a *guide* and a *practice pad* +for leveling up on Emacs’ keyboard macro system. + +To use, just [[https://github.com/howardabrams/pdx-emacs-hackers/raw/master/workshops/keyboard-macros.org][download this file]] to your system, and edit it in Emacs. +Then just follow along... If you are not familiar with org-mode files, +here are the basics for this workshop: + + - Hit a tab on the header expands or collapses it + - Narrow to show just one section with: C-x n s + - Return by widening normally with: C-x n w + - Hyperlinks can be clicked on to view the Emacs Manual + +Pretty much treat the rest of this document as a text file. + +** Basic Usage + + Let’s begin with something simple to try out this project. + In the /block area/ below, hit: C-c ' (yes, the apostrophe). + When done with the tasks, hit: C-x C-s to close and return here. + + #+BEGIN_SRC org + - This foobar should be Interesting + - Nulla foobar Posuere + - Nullam foobar Tempus + - Etiam foobar laoreet quam sed Arcu + - Donec foobar hendrerit tempor Tellus + - Mauris foobar mollis tincidunt Felis + - etiam laoreet quam sed arcu + - nullam rutrum + - sed diam + - lorem ipsum dolor sit amet, consectetuer adipiscing elit + - mauris ac felis vel velit tristique imperdiet + - fusce suscipit, wisi nec facilisis facilisis, est dui fermentum leo, quis tempor ligula erat quis odio + - donec hendrerit tempor tellus + #+END_SRC + + Notice that the frame is split with this document still visible? + + Good, let’s play around. Let’s capitalize the first letter of each line. + Position point at the beginning of the first line, and then: + + - F3 + - M-c + - C-n + - C-a + - F4 + + Press F4 repeatedly to capitalize the first word on each line. + Don’t capitalize /every/ line... leave a few alone for a moment. + Now you have the basics. + + Let’s make a new macro to capitalize the /last/ word on each line. + Pop back up to the top of the list, and: + + - F3 + - C-e + - M-b + - M-c + - C-n + - F4 + + Once again, leave a few lines alone. + Just one more macro, as I want to show you something interesting. + Jump back to the beginning, and: + + - F3 + - C-a + - M-f + - Space + - foobar (or type any single word you find amusing) + - C-n + - F4 + + Type: C-x C-k C-k + + Notice it behaves the same as F4, but you can keep typing C-k to + execute your macro. + + Start typing C-n and/or C-p and notice the minibuffer. It alternates + between the following: + + - M-c C-n C-a + - C-e M-b M-c C-n + - C-a M-f SPC f 2*o b a r C-n + + Typing C-k at any point will execute that macro. You’ve now see the + Emacs Macro Ring, and can manipulate it. You are now at Level 2. + + Type C-c ' (apostrophe) to close that side window. + +** Naming Macros + + While that =foobar= macro may be quite handy, looping around the + keyboard macro ring to select it may be inefficient. Name it! + + C-x C-k n + + Give it a name of foobar, and now, you can: M-x foobar + to have the macro run. + + Perhaps it may be more useful to bind that macro to some un-used + key, like C-c k or F2 ... type: + + C-x C-k b + + And then type your binding, e.g. C-c k + + You know that C-c followed by a single letter is supposed to be free + of usage and available for your nefarious reasons, right? + + Read the [[info:emacs#Save%20Keyboard%20Macro][the Emacs Manual]] for details. If you actually tried this + example, then you have earned enough experience points to be level 3. + +** What do you mean On Every Line? + + Keyboard macros are slick, and while we /could/ prefix the F4 with + the numbering prefix to run it multiple times at once, e.g. C-9 F4, + a typical use case is to run it on every line in a region. + + Position the cursor in the block, and type: C-c ‘ + + #+BEGIN_SRC org + I will not take out the trash + I should not stop swearing + I may not stop to smell the roses + I do not want to go shopping + I could not care less + #+END_SRC + + With the point on the first line, type: + + - F3 + - C-a + - M-f + - M-f + - Space + - not (type the word, =not=) + - F4 + + Now select the remaining 4 lines any way you like, and type: + + - C-x C-k r + + Read [[info:emacs#Basic%20Keyboard%20Macro][the Emacs Manual]] for complete details, and welcome to level 4. + +** Numbering + + Numbering things seems to be important to people. Let’s see if we + can easily number the worst song ever inflicted on humanity. + + Once again, position the point inside the block, and type: C-c ' + + #+BEGIN_SRC org + 1 Drummers Drumming + 2 Pipers Piping + 3 Lords a Leaping + 4 Ladies Dancing + 5 Maids a Milking + 6 Swans a Swimming + 7 Geese a Laying + 8 Golden Rings + 9 Calling Birds + 10 French Hens + 11 Turtle Doves + 12 Partridge in a Pear Tree + #+END_SRC + + Follow along at home. First, position the point at the end (on the + line with the partridge), and: + + - C-x C-k C-c + - 1 + - Return (to set a counter to 1) + - F3 + - C-a + - F3 + - Spacebar + - C-n + - F4 + + Yes, hitting the F3 key twice (once to start the macro, and again to + insert the value of the counter) is a bit odd. You can also use the + binding: C-x C-k C-i + + Each time you hit F4, you increment the counter that is inserted. + + By the way, if you didn’t do the whole =C-x C-k C-c= to set the + counter to 1, the first value would be 0. Read [[info:emacs#Keyboard%20Macro%20Counter][the manual]] for + details. + +** Fixing Macros + + Now that you are a Level 5 Elf Keyboard Macro-er, and you can now + sling macros everywhere, you may notice that sometimes, in the + middle of a long macro, you flub it. + + If you hit F4 too soon (it happens), hit: C-u C-u F3 to pick up + where you left off and enter the rest of the macro. Hit F4 when you + are really finished. + + If you need to fix a keyboard macro with more finesse, type: + + C-x C-k C-e + + And behold the glory. Tis a simple language that should be pretty + obvious to a skilled Macro-er as yourself. Type C-h m once in that + buffer to display details of how to edit the macro. When you are + finished editing, type: C-c C-c + + I’ll let you play around with your own example for this one. + Read [[info:emacs#Edit%20Keyboard%20Macro][the manual]] for complete details. + +** Variations on a Theme + + To gain the Level 7 Keyboard Macro-er title, one should know how to + customize a macro /while/ running it. The following section of HTML + code needs some textual changes. We want to add one of the following + phrases to the /end/ of every paragraph that has a =class= of =change=: + + * Because I said so. Got it? + * Because I'm the boss. Got it? + * You heard me. Got it? + * Just do it. Got it? + + To begin, first move to the following block (hint: C-c M-f) and hit + TAB to collapse the block (you gotta see all the instructions, + right?) Next, issue a C-c ' on this block to show it in a new + window. If you have trouble with your HTML mode, change the =html= + to =text=. + + #+BEGIN_SRC html + + + +

+ Proin neque massa, cursus ut, gravida ut, lobortis eget, lacus. + Praesent augue. Sed diam. Nunc eleifend leo vitae magna. Nunc + rutrum turpis sed pede. +

+

+ Nullam rutrum. Nunc rutrum turpis sed pede. +

+

+ Phasellus at dui in ligula mollis ultricies. Curabitur lacinia + pulvinar nibh. Donec pretium posuere tellus. Praesent + fermentum tempor tellus. Proin quam nisl, tincidunt et, mattis + eget, convallis nec, purus. +

+

+ Fusce sagittis, libero non molestie mollis, magna orci ultrices + dolor, at vulputate neque nulla lacinia eros. Sed diam. Nam + vestibulum accumsan nisl. +

+

+ Aliquam feugiat tellus ut neque. Nam vestibulum accumsan + nisl. Praesent fermentum tempor tellus. +

+

+ Vivamus id enim. Suspendisse potenti. Curabitur lacinia + pulvinar nibh. Mauris ac felis vel velit tristique imperdiet. +

+

+ Donec vitae dolor. Mauris ac felis vel velit tristique + imperdiet. Nunc aliquet, augue nec adipiscing interdum, lacus + tellus malesuada massa, quis varius mi purus non odio. Proin + quam nisl, tincidunt et, mattis eget, convallis nec, purus. Nam + euismod tellus id erat. +

+

+ Nullam rutrum. +

+ + + #+END_SRC + + Type the following: + + - F3 + - C-s + - Type: class="change" + - C-e + - C-s + - Type:

+ - C-p + - C-e + - C-x q + - Type: Got it? + - C-n + - F4 + + In this particular case, we actually didn't do anything special, so + move to the beginning of the buffer, and hit F4, and the cursor will + go to the end of every paragraph that needs changing, and stop with + a prompt: + + Proceed with macro? (Y, N, RET, C-l, C-r) + + Type C-r and begin typing one of our phrases, and when you are done, + type: C-M-c + + The prompt will be re-displayed, so finish the macro with 'Y'. + Check out [[info:emacs#Keyboard%20Macro%20Query][the manual]] for details on this =C-x q= business. + * Emacs Calc Tutorials :NOTE: By Andrew Hyatt, found here: https://github.com/ahyatt/emacs-calc-tutorials. diff --git a/doc/keyboard-macros.org b/doc/keyboard-macros.org deleted file mode 100644 index 6461013..0000000 --- a/doc/keyboard-macros.org +++ /dev/null @@ -1,308 +0,0 @@ -#+TITLE: Workshop for Emacs Macros -#+AUTHOR: Howard Abrams -#+DATE: 2015 Nov 24 -#+TAGS: emacs workshop -#+STARTUP: hideblocks - -Basic idea of this file is to be both a *guide* and a *practice pad* -for leveling up on Emacs’ keyboard macro system. - -To use, just [[https://github.com/howardabrams/pdx-emacs-hackers/raw/master/workshops/keyboard-macros.org][download this file]] to your system, and edit it in Emacs. -Then just follow along... If you are not familiar with org-mode files, -here are the basics for this workshop: - - - Hit a tab on the header expands or collapses it - - Narrow to show just one section with: C-x n s - - Return by widening normally with: C-x n w - - Hyperlinks can be clicked on to view the Emacs Manual - -Pretty much treat the rest of this document as a text file. - -* Basic Usage - - Let’s begin with something simple to try out this project. - In the /block area/ below, hit: C-c ' (yes, the apostrophe). - When done with the tasks, hit: C-x C-s to close and return here. - - #+BEGIN_SRC org - - This foobar should be Interesting - - Nulla foobar Posuere - - Nullam foobar Tempus - - Etiam foobar laoreet quam sed Arcu - - Donec foobar hendrerit tempor Tellus - - Mauris foobar mollis tincidunt Felis - - etiam laoreet quam sed arcu - - nullam rutrum - - sed diam - - lorem ipsum dolor sit amet, consectetuer adipiscing elit - - mauris ac felis vel velit tristique imperdiet - - fusce suscipit, wisi nec facilisis facilisis, est dui fermentum leo, quis tempor ligula erat quis odio - - donec hendrerit tempor tellus - #+END_SRC - - Notice that the frame is split with this document still visible? - - Good, let’s play around. Let’s capitalize the first letter of each line. - Position point at the beginning of the first line, and then: - - - F3 - - M-c - - C-n - - C-a - - F4 - - Press F4 repeatedly to capitalize the first word on each line. - Don’t capitalize /every/ line... leave a few alone for a moment. - Now you have the basics. - - Let’s make a new macro to capitalize the /last/ word on each line. - Pop back up to the top of the list, and: - - - F3 - - C-e - - M-b - - M-c - - C-n - - F4 - - Once again, leave a few lines alone. - Just one more macro, as I want to show you something interesting. - Jump back to the beginning, and: - - - F3 - - C-a - - M-f - - Space - - foobar (or type any single word you find amusing) - - C-n - - F4 - - Type: C-x C-k C-k - - Notice it behaves the same as F4, but you can keep typing C-k to - execute your macro. - - Start typing C-n and/or C-p and notice the minibuffer. It alternates - between the following: - - - M-c C-n C-a - - C-e M-b M-c C-n - - C-a M-f SPC f 2*o b a r C-n - - Typing C-k at any point will execute that macro. You’ve now see the - Emacs Macro Ring, and can manipulate it. You are now at Level 2. - - Type C-c ' (apostrophe) to close that side window. - -* Naming Macros - - While that =foobar= macro may be quite handy, looping around the - keyboard macro ring to select it may be inefficient. Name it! - - C-x C-k n - - Give it a name of foobar, and now, you can: M-x foobar - to have the macro run. - - Perhaps it may be more useful to bind that macro to some un-used - key, like C-c k or F2 ... type: - - C-x C-k b - - And then type your binding, e.g. C-c k - - You know that C-c followed by a single letter is supposed to be free - of usage and available for your nefarious reasons, right? - - Read the [[info:emacs#Save%20Keyboard%20Macro][the Emacs Manual]] for details. If you actually tried this - example, then you have earned enough experience points to be level 3. - -* What do you mean On Every Line? - - Keyboard macros are slick, and while we /could/ prefix the F4 with - the numbering prefix to run it multiple times at once, e.g. C-9 F4, - a typical use case is to run it on every line in a region. - - Position the cursor in the block, and type: C-c ‘ - - #+BEGIN_SRC org - I will not take out the trash - I should not stop swearing - I may not stop to smell the roses - I do not want to go shopping - I could not care less - #+END_SRC - - With the point on the first line, type: - - - F3 - - C-a - - M-f - - M-f - - Space - - not (type the word, =not=) - - F4 - - Now select the remaining 4 lines any way you like, and type: - - - C-x C-k r - - Read [[info:emacs#Basic%20Keyboard%20Macro][the Emacs Manual]] for complete details, and welcome to level 4. - -* Numbering - - Numbering things seems to be important to people. Let’s see if we - can easily number the worst song ever inflicted on humanity. - - Once again, position the point inside the block, and type: C-c ' - - #+BEGIN_SRC org - 1 Drummers Drumming - 2 Pipers Piping - 3 Lords a Leaping - 4 Ladies Dancing - 5 Maids a Milking - 6 Swans a Swimming - 7 Geese a Laying - 8 Golden Rings - 9 Calling Birds - 10 French Hens - 11 Turtle Doves - 12 Partridge in a Pear Tree - #+END_SRC - - Follow along at home. First, position the point at the end (on the - line with the partridge), and: - - - C-x C-k C-c - - 1 - - Return (to set a counter to 1) - - F3 - - C-a - - F3 - - Spacebar - - C-n - - F4 - - Yes, hitting the F3 key twice (once to start the macro, and again to - insert the value of the counter) is a bit odd. You can also use the - binding: C-x C-k C-i - - Each time you hit F4, you increment the counter that is inserted. - - By the way, if you didn’t do the whole =C-x C-k C-c= to set the - counter to 1, the first value would be 0. Read [[info:emacs#Keyboard%20Macro%20Counter][the manual]] for - details. - -* Fixing Macros - - Now that you are a Level 5 Elf Keyboard Macro-er, and you can now - sling macros everywhere, you may notice that sometimes, in the - middle of a long macro, you flub it. - - If you hit F4 too soon (it happens), hit: C-u C-u F3 to pick up - where you left off and enter the rest of the macro. Hit F4 when you - are really finished. - - If you need to fix a keyboard macro with more finesse, type: - - C-x C-k C-e - - And behold the glory. Tis a simple language that should be pretty - obvious to a skilled Macro-er as yourself. Type C-h m once in that - buffer to display details of how to edit the macro. When you are - finished editing, type: C-c C-c - - I’ll let you play around with your own example for this one. - Read [[info:emacs#Edit%20Keyboard%20Macro][the manual]] for complete details. - -* Variations on a Theme - - To gain the Level 7 Keyboard Macro-er title, one should know how to - customize a macro /while/ running it. The following section of HTML - code needs some textual changes. We want to add one of the following - phrases to the /end/ of every paragraph that has a =class= of =change=: - - * Because I said so. Got it? - * Because I'm the boss. Got it? - * You heard me. Got it? - * Just do it. Got it? - - To begin, first move to the following block (hint: C-c M-f) and hit - TAB to collapse the block (you gotta see all the instructions, - right?) Next, issue a C-c ' on this block to show it in a new - window. If you have trouble with your HTML mode, change the =html= - to =text=. - - #+BEGIN_SRC html - - - -

- Proin neque massa, cursus ut, gravida ut, lobortis eget, lacus. - Praesent augue. Sed diam. Nunc eleifend leo vitae magna. Nunc - rutrum turpis sed pede. -

-

- Nullam rutrum. Nunc rutrum turpis sed pede. -

-

- Phasellus at dui in ligula mollis ultricies. Curabitur lacinia - pulvinar nibh. Donec pretium posuere tellus. Praesent - fermentum tempor tellus. Proin quam nisl, tincidunt et, mattis - eget, convallis nec, purus. -

-

- Fusce sagittis, libero non molestie mollis, magna orci ultrices - dolor, at vulputate neque nulla lacinia eros. Sed diam. Nam - vestibulum accumsan nisl. -

-

- Aliquam feugiat tellus ut neque. Nam vestibulum accumsan - nisl. Praesent fermentum tempor tellus. -

-

- Vivamus id enim. Suspendisse potenti. Curabitur lacinia - pulvinar nibh. Mauris ac felis vel velit tristique imperdiet. -

-

- Donec vitae dolor. Mauris ac felis vel velit tristique - imperdiet. Nunc aliquet, augue nec adipiscing interdum, lacus - tellus malesuada massa, quis varius mi purus non odio. Proin - quam nisl, tincidunt et, mattis eget, convallis nec, purus. Nam - euismod tellus id erat. -

-

- Nullam rutrum. -

- - - #+END_SRC - - Type the following: - - - F3 - - C-s - - Type: class="change" - - C-e - - C-s - - Type:

- - C-p - - C-e - - C-x q - - Type: Got it? - - C-n - - F4 - - In this particular case, we actually didn't do anything special, so - move to the beginning of the buffer, and hit F4, and the cursor will - go to the end of every paragraph that needs changing, and stop with - a prompt: - - Proceed with macro? (Y, N, RET, C-l, C-r) - - Type C-r and begin typing one of our phrases, and when you are done, - type: C-M-c - - The prompt will be re-displayed, so finish the macro with 'Y'. - Check out [[info:emacs#Keyboard%20Macro%20Query][the manual]] for details on this =C-x q= business.