diff --git a/emacs-notes.org b/emacs-notes.org
index b7ad361..339c7d4 100644
--- a/emacs-notes.org
+++ b/emacs-notes.org
@@ -9,1256 +9,29 @@ authors that I find useful.
* Emacs Features
+Random links and notes about various of Emacs' features.
+
** Eshell
- [[https://www.masteringemacs.org/article/complete-guide-mastering-eshell][Mastering Eshell]] by Mickey Petersen
- [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][Eschewing Zshell for Emacs Shell]] by Howard Abrams
- [[https://github.com/howardabrams/dot-files/blob/master/emacs-eshell.org][Abrams' EShell configuration]]
-* Workshop for Emacs Macros
+** Fonts and Themes
-(By [[https://www.howardism.org/][Howard Abrams]], 2015 Nov 24)
+- To show all available fonts, use the function ~x-family-fonts~.
-Basic idea of this file is to be both a *guide* and a *practice pad*
-for leveling up on Emacs’ keyboard macro system.
+- Load custom themes with ~customize-themes~ instead of calling ~load-theme~
+ directly. However, this does not set ~custom-enabled-themes~ correctly
+ (Emacs 26.1), so directly customizing ~custom-enabled-themes~ seems to be the
+ best thing (although one has to know the names of the themes then).
-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:
+** Magit Walkthrough
+:PROPERTIES:
+:CREATED: [2018-08-11 Sat 21:05]
+:END:
- - 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
-
-By Andrew Hyatt, found here: https://github.com/ahyatt/emacs-calc-tutorials.
-License is GPLv3.
-
-Order as given by https://blog.markhepburn.com/2013/12/07/andrew-hyatts-emacs-calc-tutorials
-
-** README
-
-#+BEGIN_EXAMPLE
-This repository contains tutorials about emacs calc originally writen on the
-Emacs community on Google+.
-
-The best way to read is probably just to open the org files directly, which
-Github will display correctly.
-
-If anyone would like to correct anything, add any tutorials, or request
-anything, the normal Github bug / request / or pull request process will work.
-
-#+END_EXAMPLE
-
-** HEX
-
-OK, seems like there's interest in some quick calc tips. Here's today's:
-
-How to convert decimal to hexidecimal. Let's say you want to convert number
-12345 to hex.
-
-#+BEGIN_EXAMPLE
-M-x calc
-d 6 (sets the number radix to 16, meaning all output will be in hex)
-10#12345 (inputs the number 12345 in base 10)
-
-The output reads:
-1: 16#3039
-#+END_EXAMPLE
-
-The answer is therefore =0x3039=.
-
-And then you can do a =d 0= to set the number radix back to normal, base 10.
-
-Here's how to do the other way. Let's convert =0xABCDEF= to base 10.
-
-#+BEGIN_EXAMPLE
-M-x calc
-16#ABCDEF
-
-The output reads:
-1: 11259375
-#+END_EXAMPLE
-
-** Date
-
-Ever want to know how many seconds old David Hasselhoff is? calc can do many
-things, but it doesn't know much about Hasselhoff, so first I do a query on
-Google for [david hasselhoff]. I get a knowledge card on the right saying he was
-born July 17, 1952. It doesn't give a time, so we'll just assume it was at
-midnight.
-
-#+BEGIN_EXAMPLE
-M-x calc
-t N (put the current time on the stack)
-' (press ' to enter algebraic mode, then you input the date).
-- (subtract the two to get the number of days David has been alive)
-24 (we're going to multiply by 24, the number of hours in a day)
-60 (the number of minutes in an hour)
-60 (the number of seconds in a minute)
-*
-*
-*
-
-Final result:
-1: 1910255938.01
-#+END_EXAMPLE
-
-There you have it, he's... wait, how many seconds? That's really hard to read.
-
-Back into calc!
-
-#+BEGIN_EXAMPLE
-d g (toggle digit grouping)
-
-The final final result:
-1: 1,910,255,938.01
-#+END_EXAMPLE
-
-Ah, that's a 1.9 billion seconds. Sweet!
-
-** Time
-
-Hey, what's the time? It's time to get ill! No, actually I meant the time in
-seconds since the epoch. Yesterday I went over doing math with time, which is
-fun but not something I use everyday. Much more useful is converting to and from
-Unix timestamps.
-
-Let's start by getting the time now in seconds since the epoch:
-
-#+BEGIN_EXAMPLE
-M-x calc
-t N (get the time now)
-t U (convert the time to seconds since the epoch)
-
-Result:
-1: 1359424746
-#+END_EXAMPLE
-
-Oh, and you want to insert that into your last used buffer?
-
-#+BEGIN_EXAMPLE
-y (that doesn't mean "yes", that means yank into the last buffer)
-#+END_EXAMPLE
-
-Done! Just to be complete, let's convert another date we have to input:
-
-#+BEGIN_EXAMPLE
-'<12:00pm Jul 4, 1776> (single quote to enter algebraic mode, then the date)
-t U (converts the time to seconds since the epoch)
-#+END_EXAMPLE
-
-But wait, what will happen? This is considerably before the epoch.
-
-#+BEGIN_EXAMPLE
-Result:
-1: -6106003200
-#+END_EXAMPLE
-
-Oh calc, you never let me down.
-
-Let's do the other way. Remember the Billenium?
-
-#+BEGIN_EXAMPLE
-1e9
-t U (converts the time in seconds since the epoch to text)
-
-Result:
-1: <9:46:40pm Sat Sep 8, 2001>
-#+END_EXAMPLE
-
-Wow, I never realized how close the Billenium was to September 11th. Kind of spooky...
-
-** Random
-
-I use calc whenever I need a random number. The interface is easy and the random
-numbers are (supposedly) high quality.
-
-So, let's start with something simple: A random number between 0 and 100:
-
-#+BEGIN_EXAMPLE
-M-x calc
-100 (the upper bound, all values will be between 0 and this)
-k r (creates a random number between 0 and the number on the stack)
-
-Result:
-1: 66 (of course, yours will be different)
-#+END_EXAMPLE
-
-I want another one!
-#+BEGIN_EXAMPLE
-k a (creates another number with the same upper bound as the last)
-#+END_EXAMPLE
-
-Now that I’ve had a taste of that sweet sweet randomness, I want a vector of 50!
-
-#+BEGIN_EXAMPLE
-100 (the upper bound, again)
-50 (the number to generate)
-k h (generate a vector of 50 random numbers between 0 and 100)
-
-1: [60, 72, 61, 74, 77, 97, 10, 90, 8, 29, 82, 81, 51, 58, 7, 88, 99, 1, 37, 89, 93, 84, 52, 94, 2, 35, 5, 48, 87, 47, 14, 6, 79, 18, 67, 76, 70, 9, 43, 65, 69, 23, 55, 11, 53, 78, 50, 30, 13, 42]
-#+END_EXAMPLE
-
-OK, that's nice. But how about a number between 0 and 1?
-
-#+BEGIN_EXAMPLE
-1.0
-k r
-
-Result:
-1: 0.636988102539
-#+END_EXAMPLE
-
-OK, how about number between -50 and 50? For that we need to use what calc calls
-an interval form:
-
-#+BEGIN_EXAMPLE
-[ (Starts interval form)
-50 (You can't just type -50 in calc)
-n (negate, givint -50)
-.. (the middle part of the interval form)
-50] (closing the interval form)
-#+END_EXAMPLE
-
-What you see now in calc is:
-#+BEGIN_EXAMPLE
-[-50 .. 50]
-#+END_EXAMPLE
-And you could have just typed it in with:
-#+BEGIN_EXAMPLE
-'[-50 .. 50]
-#+END_EXAMPLE
-which would be a lot easier, really.
-
-#+BEGIN_EXAMPLE
-k r
-#+END_EXAMPLE
-This produces a random number from the bounds of the interval, in this case both
--50 and 50 are possible, if you wanted them to be exlusive bounds, you'd use the
-form =(-50 .. 50)=.
-
-Finally, you can re-arrange a list:
-#+BEGIN_EXAMPLE
-'[1 2 3 4] (our starting vector)
--1 (signals to use the vector above, could also be the size of the vector)
-k h
-
-Result:
-1: [3, 1, 4, 2]
-#+END_EXAMPLE
-
-But =k a= will not give you more variants, unfortunately.
-
-** Unit Conversion
-
-You load 16 tons, and what do you get? I mean, in kilograms.
-
-#+BEGIN_EXAMPLE
-M-x calc
-' 16 tons (' to enter algebraic mode, so you can type out the units)
-u c kg (u c for "unit convert", and kg being the target unit).
-
-Result:
-1: 14514.95584 kg
-#+END_EXAMPLE
-
-Calc treats units as special. If you added something, such as:
-
-#+BEGIN_EXAMPLE
-3
-+
-
-Result:
-1: 14514.95584 kg + 3
-#+END_EXAMPLE
-
-But you can remove the units from the above using:
-#+BEGIN_EXAMPLE
-u r (remove units)
-
-Result:
-1: 14517.95584
-#+END_EXAMPLE
-
-OK, that's all well and good. But I've always wondered how much is Grandpa
-Simpson's gas mileage when he said "My car gets 40 rods to the hogshead and
-that's the way I likes it."
-
-For that, we need to define the units. Calc knows about a lot of units, but
-maybe not the rod and hogshead. In fact, in the calc info pages, defining what a
-"rod" is the example for how to define your own units. Let's get started!
-
-#+BEGIN_EXAMPLE
-'16 ft (The equivalent to one rod)
-u d rod Rod (defines a new unit rod, with optional description "Rod")
-#+END_EXAMPLE
-Now a hogshead is a unit of measurement that varies by what liquid it contains.
-I don't know what the unit is for gasoline, but let's use sherry as a
-substitute, in which a hogshead is 245 liters.
-
-#+BEGIN_EXAMPLE
-'245 liters
-u d hogshead (don't bother with a description this time)
-'40 rod
-'1 hogshead
-/
-#+END_EXAMPLE
-Wait, what units should we be using?
-#+BEGIN_EXAMPLE
-u v (show the units table, a handy table of all units)
-u c mi/gal (the units come from the unit table)
-
-Result:
-1: 1.87280731429e-3 mi / gal
-#+END_EXAMPLE
-
-But wait, we can do better. Why upgrade this measure to something that isn't
-even standard? Miles per gallon is just a bit better than rods per hogshead (in
-fact, that was what the original joke was about).
-
-#+BEGIN_EXAMPLE
-u c si (convert everything to scientific units)
-
-Result:
-1: 796.212244896 / m^2
-#+END_EXAMPLE
-
-Not that I understand this number, but at least in miles per gallon, I can see
-that that's not such great fuel economy, but what you do expect from Grandpa?
-
-OK, one more cool thing, then I'm out of here. Calc can split up numbers into
-multiple units. Here's 42 inches in feet and inches:
-
-#+BEGIN_EXAMPLE
-'42 in
-u c ft+in (Convert to a mixture of feet and inches)
-
-Result:
-1: 3 ft + 6. in
-#+END_EXAMPLE
-
-Calc, you're sooo coool!
-
-** Pi and Precision
-
-This one's about p and P and mostly about pi.
-
-First, let's pi it up:
-
-#+BEGIN_EXAMPLE
-M-x calc
-P (this gives you pi)
-
-Result:
-1: 3.14159265359
-#+END_EXAMPLE
-
-Well, I guess that's a reasonable pi. But, c'mon, this is calc. Can't we get a
-bit more digits? How about 100?
-
-#+BEGIN_EXAMPLE
-p 100 (sets precisions to 100)
-P (need to ask calc again for pi, it doesn't recalculate)
-
-Result:
-1: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
-#+END_EXAMPLE
-
-Well, but actually evaluating it robs it of its never-ending charm. Let's just
-use it as a variable. How about calculating the area of a circle with a 5 km
-radius?
-
-#+BEGIN_EXAMPLE
-'5000 m
-2
-^
-'pi (enter pi as a variable)
-*
-
-We get:
-1: 25000000 m^2 pi
-#+END_EXAMPLE
-
-Yeah, sure that’s what I said I wanted, but I’ve changed my mind - now I want a number.
-
-#+BEGIN_EXAMPLE
-=
-
-1: 78539816.3397448309615660845819875721049292349843776455243736148076954101571552249657008706335529267 m^2
-#+END_EXAMPLE
-
-Whoops, looked like I forgot to set the precision back to normal. And I can't
-read this. Let's make it a bit nicer.
-
-#+BEGIN_EXAMPLE
-Control-_ (normal emacs undo)
-p 7
-d g (turn digit grouping on)
-=
-
-Result:
-1: 7.853983e7 m^2
-#+END_EXAMPLE
-
-Oh, that's because I didn't have enough precision to render it without resorting
-to scientific notation. Let's just bump the precision up again.
-
-#+BEGIN_EXAMPLE
-Control-_ (undo, since we have to redo the pi conversion with more precision)
-p 10
-=
-
-Result:
-1: 78,539,816.35 m^2
-#+END_EXAMPLE
-
-Ah, that's better.
-
-** Strings
-
-Did you know you could work with strings in calc? For an example, let's find out
-what "Hello world" is in binary:
-
-#+BEGIN_EXAMPLE
-M-x calc
-d 2 (change the to binary mode)
-"Hello world (Enter the string "Hello world" which turns into a vector of numbers)
-
-Result:
-1: [2#1001000, 2#1100101, 2#1101100, 2#1101100, 2#1101111, 2#100000, 2#1110111, 2#1101111, 2#1110010, 2#1101100, 2#1100100]
-#+END_EXAMPLE
-
-And similarly, we can convert back. If someone gave you the binary number:
-=01001000011011110110110001100001= and asked what the string was, I'd have no
-idea... but calc knows:
-
-#+BEGIN_EXAMPLE
-d " (changes to string mode)
-C-x b scratch (whaaa, leave calc?)
-01001000011011110110110001100001 (enter the number we're parsing)
-C-a (go to the start of the line)
-C-x ( (start a macro)
-2# (prefix the number with a binary indicator)
-C-u 8 C-f (Jump forward 8 characters)
- (insert a space to separate the numbers)
-C-x ) (end the macro)
-C-x e (repeat the macro)
-e e (repeat twice twice more)
-C- (set mark)
-C-a (goto beginning of line)
-C-x g (copy region into calc)
-
-Result:
-
-1: "Hola"
-#+END_EXAMPLE
-
-And there you have it! Maybe there is an easier way to convert from the giant
-binary number to a vector of bytes, but I don't know it yet.
-
-** Fractional Arithmetic
-
-This one is pretty short, but it's about one of my favorite features of calc:
-the ability to handle fractions as fractions instead of rendering them as real
-numbers.
-
-Quick, what's =5/8 + 9/21=?
-
-Um, ok... better start multiplying things... wait, let's just tell calc to do
-it.
-
-#+BEGIN_EXAMPLE
-M-x calc
-5:8 (this is how you enter a fraction)
-9:21
-+
-
-Result:
-1: 59/56
-#+END_EXAMPLE
-
-So easy! If we want to convert it to a float you can do this:
-
-#+BEGIN_EXAMPLE
-c f (convert to
-float)
-
-Result:
-
-1: 1.05357142857*10.^0
-#+END_EXAMPLE
-
-And if you want it back as a fraction, then just do:
-
-#+BEGIN_EXAMPLE
-c F (convert to fraction)
-
-Result:
-
-1: 59/56
-#+END_EXAMPLE
-
-That's so awesome!
-
-You could also enter fractions this way:
-
-#+BEGIN_EXAMPLE
-m f (set fraction mode, integer division will result in fractions)
-5
-8
-/
-
-Result:
-
-1: 5/8
-#+END_EXAMPLE
-
-Now you can live in the nice world of fractions as much as you like. It's a nice
-world, full of pleasant to look at integers taking up little horizontal space
-
-** Algebra
-
-I think it's time to write about one of the amazing things that calc can do:
-algebra!
-
-Before we get into how to solve equations, I just want to write about on some
-cool things you can do with the calc display.
-
-Let's say you have a formula you want to work with =a + sqrt(b) = 5=. Let's enter
-that into calc:
-
-#+BEGIN_EXAMPLE
-M-x calc
-'a + sqrt(b) = 5 (' starts algebraic mode).
-
-Result:
-1: a + sqrt(b) = 5
-#+END_EXAMPLE
-
-Well, that's not so surprising, that's what we put in. Kind of disappointing,
-though. Is that it calc? We love your brains, but what about your looks? That's
-important too!
-
-#+BEGIN_EXAMPLE
-d B (turn on calc-big-language mode)
-
-Result:
- ___
-1: a + V b = 5
-#+END_EXAMPLE
-
-Hey, that's an ASCII square-root symbol. What other cool things can you do here?
-
-#+BEGIN_EXAMPLE
-a^2
-
-Result:
-
- 2
-1: a
-
-3:4 (enter the fraction 3/4)
-
-Result:
-
- 3
-1: -
- 4
-#+END_EXAMPLE
-
-Here's how to get back:
-#+BEGIN_EXAMPLE
-d N (calc-normal-language)
-#+END_EXAMPLE
-
-And an alternative, in which all operators are explicitly represented as
-functions:
-
-#+BEGIN_EXAMPLE
-1: a + sqrt(b) = 5 (re-enter the formula)
-d U (calc-unformatted-language)
-
-Result:
-1: eq(add(a, sqrt(b)), 5)
-#+END_EXAMPLE
-
-But, wait, did you think that's all? What if you wanted to enter that equation
-in Mathematica?
-
-#+BEGIN_EXAMPLE
-d M (calc-mathematica-language)
-
-Result:
-
-1: a + Sqrt[b] == 5
-#+END_EXAMPLE
-
-Ooh! Calc! Do c++ next!
-
-#+BEGIN_EXAMPLE
-d C (calc-c-language)
-
-1: a + sqrt(b) == 5
-#+END_EXAMPLE
-
-Latex!
-
-#+BEGIN_EXAMPLE
-d L (calc-latex-language)
-
-Result:
-
-1: a + \sqrt{b} = 5
-#+END_EXAMPLE
-
-I could keep going, but trust me, there's more. And you can even define your own
-languages by constructing syntax tables, but I won't get into that now.
-
-** More on Algebra
-
-Jim is 42 years old. He has one brother, and their total age is 100. What is the
-brother's age? OK, this isn't a very hard problem, but let's just introduce calc
-algebra by solving it.
-
-#+BEGIN_EXAMPLE
-M-x calc
-'42 + x = 100 (' to enter algebraic input)
-a S x (solve for x)
-
-Result:
-1: x = 58
-#+END_EXAMPLE
-
-Let's make this harder. Jim and Dan's ages sum to 100. Jim is 5 years older than
-Dan. How old are they?
-
-#+BEGIN_EXAMPLE
-'[j + d = 100, d + 5 = j]
-a S j,d
-
-Result:
-1: [j = 52.5, d = 47.5]
-#+END_EXAMPLE
-
-Nice!
-
-And of course it can give you more than just numerical solutions:
-
-#+BEGIN_EXAMPLE
-'sin(x) + tan(y) = pi / 2
-a S y (solve for y)
-
-Result:
-1: y = arctan(pi / 2 - sin(x))
-#+END_EXAMPLE
-
-Sometimes there are more than one solution. For example:
-#+BEGIN_EXAMPLE
-'x^2 = 25
-a S x
-
-Result:
-1: x = 5
-#+END_EXAMPLE
-
-Wait, what happened to -5! That's a valid solution, why didn't calc tell us
-about it? What's happening here is that calc is telling us about the first valid
-thing it can find, which is basically how it operates. But you can always get
-everything:
-
-#+BEGIN_EXAMPLE
-'x^2 = 25
-a P x (find the polynomial solutions)
-
-Result:
-1: [5, -5]
-#+END_EXAMPLE
-
-Sometimes there aren't a finite number of results because you aren't dealing
-with polynomials. You can just get a generalized solution:
-
-#+BEGIN_EXAMPLE
-'sin(x)^2 = 25
-H a S x (solve for x, giving the generalized solution)
-
-Result:
-1: x = arcsin(5 s1) (-1)^n1 + 180 n1
-#+END_EXAMPLE
-
-This uses the calc notation =n1=, which you just means any integer. You can also
-see another notation =s1= which means any sign. In this case =5 s1= means that that
-number can be 5 or -5.
-
-Looking at how awesome calc is, it's just a shame I never knew about it in high
-school...
-
-** Financial
-
-I recently chatted with emacspeak creator T.V. Raman, and told him I was
-writing a series of short tutorials about calc. He is really a calc fanatic, and
-told me a story in which he astounded a loan officer by calculating scheduled
-loan payments with just a few keystrokes in calc. Raman is living proof that
-calc is a useful tool for so many situations, and it always pays to have emacs
-running. He also mentioned that he found the explanation in the calc tutorial
-about the financial functions to be the clearest he's ever read.
-
-So, yes, calc can do finance. Let's say that you were sitting in front of a loan
-officer, and she told you that for your loan of $500,000, you need to pay in 30
-installments with a 5% interest rate. How much do you need to pay each month?
-Wait a second! Stop right there, loan officer! I have calc!
-
-#+BEGIN_EXAMPLE
-M-x calc
-500000 (the amount of the loan)
-30 (the number of payments)
-'5% (equivalent to typing 0.05)
-b M (calc-fin-pmt, computing the amount of periodic payments to amortize a loan)
-
-Result:
-1: 25,000
-#+END_EXAMPLE
-
-OK, but that's a bit obvious, since $25,000 is just 5% of $500,000. If the
-number of payments was much smaller, we'd get a larger value. Let's take another
-question: if you wanted to only pay $10,000 in each installment? How many
-installments would it take to pay off the loan?
-
-#+BEGIN_EXAMPLE
-'5%
-10000 (the payment we want to make)
-500000 (the loan amount)
-b # (calc-fin-nper, calculate the number of installments needed)
-
-Result
-1: nper(0.05, 10,000, 500,000)
-#+END_EXAMPLE
-
-What? Oh, I see, I also go the message: "Payment too small to cover interest
-rate: 10000". Oh, right, 5% of $500,000 is already $25,000, so we'd never pay it
-off at that rate. What if we payed $50,000 instead?
-
-#+BEGIN_EXAMPLE
-'5%
-50000 (the payment we want to make)
-500000 (the loan amount)
-b #
-
-Result:
-1: 14.2066908
-#+END_EXAMPLE
-
-So, it would take just over 14 payments to pay off the loan.
-
-OK, one more cool one: Let's say you meet an investment banker who gives you the
-following deal. I've got a investment for you, she says. Just give me $100,000
-and I'll give you $10,000 at the end of each year for the next 12 years.
-Assuming the interest rate will stay at 3% for the next 12 years. Is it a good
-deal?
-
-Hey, what are you asking me for? I have no idea! Calc knows, though, because it
-can tell you the break-even point for the cost of an investment that gives
-periodic payments.
-
-#+BEGIN_EXAMPLE
-'3% (the interest rate)
-12 (the number of payments)
-10000 (the payment you get each time)
-b P (calc-fin-pv, calculate the "present value" of the investment, the break-even point for the investment)
-
-Result:
-1: 99,540.0399357
-#+END_EXAMPLE
-
-In other words, the break-even point for the initial cost is $99,540. If the
-investment costs more than this, it's no good at that assumed interest rate.
-Better reject the deal. Trust calc more than any investment banker.
-
-This is just a small sampling of some of the financial calculations that calc
-can perform. The next time you are making an investment, fire up calc. You'll
-not only have confidence in the deal, you may just amaze someone with the power
-of emacs, just like T.V. Raman did.
-
-** Calculus
-
-Quick, integrate =2x + sin(y)=! Well, frankly, it's been so long since I've done
-calculus by hand I can't remember anymore. Well, knowing calculus is good, but
-knowing calc is even more useful!
-
-#+BEGIN_EXAMPLE
-M-x calc
-'2x + sin(y) (The single quote enters algebraic mode)
-a i y (Calculate the integral with respect to y)
-
-Result
-1: 2 x y - 180 cos(y) / pi
-#+END_EXAMPLE
-
-You can also integrate over specific regions by using C-u a i, whereupon it will
-prompt you for the start and end point of the integration.
-
-As the manual mentions, the results are often not as simplified as they could
-be. Calc is impressive, but it isn't as sophisticated as Mathematica.
-
-An example of some issues are if we just take the derivative of the integral we
-just calculated. We should get back to our original formula.
-
-#+BEGIN_EXAMPLE
-a d y (Calculate the derivative with respect to y)
-
-Result:
-1: 2 x + 3.14159265358 sin(y) / pi
-#+END_EXAMPLE
-
-Clearly this should be 2x + sin(y), but calc may have made an error.
-
-OK, let's make calc do something cool so we can forget this unfortunate
-incident. Hey, how about making a Taylor series of a function?
-
-#+BEGIN_EXAMPLE
-'2x + sin(y) (re-enter the formula)
-a t y 6 (Calculate the Taylor series of a term, over y, for 6 terms)
-
-Result:
-1: 2 x + y - y^3 / 6 + y^5 / 120 - y^7 / 5040 + y^9 / 362880
-#+END_EXAMPLE
-
-This isn't a bad approximation, see [[https://www.google.com/search?q=y+-+y%5E3+%2F+6+%2B+y%5E5+%2F+120+-+y%5E7+%2F+5040+%2B+y%5E9+%2F+362880][Google’s answer]] for comparison.
-
-So, yes, calc can do college-level math, even if the answers aren't perfectly
-simplified. It's not Mathematica, but it is free and integrated into emacs, so
-it's definitely nice to have.
-
-** Bit Manipulation
-
-Quick! What bits are set on the number 925817? What, are you going to convert it
-to binary and note positions of 1s? Ha! I laugh at such primitive techniques.
-
-#+BEGIN_EXAMPLE
-M-x calc
-925817
-b u (unpack the bits into a vector)
-
-Result
-1: [0, [3 .. 6], 13, [17 .. 19]]
-#+END_EXAMPLE
-
-How many bits is that?
-
-#+BEGIN_EXAMPLE
-v # (count the number of items in a vector)
-
-Result:
-1: 9
-#+END_EXAMPLE
-
-This is convenient! So yes, calc has some nice functions for binary numbers. The
-interesting thing about calc's binary number functions aren't just that you can
-do bitwise operations such as AND and OR, but it has the notion of a word size
-that it works with. Well, it'd have to do things like NOT.
-
-Let's check it out. First, we'll see what the number 925817 looks like in binary.
-
-#+BEGIN_EXAMPLE
-925817
-d 2
-
-Result:
-1: 2#11100010000001111001
-#+END_EXAMPLE
-
-This is nice, but it'd be better to see the whole word.
-
-#+BEGIN_EXAMPLE
-d z (Display leading zeroes)
-
-Result:
-1: 2#00000000000011100010000001111001
-#+END_EXAMPLE
-
-Ah, that's more like it. The word size by default is 32 bits, as you can see.
-Or, wait, can you see? Hard to count. Let's verify it.
-
-#+BEGIN_EXAMPLE
-d 0 (go back to base-10 mode)
-0 (we start with 0)
-b n (calculate the not)
-
-Result:
-1: 4294967295
-#+END_EXAMPLE
-
-Now we already know how to count the 1's...
-
-#+BEGIN_EXAMPLE
-b u v #
-
-Reuslt:
-
-1: 0000000032
-#+END_EXAMPLE
-
-Whoops, looks like we still have leading 0s. But we've confirmed it, so let's just let it go for now.
-
-Now, let's see what the number 925817 is if you reverse all the bits. I can't
-take credit for this particular bit of cleverness, this technique comes straight
-from calc's info pages.
-
-#+BEGIN_EXAMPLE
-d z (get rid of leading 0s)
-925817
-b u (unpack into a vector)
-31 - (tranform each bit position by subtracting it from 31, the tab just switches the items around on the stack)
-b p (repack the vector)
-
-Result:
-1: 2651090944
-#+END_EXAMPLE
-
-Woody Allen once praised New York by saying how he loves that you can go to
-Chinatown and eat a crab in the middle of the night, but in reality what kind of
-crazy person would need to do that? I feel the same way about all these
-features. Will I really ever need to reverse the bits of a number? Not sure, but
-I do love the way that calc has me covered for whatever I really want to do.
-
-By the way, want to go to 64-bit mode? Just change the word size.
-
-#+BEGIN_EXAMPLE
-b w 64 (change the word size to 64)
-#+END_EXAMPLE
-
-Now let's reverse the bits of 925817 again to see what we get. It'll be
-amusingly huge!
-
-#+BEGIN_EXAMPLE
-925817
-b u (unpack into a vector)
-63 - (tranform each number by subtracting it from 31, the tab just switches the items around on the stack)
-b p (repack the vector)
-
-Result:
-1: 11386348903201767424
-#+END_EXAMPLE
-
-Ah, that's what it was. I was just about to give that same answer myself.
-
-One more cool thing. If you give a negative word size, calc will interpret
-binary number as 2's complement numbers. For example:
-
-#+BEGIN_EXAMPLE
-b w 32 (set the word size to 32)
-2 (just to choose a simple number)
-b n (bitwise not)
-
-Result:
-1: 4294967293
-#+END_EXAMPLE
-
-And now with 2's complement!
-
-#+BEGIN_EXAMPLE
-b w -32 (set the word size to -32, in other words, a 2's complement version of 32 bit)
-2
-b n
-
-Result:
-1: -3
-#+END_EXAMPLE
-
-Hope this helps you twiddle those bits in all the ways that make you happy.
+https://emacsair.me/2017/09/01/magit-walk-through/
* Random Notes
@@ -1489,12 +262,6 @@ https://www.reddit.com/r/emacs/comments/8ekz0u/how_to_pastethencopy/.
Syntax: ~/telnet:HOST#PORT:~, works also with other protocols.
-** Magit Walkthrough
-:PROPERTIES:
-:CREATED: [2018-08-11 Sat 21:05]
-:END:
-
-https://emacsair.me/2017/09/01/magit-walk-through/
** Fractals in Emacs
:PROPERTIES:
:CREATED: [2018-08-04 Sat 13:01]
@@ -2084,13 +851,1249 @@ Approach: sort all buffers by size.
- Customize the variable =file-coding-system-alist= to control whether certain
files should always be opened with a specific encoding.
-** Fonts and Themes
+* Tutorials
+** Workshop for Emacs Macros
-Inspired by https://github.com/kunalb/poet.
+(By [[https://www.howardism.org/][Howard Abrams]], 2015 Nov 24)
-- To show all available fonts, use the function ~x-family-fonts~.
+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
+
+By Andrew Hyatt, found here: https://github.com/ahyatt/emacs-calc-tutorials.
+License is GPLv3.
+
+Order as given by https://blog.markhepburn.com/2013/12/07/andrew-hyatts-emacs-calc-tutorials
+
+*** README
+
+#+BEGIN_EXAMPLE
+This repository contains tutorials about emacs calc originally writen on the
+Emacs community on Google+.
+
+The best way to read is probably just to open the org files directly, which
+Github will display correctly.
+
+If anyone would like to correct anything, add any tutorials, or request
+anything, the normal Github bug / request / or pull request process will work.
+
+#+END_EXAMPLE
+
+*** HEX
+
+OK, seems like there's interest in some quick calc tips. Here's today's:
+
+How to convert decimal to hexidecimal. Let's say you want to convert number
+12345 to hex.
+
+#+BEGIN_EXAMPLE
+M-x calc
+d 6 (sets the number radix to 16, meaning all output will be in hex)
+10#12345 (inputs the number 12345 in base 10)
+
+The output reads:
+1: 16#3039
+#+END_EXAMPLE
+
+The answer is therefore =0x3039=.
+
+And then you can do a =d 0= to set the number radix back to normal, base 10.
+
+Here's how to do the other way. Let's convert =0xABCDEF= to base 10.
+
+#+BEGIN_EXAMPLE
+M-x calc
+16#ABCDEF
+
+The output reads:
+1: 11259375
+#+END_EXAMPLE
+
+*** Date
+
+Ever want to know how many seconds old David Hasselhoff is? calc can do many
+things, but it doesn't know much about Hasselhoff, so first I do a query on
+Google for [david hasselhoff]. I get a knowledge card on the right saying he was
+born July 17, 1952. It doesn't give a time, so we'll just assume it was at
+midnight.
+
+#+BEGIN_EXAMPLE
+M-x calc
+t N (put the current time on the stack)
+' (press ' to enter algebraic mode, then you input the date).
+- (subtract the two to get the number of days David has been alive)
+24 (we're going to multiply by 24, the number of hours in a day)
+60 (the number of minutes in an hour)
+60 (the number of seconds in a minute)
+*
+*
+*
+
+Final result:
+1: 1910255938.01
+#+END_EXAMPLE
+
+There you have it, he's... wait, how many seconds? That's really hard to read.
+
+Back into calc!
+
+#+BEGIN_EXAMPLE
+d g (toggle digit grouping)
+
+The final final result:
+1: 1,910,255,938.01
+#+END_EXAMPLE
+
+Ah, that's a 1.9 billion seconds. Sweet!
+
+*** Time
+
+Hey, what's the time? It's time to get ill! No, actually I meant the time in
+seconds since the epoch. Yesterday I went over doing math with time, which is
+fun but not something I use everyday. Much more useful is converting to and from
+Unix timestamps.
+
+Let's start by getting the time now in seconds since the epoch:
+
+#+BEGIN_EXAMPLE
+M-x calc
+t N (get the time now)
+t U (convert the time to seconds since the epoch)
+
+Result:
+1: 1359424746
+#+END_EXAMPLE
+
+Oh, and you want to insert that into your last used buffer?
+
+#+BEGIN_EXAMPLE
+y (that doesn't mean "yes", that means yank into the last buffer)
+#+END_EXAMPLE
+
+Done! Just to be complete, let's convert another date we have to input:
+
+#+BEGIN_EXAMPLE
+'<12:00pm Jul 4, 1776> (single quote to enter algebraic mode, then the date)
+t U (converts the time to seconds since the epoch)
+#+END_EXAMPLE
+
+But wait, what will happen? This is considerably before the epoch.
+
+#+BEGIN_EXAMPLE
+Result:
+1: -6106003200
+#+END_EXAMPLE
+
+Oh calc, you never let me down.
+
+Let's do the other way. Remember the Billenium?
+
+#+BEGIN_EXAMPLE
+1e9
+t U (converts the time in seconds since the epoch to text)
+
+Result:
+1: <9:46:40pm Sat Sep 8, 2001>
+#+END_EXAMPLE
+
+Wow, I never realized how close the Billenium was to September 11th. Kind of spooky...
+
+*** Random
+
+I use calc whenever I need a random number. The interface is easy and the random
+numbers are (supposedly) high quality.
+
+So, let's start with something simple: A random number between 0 and 100:
+
+#+BEGIN_EXAMPLE
+M-x calc
+100 (the upper bound, all values will be between 0 and this)
+k r (creates a random number between 0 and the number on the stack)
+
+Result:
+1: 66 (of course, yours will be different)
+#+END_EXAMPLE
+
+I want another one!
+#+BEGIN_EXAMPLE
+k a (creates another number with the same upper bound as the last)
+#+END_EXAMPLE
+
+Now that I’ve had a taste of that sweet sweet randomness, I want a vector of 50!
+
+#+BEGIN_EXAMPLE
+100 (the upper bound, again)
+50 (the number to generate)
+k h (generate a vector of 50 random numbers between 0 and 100)
+
+1: [60, 72, 61, 74, 77, 97, 10, 90, 8, 29, 82, 81, 51, 58, 7, 88, 99, 1, 37, 89, 93, 84, 52, 94, 2, 35, 5, 48, 87, 47, 14, 6, 79, 18, 67, 76, 70, 9, 43, 65, 69, 23, 55, 11, 53, 78, 50, 30, 13, 42]
+#+END_EXAMPLE
+
+OK, that's nice. But how about a number between 0 and 1?
+
+#+BEGIN_EXAMPLE
+1.0
+k r
+
+Result:
+1: 0.636988102539
+#+END_EXAMPLE
+
+OK, how about number between -50 and 50? For that we need to use what calc calls
+an interval form:
+
+#+BEGIN_EXAMPLE
+[ (Starts interval form)
+50 (You can't just type -50 in calc)
+n (negate, givint -50)
+.. (the middle part of the interval form)
+50] (closing the interval form)
+#+END_EXAMPLE
+
+What you see now in calc is:
+#+BEGIN_EXAMPLE
+[-50 .. 50]
+#+END_EXAMPLE
+And you could have just typed it in with:
+#+BEGIN_EXAMPLE
+'[-50 .. 50]
+#+END_EXAMPLE
+which would be a lot easier, really.
+
+#+BEGIN_EXAMPLE
+k r
+#+END_EXAMPLE
+This produces a random number from the bounds of the interval, in this case both
+-50 and 50 are possible, if you wanted them to be exlusive bounds, you'd use the
+form =(-50 .. 50)=.
+
+Finally, you can re-arrange a list:
+#+BEGIN_EXAMPLE
+'[1 2 3 4] (our starting vector)
+-1 (signals to use the vector above, could also be the size of the vector)
+k h
+
+Result:
+1: [3, 1, 4, 2]
+#+END_EXAMPLE
+
+But =k a= will not give you more variants, unfortunately.
+
+*** Unit Conversion
+
+You load 16 tons, and what do you get? I mean, in kilograms.
+
+#+BEGIN_EXAMPLE
+M-x calc
+' 16 tons (' to enter algebraic mode, so you can type out the units)
+u c kg (u c for "unit convert", and kg being the target unit).
+
+Result:
+1: 14514.95584 kg
+#+END_EXAMPLE
+
+Calc treats units as special. If you added something, such as:
+
+#+BEGIN_EXAMPLE
+3
++
+
+Result:
+1: 14514.95584 kg + 3
+#+END_EXAMPLE
+
+But you can remove the units from the above using:
+#+BEGIN_EXAMPLE
+u r (remove units)
+
+Result:
+1: 14517.95584
+#+END_EXAMPLE
+
+OK, that's all well and good. But I've always wondered how much is Grandpa
+Simpson's gas mileage when he said "My car gets 40 rods to the hogshead and
+that's the way I likes it."
+
+For that, we need to define the units. Calc knows about a lot of units, but
+maybe not the rod and hogshead. In fact, in the calc info pages, defining what a
+"rod" is the example for how to define your own units. Let's get started!
+
+#+BEGIN_EXAMPLE
+'16 ft (The equivalent to one rod)
+u d rod Rod (defines a new unit rod, with optional description "Rod")
+#+END_EXAMPLE
+Now a hogshead is a unit of measurement that varies by what liquid it contains.
+I don't know what the unit is for gasoline, but let's use sherry as a
+substitute, in which a hogshead is 245 liters.
+
+#+BEGIN_EXAMPLE
+'245 liters
+u d hogshead (don't bother with a description this time)
+'40 rod
+'1 hogshead
+/
+#+END_EXAMPLE
+Wait, what units should we be using?
+#+BEGIN_EXAMPLE
+u v (show the units table, a handy table of all units)
+u c mi/gal (the units come from the unit table)
+
+Result:
+1: 1.87280731429e-3 mi / gal
+#+END_EXAMPLE
+
+But wait, we can do better. Why upgrade this measure to something that isn't
+even standard? Miles per gallon is just a bit better than rods per hogshead (in
+fact, that was what the original joke was about).
+
+#+BEGIN_EXAMPLE
+u c si (convert everything to scientific units)
+
+Result:
+1: 796.212244896 / m^2
+#+END_EXAMPLE
+
+Not that I understand this number, but at least in miles per gallon, I can see
+that that's not such great fuel economy, but what you do expect from Grandpa?
+
+OK, one more cool thing, then I'm out of here. Calc can split up numbers into
+multiple units. Here's 42 inches in feet and inches:
+
+#+BEGIN_EXAMPLE
+'42 in
+u c ft+in (Convert to a mixture of feet and inches)
+
+Result:
+1: 3 ft + 6. in
+#+END_EXAMPLE
+
+Calc, you're sooo coool!
+
+*** Pi and Precision
+
+This one's about p and P and mostly about pi.
+
+First, let's pi it up:
+
+#+BEGIN_EXAMPLE
+M-x calc
+P (this gives you pi)
+
+Result:
+1: 3.14159265359
+#+END_EXAMPLE
+
+Well, I guess that's a reasonable pi. But, c'mon, this is calc. Can't we get a
+bit more digits? How about 100?
+
+#+BEGIN_EXAMPLE
+p 100 (sets precisions to 100)
+P (need to ask calc again for pi, it doesn't recalculate)
+
+Result:
+1: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
+#+END_EXAMPLE
+
+Well, but actually evaluating it robs it of its never-ending charm. Let's just
+use it as a variable. How about calculating the area of a circle with a 5 km
+radius?
+
+#+BEGIN_EXAMPLE
+'5000 m
+2
+^
+'pi (enter pi as a variable)
+*
+
+We get:
+1: 25000000 m^2 pi
+#+END_EXAMPLE
+
+Yeah, sure that’s what I said I wanted, but I’ve changed my mind - now I want a number.
+
+#+BEGIN_EXAMPLE
+=
+
+1: 78539816.3397448309615660845819875721049292349843776455243736148076954101571552249657008706335529267 m^2
+#+END_EXAMPLE
+
+Whoops, looked like I forgot to set the precision back to normal. And I can't
+read this. Let's make it a bit nicer.
+
+#+BEGIN_EXAMPLE
+Control-_ (normal emacs undo)
+p 7
+d g (turn digit grouping on)
+=
+
+Result:
+1: 7.853983e7 m^2
+#+END_EXAMPLE
+
+Oh, that's because I didn't have enough precision to render it without resorting
+to scientific notation. Let's just bump the precision up again.
+
+#+BEGIN_EXAMPLE
+Control-_ (undo, since we have to redo the pi conversion with more precision)
+p 10
+=
+
+Result:
+1: 78,539,816.35 m^2
+#+END_EXAMPLE
+
+Ah, that's better.
+
+*** Strings
+
+Did you know you could work with strings in calc? For an example, let's find out
+what "Hello world" is in binary:
+
+#+BEGIN_EXAMPLE
+M-x calc
+d 2 (change the to binary mode)
+"Hello world (Enter the string "Hello world" which turns into a vector of numbers)
+
+Result:
+1: [2#1001000, 2#1100101, 2#1101100, 2#1101100, 2#1101111, 2#100000, 2#1110111, 2#1101111, 2#1110010, 2#1101100, 2#1100100]
+#+END_EXAMPLE
+
+And similarly, we can convert back. If someone gave you the binary number:
+=01001000011011110110110001100001= and asked what the string was, I'd have no
+idea... but calc knows:
+
+#+BEGIN_EXAMPLE
+d " (changes to string mode)
+C-x b scratch (whaaa, leave calc?)
+01001000011011110110110001100001 (enter the number we're parsing)
+C-a (go to the start of the line)
+C-x ( (start a macro)
+2# (prefix the number with a binary indicator)
+C-u 8 C-f (Jump forward 8 characters)
+ (insert a space to separate the numbers)
+C-x ) (end the macro)
+C-x e (repeat the macro)
+e e (repeat twice twice more)
+C- (set mark)
+C-a (goto beginning of line)
+C-x g (copy region into calc)
+
+Result:
+
+1: "Hola"
+#+END_EXAMPLE
+
+And there you have it! Maybe there is an easier way to convert from the giant
+binary number to a vector of bytes, but I don't know it yet.
+
+*** Fractional Arithmetic
+
+This one is pretty short, but it's about one of my favorite features of calc:
+the ability to handle fractions as fractions instead of rendering them as real
+numbers.
+
+Quick, what's =5/8 + 9/21=?
+
+Um, ok... better start multiplying things... wait, let's just tell calc to do
+it.
+
+#+BEGIN_EXAMPLE
+M-x calc
+5:8 (this is how you enter a fraction)
+9:21
++
+
+Result:
+1: 59/56
+#+END_EXAMPLE
+
+So easy! If we want to convert it to a float you can do this:
+
+#+BEGIN_EXAMPLE
+c f (convert to
+float)
+
+Result:
+
+1: 1.05357142857*10.^0
+#+END_EXAMPLE
+
+And if you want it back as a fraction, then just do:
+
+#+BEGIN_EXAMPLE
+c F (convert to fraction)
+
+Result:
+
+1: 59/56
+#+END_EXAMPLE
+
+That's so awesome!
+
+You could also enter fractions this way:
+
+#+BEGIN_EXAMPLE
+m f (set fraction mode, integer division will result in fractions)
+5
+8
+/
+
+Result:
+
+1: 5/8
+#+END_EXAMPLE
+
+Now you can live in the nice world of fractions as much as you like. It's a nice
+world, full of pleasant to look at integers taking up little horizontal space
+
+*** Algebra
+
+I think it's time to write about one of the amazing things that calc can do:
+algebra!
+
+Before we get into how to solve equations, I just want to write about on some
+cool things you can do with the calc display.
+
+Let's say you have a formula you want to work with =a + sqrt(b) = 5=. Let's enter
+that into calc:
+
+#+BEGIN_EXAMPLE
+M-x calc
+'a + sqrt(b) = 5 (' starts algebraic mode).
+
+Result:
+1: a + sqrt(b) = 5
+#+END_EXAMPLE
+
+Well, that's not so surprising, that's what we put in. Kind of disappointing,
+though. Is that it calc? We love your brains, but what about your looks? That's
+important too!
+
+#+BEGIN_EXAMPLE
+d B (turn on calc-big-language mode)
+
+Result:
+ ___
+1: a + V b = 5
+#+END_EXAMPLE
+
+Hey, that's an ASCII square-root symbol. What other cool things can you do here?
+
+#+BEGIN_EXAMPLE
+a^2
+
+Result:
+
+ 2
+1: a
+
+3:4 (enter the fraction 3/4)
+
+Result:
+
+ 3
+1: -
+ 4
+#+END_EXAMPLE
+
+Here's how to get back:
+#+BEGIN_EXAMPLE
+d N (calc-normal-language)
+#+END_EXAMPLE
+
+And an alternative, in which all operators are explicitly represented as
+functions:
+
+#+BEGIN_EXAMPLE
+1: a + sqrt(b) = 5 (re-enter the formula)
+d U (calc-unformatted-language)
+
+Result:
+1: eq(add(a, sqrt(b)), 5)
+#+END_EXAMPLE
+
+But, wait, did you think that's all? What if you wanted to enter that equation
+in Mathematica?
+
+#+BEGIN_EXAMPLE
+d M (calc-mathematica-language)
+
+Result:
+
+1: a + Sqrt[b] == 5
+#+END_EXAMPLE
+
+Ooh! Calc! Do c++ next!
+
+#+BEGIN_EXAMPLE
+d C (calc-c-language)
+
+1: a + sqrt(b) == 5
+#+END_EXAMPLE
+
+Latex!
+
+#+BEGIN_EXAMPLE
+d L (calc-latex-language)
+
+Result:
+
+1: a + \sqrt{b} = 5
+#+END_EXAMPLE
+
+I could keep going, but trust me, there's more. And you can even define your own
+languages by constructing syntax tables, but I won't get into that now.
+
+*** More on Algebra
+
+Jim is 42 years old. He has one brother, and their total age is 100. What is the
+brother's age? OK, this isn't a very hard problem, but let's just introduce calc
+algebra by solving it.
+
+#+BEGIN_EXAMPLE
+M-x calc
+'42 + x = 100 (' to enter algebraic input)
+a S x (solve for x)
+
+Result:
+1: x = 58
+#+END_EXAMPLE
+
+Let's make this harder. Jim and Dan's ages sum to 100. Jim is 5 years older than
+Dan. How old are they?
+
+#+BEGIN_EXAMPLE
+'[j + d = 100, d + 5 = j]
+a S j,d
+
+Result:
+1: [j = 52.5, d = 47.5]
+#+END_EXAMPLE
+
+Nice!
+
+And of course it can give you more than just numerical solutions:
+
+#+BEGIN_EXAMPLE
+'sin(x) + tan(y) = pi / 2
+a S y (solve for y)
+
+Result:
+1: y = arctan(pi / 2 - sin(x))
+#+END_EXAMPLE
+
+Sometimes there are more than one solution. For example:
+#+BEGIN_EXAMPLE
+'x^2 = 25
+a S x
+
+Result:
+1: x = 5
+#+END_EXAMPLE
+
+Wait, what happened to -5! That's a valid solution, why didn't calc tell us
+about it? What's happening here is that calc is telling us about the first valid
+thing it can find, which is basically how it operates. But you can always get
+everything:
+
+#+BEGIN_EXAMPLE
+'x^2 = 25
+a P x (find the polynomial solutions)
+
+Result:
+1: [5, -5]
+#+END_EXAMPLE
+
+Sometimes there aren't a finite number of results because you aren't dealing
+with polynomials. You can just get a generalized solution:
+
+#+BEGIN_EXAMPLE
+'sin(x)^2 = 25
+H a S x (solve for x, giving the generalized solution)
+
+Result:
+1: x = arcsin(5 s1) (-1)^n1 + 180 n1
+#+END_EXAMPLE
+
+This uses the calc notation =n1=, which you just means any integer. You can also
+see another notation =s1= which means any sign. In this case =5 s1= means that that
+number can be 5 or -5.
+
+Looking at how awesome calc is, it's just a shame I never knew about it in high
+school...
+
+*** Financial
+
+I recently chatted with emacspeak creator T.V. Raman, and told him I was
+writing a series of short tutorials about calc. He is really a calc fanatic, and
+told me a story in which he astounded a loan officer by calculating scheduled
+loan payments with just a few keystrokes in calc. Raman is living proof that
+calc is a useful tool for so many situations, and it always pays to have emacs
+running. He also mentioned that he found the explanation in the calc tutorial
+about the financial functions to be the clearest he's ever read.
+
+So, yes, calc can do finance. Let's say that you were sitting in front of a loan
+officer, and she told you that for your loan of $500,000, you need to pay in 30
+installments with a 5% interest rate. How much do you need to pay each month?
+Wait a second! Stop right there, loan officer! I have calc!
+
+#+BEGIN_EXAMPLE
+M-x calc
+500000 (the amount of the loan)
+30 (the number of payments)
+'5% (equivalent to typing 0.05)
+b M (calc-fin-pmt, computing the amount of periodic payments to amortize a loan)
+
+Result:
+1: 25,000
+#+END_EXAMPLE
+
+OK, but that's a bit obvious, since $25,000 is just 5% of $500,000. If the
+number of payments was much smaller, we'd get a larger value. Let's take another
+question: if you wanted to only pay $10,000 in each installment? How many
+installments would it take to pay off the loan?
+
+#+BEGIN_EXAMPLE
+'5%
+10000 (the payment we want to make)
+500000 (the loan amount)
+b # (calc-fin-nper, calculate the number of installments needed)
+
+Result
+1: nper(0.05, 10,000, 500,000)
+#+END_EXAMPLE
+
+What? Oh, I see, I also go the message: "Payment too small to cover interest
+rate: 10000". Oh, right, 5% of $500,000 is already $25,000, so we'd never pay it
+off at that rate. What if we payed $50,000 instead?
+
+#+BEGIN_EXAMPLE
+'5%
+50000 (the payment we want to make)
+500000 (the loan amount)
+b #
+
+Result:
+1: 14.2066908
+#+END_EXAMPLE
+
+So, it would take just over 14 payments to pay off the loan.
+
+OK, one more cool one: Let's say you meet an investment banker who gives you the
+following deal. I've got a investment for you, she says. Just give me $100,000
+and I'll give you $10,000 at the end of each year for the next 12 years.
+Assuming the interest rate will stay at 3% for the next 12 years. Is it a good
+deal?
+
+Hey, what are you asking me for? I have no idea! Calc knows, though, because it
+can tell you the break-even point for the cost of an investment that gives
+periodic payments.
+
+#+BEGIN_EXAMPLE
+'3% (the interest rate)
+12 (the number of payments)
+10000 (the payment you get each time)
+b P (calc-fin-pv, calculate the "present value" of the investment, the break-even point for the investment)
+
+Result:
+1: 99,540.0399357
+#+END_EXAMPLE
+
+In other words, the break-even point for the initial cost is $99,540. If the
+investment costs more than this, it's no good at that assumed interest rate.
+Better reject the deal. Trust calc more than any investment banker.
+
+This is just a small sampling of some of the financial calculations that calc
+can perform. The next time you are making an investment, fire up calc. You'll
+not only have confidence in the deal, you may just amaze someone with the power
+of emacs, just like T.V. Raman did.
+
+*** Calculus
+
+Quick, integrate =2x + sin(y)=! Well, frankly, it's been so long since I've done
+calculus by hand I can't remember anymore. Well, knowing calculus is good, but
+knowing calc is even more useful!
+
+#+BEGIN_EXAMPLE
+M-x calc
+'2x + sin(y) (The single quote enters algebraic mode)
+a i y (Calculate the integral with respect to y)
+
+Result
+1: 2 x y - 180 cos(y) / pi
+#+END_EXAMPLE
+
+You can also integrate over specific regions by using C-u a i, whereupon it will
+prompt you for the start and end point of the integration.
+
+As the manual mentions, the results are often not as simplified as they could
+be. Calc is impressive, but it isn't as sophisticated as Mathematica.
+
+An example of some issues are if we just take the derivative of the integral we
+just calculated. We should get back to our original formula.
+
+#+BEGIN_EXAMPLE
+a d y (Calculate the derivative with respect to y)
+
+Result:
+1: 2 x + 3.14159265358 sin(y) / pi
+#+END_EXAMPLE
+
+Clearly this should be 2x + sin(y), but calc may have made an error.
+
+OK, let's make calc do something cool so we can forget this unfortunate
+incident. Hey, how about making a Taylor series of a function?
+
+#+BEGIN_EXAMPLE
+'2x + sin(y) (re-enter the formula)
+a t y 6 (Calculate the Taylor series of a term, over y, for 6 terms)
+
+Result:
+1: 2 x + y - y^3 / 6 + y^5 / 120 - y^7 / 5040 + y^9 / 362880
+#+END_EXAMPLE
+
+This isn't a bad approximation, see [[https://www.google.com/search?q=y+-+y%5E3+%2F+6+%2B+y%5E5+%2F+120+-+y%5E7+%2F+5040+%2B+y%5E9+%2F+362880][Google’s answer]] for comparison.
+
+So, yes, calc can do college-level math, even if the answers aren't perfectly
+simplified. It's not Mathematica, but it is free and integrated into emacs, so
+it's definitely nice to have.
+
+*** Bit Manipulation
+
+Quick! What bits are set on the number 925817? What, are you going to convert it
+to binary and note positions of 1s? Ha! I laugh at such primitive techniques.
+
+#+BEGIN_EXAMPLE
+M-x calc
+925817
+b u (unpack the bits into a vector)
+
+Result
+1: [0, [3 .. 6], 13, [17 .. 19]]
+#+END_EXAMPLE
+
+How many bits is that?
+
+#+BEGIN_EXAMPLE
+v # (count the number of items in a vector)
+
+Result:
+1: 9
+#+END_EXAMPLE
+
+This is convenient! So yes, calc has some nice functions for binary numbers. The
+interesting thing about calc's binary number functions aren't just that you can
+do bitwise operations such as AND and OR, but it has the notion of a word size
+that it works with. Well, it'd have to do things like NOT.
+
+Let's check it out. First, we'll see what the number 925817 looks like in binary.
+
+#+BEGIN_EXAMPLE
+925817
+d 2
+
+Result:
+1: 2#11100010000001111001
+#+END_EXAMPLE
+
+This is nice, but it'd be better to see the whole word.
+
+#+BEGIN_EXAMPLE
+d z (Display leading zeroes)
+
+Result:
+1: 2#00000000000011100010000001111001
+#+END_EXAMPLE
+
+Ah, that's more like it. The word size by default is 32 bits, as you can see.
+Or, wait, can you see? Hard to count. Let's verify it.
+
+#+BEGIN_EXAMPLE
+d 0 (go back to base-10 mode)
+0 (we start with 0)
+b n (calculate the not)
+
+Result:
+1: 4294967295
+#+END_EXAMPLE
+
+Now we already know how to count the 1's...
+
+#+BEGIN_EXAMPLE
+b u v #
+
+Reuslt:
+
+1: 0000000032
+#+END_EXAMPLE
+
+Whoops, looks like we still have leading 0s. But we've confirmed it, so let's just let it go for now.
+
+Now, let's see what the number 925817 is if you reverse all the bits. I can't
+take credit for this particular bit of cleverness, this technique comes straight
+from calc's info pages.
+
+#+BEGIN_EXAMPLE
+d z (get rid of leading 0s)
+925817
+b u (unpack into a vector)
+31 - (tranform each bit position by subtracting it from 31, the tab just switches the items around on the stack)
+b p (repack the vector)
+
+Result:
+1: 2651090944
+#+END_EXAMPLE
+
+Woody Allen once praised New York by saying how he loves that you can go to
+Chinatown and eat a crab in the middle of the night, but in reality what kind of
+crazy person would need to do that? I feel the same way about all these
+features. Will I really ever need to reverse the bits of a number? Not sure, but
+I do love the way that calc has me covered for whatever I really want to do.
+
+By the way, want to go to 64-bit mode? Just change the word size.
+
+#+BEGIN_EXAMPLE
+b w 64 (change the word size to 64)
+#+END_EXAMPLE
+
+Now let's reverse the bits of 925817 again to see what we get. It'll be
+amusingly huge!
+
+#+BEGIN_EXAMPLE
+925817
+b u (unpack into a vector)
+63 - (tranform each number by subtracting it from 31, the tab just switches the items around on the stack)
+b p (repack the vector)
+
+Result:
+1: 11386348903201767424
+#+END_EXAMPLE
+
+Ah, that's what it was. I was just about to give that same answer myself.
+
+One more cool thing. If you give a negative word size, calc will interpret
+binary number as 2's complement numbers. For example:
+
+#+BEGIN_EXAMPLE
+b w 32 (set the word size to 32)
+2 (just to choose a simple number)
+b n (bitwise not)
+
+Result:
+1: 4294967293
+#+END_EXAMPLE
+
+And now with 2's complement!
+
+#+BEGIN_EXAMPLE
+b w -32 (set the word size to -32, in other words, a 2's complement version of 32 bit)
+2
+b n
+
+Result:
+1: -3
+#+END_EXAMPLE
+
+Hope this helps you twiddle those bits in all the ways that make you happy.
-- Load custom themes with ~customize-themes~ instead of calling ~load-theme~
- directly. However, this does not set ~custom-enabled-themes~ correctly
- (Emacs 26.1), so directly customizing ~custom-enabled-themes~ seems to be the
- best thing (although one has to know the names of the themes then).