11 Years of Writing About Emacs

There are about 6 hundred pages of tutorials on this site. About 140 pages are
emacs tutotial, 100 are elisp language tutorial, 70 are elisp commands or scripts tutorial, and the rest 300
are tutorials on
keybinding, essays on keyboard,
on Repetitive Strain Injury,
my packages, bug reports/records/fixes,
emacs modernization suggestions,
commentaries and essays on emacs, emacs community, etc, such as:

code update. Lots of them are enhanced commands, which i use and regularly improve. New features, or fix bugs.

emacs, like every other software, changes. I have to keep up. Command name changes, keys change, packages obsoletion, function obsoletion, new feature to do X. All these happens. For example, lexical scope, CL package, magit keys and commands kept changing, etc.

Writing improvement. Correct typo, improve sentence, or change style, structure, or rewrite whole. Yes. Many tutorial pages began life as blog from a decade ago. Blog tends to be chatty and potshot, and tends to become obsolete fast. They need to be professionalized as tutorial proper. Covering lots topics, organization, structured.

What Tools Are Used to Build This Site?

emacs, of course. The following i use daily, and are the main tools to create this site:

xah-fly-keys.el

xah-html-mode.el

xah-css-mode.el

xah-js-mode.el

xah-find.el

htmlize.el (for syntax coloring code in html)

rsync

and lots of personal emacs commands in my init file.

I basically write it manually, or semi-manually, with lots of help
of custom emacs commands.
In the very beginning, every html tag is typed manually, char by char.
Now, set of tags are inserted by emacs command on demand.

Though, i must say, I think my system is faster,
less keystrokes, more flexible, more efficient — in a scientifically
verifiable way, than any content management system or publishing
system out there. org, markdown, wordpress, jekyll, zen,
what-have-you.

(actually, the above is not too surprising. Because, if you know a subject well, deeply customized system is far more efficient than any off-the-shelf system, and also, you have precise control.)

the bottom line is that, if you pull out lines from
custom-set-variables
and change it to setq, it may not work.

i wasn't too pleased about this. This means, the
defcustom
is more complex than otherwise
acting as defvar with a User Interface.

on this subject, there's the question about whether emacs's customize system is a good thing.
(it was controversial).
I think it's a mixed bag.

There's elisp, which is the core of all emacs and all
customization. Why should we add a layer? Now, there are 2 ways to do
the same thing. Also, the Graphical User Interface layer isn't
complete, as not all customization can be done with it. (e.g. hooks,
which is rather quite common and basic.) On the other hand, it does
provide a explicit structure to declare what variables are user
preference related, and with it, a text based graphical user
interface.

but, it isn't a full system, and is not required nor enforced in
packages. The consequence of this is that, there's inconsistency.

in general, coding in elisp is full of slack. There's no API,
nothing is enforced, and you can do something low level or high level
or whichever way. This is intentional from rms. XEmacs had packages
since 1991 or so. rms refused it, till recently. I think rms believes
this shapelessness helps propagate FSF free software. As in, it forces
people to dig into code, and thwarts black box API.

emacs custom-set-variables vs setq

Something strange is going on. It seems, pulling things out of the
custom-set-variables
no longer works?

Here's the test. Put the following in your init, nothing but just the following:

(custom-set-variables;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(minibuffer-prompt-properties
(quote
(read-only t cursor-intangible t face minibuffer-prompt))))

Restart emacs. Then, Alt+xquery-replace and hold left arrow key to see if cursor went over the prompt. Cursor will not move into the prompt.