Xah Emacs Blog Archive 2017-12
Emacs: Xah Fly Keys now supports programer's dvorak layout. That is, dvorak with number/symbol row swapped. Thanks to akater.
updated. Fixed a bug for
xah-show-in-desktop, in MacOS, when current directory is empty.
Thanks to FSF/GNU, and 2 Kinds of Thanks
first, i like to say i'm thankful to FSF. No, i was a fanatic of rms, and has been ban'd in mailing lists (around 2002) for pro fsf/gnu/rms harsh opinions. People have called me a rms fanboy.
but, i don't like criticism of fsf/gnu/rms gets voted down for disagreement of opinion than lack of points.
as to appreciation, we, need to thank our mom. She gave birth to us. But we need to thank our dad too, else, we wouldn't exist. Then, we need to thank society, because mom and dad can't survive by themselves. And, we need to thank our firemen, for, he protects us, and soldiers. Thanks to our teachers and philosophers too, sans of which, i haven't clawed your eyeballs out yet.
there are 2 kinds of thanks. One is which they do by themselfs. The previous paragraph, are such. Your mom and dad no really need thanks from you because they'd birthed someone else anyway.
the other thanks, is person do because of you and for you sans necessity. If i give you a buck, or been kind to you, you thank me, a dear thank, because i don't have to. In this regard, the average parents, firemen, soldier, teacher, family, your church, school, company, government, don't qualify. But particular good persons, qualify. I have many people in emacs community am thankful to in this regard, too.
Emacs: Remapping Keys Using key-translation-map (minor update)
emacs history: major changes in emacs core
- 1985-07-15, Emacs 16.56
- 1985-12-20, Emacs 17.36
- 1986-10-02, Emacs 18.24
- 1992-10-31, Emacs 18.59
- 1994-11-01, Emacs 19.28 • Initial support for X
- 1996-08-22, Emacs 19.34
- 1997-09-15, Emacs 20.1 • Support for non-ASCII text.
- 1997-09-20, Emacs 20.2
- 1998-08-19, Emacs 20.3
- 1999-07-12, Emacs 20.4
- 2001-10-28, Emacs 21.1. • New display engine with support for variable-size fonts and TTY colors in Emacs 21.
- 2002-03-18, Emacs 21.2.
- 2003-03-24, Emacs 21.3.
- 2005-02-06, Emacs 21.4.
- 2007-06-02, Emacs 22.1.
- 2008-03-26, Emacs 22.2.
- 2008-09-05, Emacs 22.3.
- 2009-07-29, Emacs 23.1. • Unicode-based internal representation of text in Emacs 23. • Emacs client/server. • Visual lines. (down arrow key moves by visual line) • New font engine. Now support OS's fonts.
- 2010-05-08, Emacs 23.2. • open large files, up to 512 mb.
- 2011-03-10, Emacs 23.3.
- 2012-01-29, Emacs 23.4.
- 2012-06-10, Emacs 24.1. • Bidirectional text display
- 2012-08-27, Emacs 24.2.
- 2013-03-11, Emacs 24.3.
- 2014-10-20, Emacs 24.4.
- 2015-04-10, Emacs 24.5.
- 2016-09-17, Emacs 25.1.
- 2017-04-21, Emacs 25.2.
- 2017-09-11, Emacs 25.3.
- 2018, Emacs 26. • Concurrency/threads
(ones before emacs 23 are listed by Eli Zaretskii, a long time core emacs developer. https://www.reddit.com/r/emacs/comments/7kpwmb/how_much_has_emacs_core_changed_over_the_years/drgtqyx/ )
for details, see
emacs, best simple package source code to learn from?
someone asked on reddit.
well, i run a emacs tutorial on writing major modes. If you haven't seen already, The topics covered are:
How to Write Major Mode
- 1. Syntax Coloring
- 2. Simple Example html6-mode
- 3. Font Lock Mode
- 4. Define Font/Face
- 5. Comment Coloring
- 6. Comment Command
- 7. Own Comment Command
- 8. Keyword Completion
- 9. Create Keymap
- 10. Function Templates
- 11. Text Properties
- 12. Overlay Highlighting
- 13. Doc Lookup Command
- 1. Major Mode Naming
- 2. What's “feature”?
- 3. require, load, load-file, autoload, feature
- 1. Syntax Table Tutorial
- 2. How to Find Syntax of a Character?
- 3. How to Modify Syntax Table Temporarily
- 4. Determine If Cursor is Inside String or Comment
- 5. Find Matching Bracket Character
if you read the emacs lisp manual, it recommends that the text-mode is a simple mode you can learn from.
For programing modes, i learned things from the builtin css-mode written by the previous emcas leader Stefan Monnier.
but other than that, i didn't learn writing mode much from looking at other modes. I learned mostly from reading elisp manual and writing your own, and looking at source code of arbitrary builtin functions when necessary.
emacs lisp: how to undefine a face
ido-completing-read doesn't take obarray
emacs, current problem is, ido-completing-read doesn't take obarray. very annoying. so now, like, i need to rewrite ido-mode
here's the problem. ido-completing-read doesn't take an obarray. (obarry is a special array that hold all elisp symbols) And that's probably why ido doesn't do M-x.
To use ido for M-x, you need to convert obarray to a list of strings. But you don't wannna do this everytime M-x is called. length of obarray is 15k.
Thus, a cache idea is born. So that's probably why smex has cache, probably as after thought. with added feature of sorting most frequently used command. But note, cache adds complexity, cuz now you have the issue of when to regenerate cache.
the emacs completion is truly a mess. The mothership don't change due to org problems, so you have a wild bunch packages trying to improve it, for the past 20 years. Note that, icomplete is from 1993. What really should be done is fix emacs completing-read (it's in C)
hippie-expand, complete-symbol, iswitch (now defunct), icicles, ido, ivy, helm, company, auto-complete, yasnippet, all tries to implement their own completion.
elisp, What's the difference between set and setq
someone asked on reddit. My answer:
but more detailed answer is here Elisp: Lisp Symbol
should a beginner programer learn emacs lisp?
someone asked on reddit.
here's my reply.
if you are new to programing, best is to read Emacs Lisp Intro by Robert J. Chassell
this is part of emacs. Just M-x info and you'll see it. (it's also on FSF website.)
this is for people who never programed before.
however, if you already know a programing language, it is a worst, useless, book. Because, you will have to scan 10 pages to learn 1 simple elisp thing. It'll be explaning what's a variable, function, loop, etc, intermixed with elisp stuff.
for beginner programer, should you learn elisp? it depends. Learn elisp does not hurt at all, nor will it be magic in teaching you something you won't find elsewhere.
The question is really, what do you prioritize.
If you want to customize emacs, yes, learn elisp. It is the only way.
If you are thinking maybe elisp is a stepping stone to get you over other programing or jobs meanwhile you still get value of customizing emacs, then, stop the fantasy right here. You better off to learn python, ruby, golang.
ivy mode minibuffer history corruption problem
Found a problem with ivy mode. If you run
repeat-complex-command, it bloats up your history like this:
emacs 26 force typing yes/no for deleting dir
emacs 26 dired deleting directory force user to type full “yes/no”. exceedingly annoying. apparently, it's hardcoded, bypassing yes-or-no-p alias to y-or-n-p
this is hardcoded in dired--yes-no-all-quit-help at dired.el
This is super annoying. Why's this change?
it used to be, the code calls yes-or-no-p, and user can alias it to y-or-n-p, so that typing y or n is enough.
emacs lisp byte code internal
here's a great article.
Chris Wellons is one of say top 5 elisp expert i know.
and i think he's about the only one, who writes emacs tech blog and writes well and in depth.
he not just know elisp in depth, but, programing and associated computer science.
i can't readily think of anyone else on emacs or emacs lisp.
most other elispers, when they have a blog or opinions, i find them idiotic.
emacs, recommended dropin replacements for standard packages
- smex instead of M-x.
- ivy. Replaces builtin ido, icomplete, M-x. (i started to use ivy just yesterday)
- ibuffer (builtin) instead of list-buffers.
- company-mode replaces complete-symbol and hippie-expand.
- xah-fly-keys replaces viper-mode.
- xah-find.el replaces grep, rgrep, dired-do-find-regexp-and-replace
- xah-elisp-mode replaces emacs-lisp-mode
- xah-reformat-lines instead of fill-region
- xah-toggle-letter-case instead of upcase-region, downcase-region, upcase-initials-region
- xah-insert-bracket-pair instead of electric-pair-mode
- xah-delete-backward-char-or-bracket-text instead of delete-backward-char
- xah-close-current-buffer replaces kill-buffer.
- xah-open-file-at-cursor replaces find-file-at-point
- xah-copy-line-or-region instead of kill-ring-save
- xah-comment-dwim instead of comment-dwim
ok. that's one too many.
now, a reverse replacement.
- emacs abbrev instead of yasnippet.
- basic emacs lisp, instead of s.el f.el, dash.el. (if any use it, i am like no thank you.)
- xah-extend-selection instead of expand-region mode.
The ones i consider actually harmful are:
* s.el f.el, dash.el, god mode, hydra.
They seem convenient, but actually don't do much, adds complexity and bloat. You can do what they do with plain emacs lisp trivially.
The ratio of power/simplicity is the key.
recommended dropin replacements for standard at reddit emacs
learn emacs source code to master computer science?
when i was younger, at one point i thought of studying emacs + elisp as a way of getting into or mastering “computer science”.
turns out, that was a very silly idea. You can master emacs source code but would learn basically 0 computer science and gain very little industrial coding skill. (as with respect to get a programing job. If you master emacs source code, but have no other coding experience, you probably won't find job. Sure you can, in the 1 job per year niche. (but, of course, for some, you might become star coder. But, for such person, he would be regardless of emacs.))
though, Matz the ruby guy, studied emacs lisp and created ruby, based on it.
its like this. Would you be a great writer, or get a writing job, if you, say, mastered Shakespere's play?
depends on what's your interest and goal, you probably better off to write a web app, read general programing book, computer science book, instead of looking into emacs source code.
but, if your focus is to contribute to emacs, then, yeah, and you do need to read emacs lisp manual.
as to how to approach emacs source code... i guess just dive in. e.g. say you don't like some command's behavior, or you find elisp lacking some function. You look at their source code, by describe-function, and soon you'll dig into from elisp to C. And, maybe, one thing leads to another.
from how to read and understand gnu emacs source code at reddit emacs
Hello, my name is rms, YOU belongs to me
ido-mode, but it doesn't cover M-x or C-h f.
icomplete-mode does, but
its UI is way inferior. and
hippie-expand adds to the total
each time these are brought up in emacs dev, one ball of philosophical flamewar flies, hundreds of debates and arguments, gouging each other's eyes. End result is nothing is done.
then, there's MELPA, of warlords, each oneupmanship other, for no money but fame. “Try Me”, “I'm Modern”, each bottle cries. And rms considered them foreign, wants people to fold to “GNU”, and sends an army to get them to switch from gpl2 to gpl3. Hello, my name is rms, YOU belongs to me.
Rms, lives in the woods, haven't been coding for like 20 years. Every few months, makes a outlandish statement. Like, Can somebody make emacs into Microsoft Word? What is magit? and why isn't it in GNU emacs? Can somebody make emacs change font size?
then, undying woodworkers crawl out of the woodwork, with suckling millennials, defending rms, like, a god. rms is always right. He sees the future!
The emacs dev list, has this culture of communism commune, where, every clueless joe is “equal”, and voices shit freely. So, any issue, is a debate ball, from all corners of the earth. No process. No rule. We are cooperative peace on earth, the heaven of equal opinions!
One'd expect that code contribution rules in emacs dev, at least. Well, get in line, regardless what celestial deity you are. Prostrate and bow to the GNU. Then, we might look at what your problem is. Then, mention ye code again. If it survives feast of opinions. Beg again. Maybe.
this emacs dev problem comes up every now and then thru the years, by many coders, big and small names, old and new. (reddit, hackernews) Each time, some, e.g. abo abo, eli, insist and deny, any problem whatsoever. gnu people are nice, emacs dev is smooth, rms is god, all's well.
Emacs: Copy/Cut Current Line If No Selection (minor code update. Now, when copy, don't print a message)
emacs 26 bug: Error in post-command-hook (ido-exhibit): (error "Attempt to modify read-only object" "goto-char") problem seems to be smex. but hard to debug.
reproduce: M-x smex, then type “go”
2018-03-24 fixed in GNU Emacs 26.0.91
what if Xah lead emacs
ok, comes to be thinking, what if i am to lead emacs.
ok, first thing, axe all platforms other than mac, windows, linux.
then, axe, without mercy, any deprecated or obsolete code that's more than 10 years old.
then, axe, the common lisp fk in emacs lisp. Aggressively suck in the newer replacement from melpa people.
then, axe, anything complex, and anything approaches of a hack.
ok, char limit. something like that.
How to Avoid Emacs Pinky (minor update. updated all hand toys.)
now on its own page
If you have a question, put $5 at patreon and message me.