Xah Lee
2009-02-03 14:36:13 UTC
A new project on emacs, here:
http://code.google.com/p/emacs2010/
For some detail, see:
http://code.google.com/p/emacs2010/wiki/DeveloperIntro
Hope you can join in. Thanks.
Here's a plain text version of the plan
----------------------------
=Plan=
The goal is to have a downloadable binary for Windows, Mac (and
possibly Linux too later).
This binary, will have init file somewhere that loads a bunch of elisp
files. These elisp files over-ride the emacs default behavior.
For any existing emacs installation, people should be able to load the
emacs2 files and have the emacs2 behavior.
The plan is subject to minor change depending on how things go. The
project is gonna be do-oriented. Don't want to plan too much and do
nothing.
===Summary===
• *Goal*: Average programer download emacs, use it, happy. They don't
have to suffer some “emacs way”. Emacs's power, is *fully* retained,
however.
• *Method*: simple few elisp files in a folder emacs2 that over-ride
emacs's defaults. The project should be entirely compatible with GNU
emacs's latest release. The elisp code must not be complex. Most will
just be turning on a existing emacs feature, changing a keyboard
shortcut, or removing a menu or providing some other elisp commands.
No change whatsoever is to the elisp system.
• *Emacs based modernization*. Any change, is based on emacs
operation. There will not be such things as pop-up dialogues (as in
AquaEmacs, Carbon Emacs), opening every file in new window
(AquaEmacs), having the Alt key popup menus as in (EmacsW32). The
“modernization” is just to get rid of emacs's 1980's terminologies,
keybindings, doc writings.
== Items to change ==
Here's explicit detail of items to change. List roughly from most
important to less. The importance is roughly based on the ratio
“impact” over “ease of fix”.
• Update emacs default keybinding. *Done*. For detail, see: [Why
Emacs's Keyboard Shortcuts Are Painful] and [ergoemacs]
• Have Z X C V as default shortcut for undo, cut, copy, paste. *Done*.
Use CUA-mode. Just need to turn it on. The undo shortcut is not in CUA
mode, but in [ergoemacs].
• Have text selection highlight. *Done*. Just need to turn on cua mode
or transient-mark-mode. (transient-mark-mode is on in emacs 23.)
• Have up/down arrow move by visual line. *Done*. (emacs 23 does this
by default)
• change undo and redo to behave like modern applications. *Done*.
(just include redo mode. Though, technically the redo mode has some
problems. It sometimes corrupt undo record or behave bad, and does not
attempt to get rid of emacs's undo of undos. However, redo mode is
considered good enough for emacs2.)
For some detailed rationale, see: [The Modernization of Emacs]
• Support minimum of standard shortcut set, for open, close, save,
save as, new, print, select all. *Done*. Part of [ergoemacs].
• Remove some menu items that are redundant, never used, out dated.
For example: games, psycho-therapist, 4 menus on one-time search
that's not used by anyone, lots of items under Help that are outdated
info and FSF propaganda. Only menu items that most useful should
remain (e.g. by usage statistics).
Mostly *Done*. See clean_menus.el in emacs2 bundle.
• Replace the abbreviations C-‹key› and M-‹key› by Ctrl+‹key› and Alt
+‹key› in all menus and inline doc. Should not be difficult. Look into
how describe-function's source.
• Replace all in Emacs manual's “Meta key” to “Alt key”. Basically,
replace only display issues and terminology visible for user. The
elisp system and its manual, will stick with (kbd "M-x") etc
notations. Because such change would be practically not workable, it
requires large rewrite of emacs. The logical basis of consistency
after the change is easy: emacs uses Alt. For historically reasons,
they are called Meta in elisp docs. (for some detail see
[Why Emacs's Keyboard Shortcuts Are Painful] and [Emacs's M-‹key›
Notation vs Alt+‹key› Notation]
)
This manual change should be trivial to do. I can do in few hours.
• in emacs manual, change the terminology of kill to cut, yank to
paste. Throughout. Easy to fix.
• in emacs manual, change the terminology of keybinding to keyboard
shortcut. Only when discussing “assign a shortcut” for programing
emacs contexts (read by programers), then use binding or keybinding.
Easy to fix.
• in emacs manual, switch the terminology of Window and Frame. Takes
some diligence to fix this correctly. The logic after this change is
this: for elisp coders or power users, they will learn than underneath
the terms window and frame are switched in elisp, because of
historical reasons. For most users who are not coding elisp, they
wouldn't need to know this terminology switch. To them, a window is
just a window like in every other app.
• fix emacs mode line. [Emacs's Mode Line Modernization Suggestions]
Probably not too difficult. Need to look into how mode line works.
• Get rid of the “scratch” buffer. Not trivial. Detail: [Suggestions
on Emacs's Scratch Buffer].
==less important==
the following are less important, their ratio of “impact”/“ease to
fix” is low.
• fix emacs letter case change commands. *Done*. Code in ergoemacs.
[Usability Problems With Emacs's Letter-Case Commands]
• Fix emacs's mark-word commands. Partially done. [Suggestions on
Emacs's mark-word Command]. The plan is that this a kbd shortcut
should progressively select larger semantic unit. [Extend Selection
By Semantic Unit]
• Fix emacs's fill- commands. See [Suggestions on Emacs's Line-
Cutting Commands]. The plan is that user should just press a button to
invoke a fill- command that automtically format the current semantic
unit. A semantic unit can be paragraph of english as done by fill-
paragraph, or can be code block, typically C-like lang's {} or
function definition, or delimited by two newline chars. For some
detail on how this would work for lisp code, see: [A Simple Lisp Code
Formatter]. For lisp code, this is currently in the works by Andy
Stewart.
• elisp's describe-function should work in all languages, not just
lisp. If the lang's doc does not come in info format, send user to
browser with pertinent url. Partially done. See: [Dictionary and
Reference Lookup with Emacs]
===small items==
• elisp-index-search should use current word for prompt. *Done* See:
[Suggestions on Emacs's Inline Doc]
• describe-function should include some links. See: [Suggestions on
Emacs's Inline Doc]
• Change Meta+Tab for command name completion to some other key. The
meta is alt, and alt+tab is used by windows, mac, linux for switching
apps. The fix is a bit tricky. When done, this should be part of the
ergoemacs file.
• change meta+tab in describe-function's result buffer to shift-tab,
for moving to the previous link. Because meta+tab is used by all 3
major OS to switch app. The fix is a bit tricky. When done, this
should be part of the ergoemacs file.
==Remote Future Plans==
Here are more items, they are in general just fancy thinking. Listed
here only as a record for communication of general ideas for this
project.
• Something urgently needs to be done with emacs html mode. This is a
MAJOR need, however, the fix is very difficult. See [Emacs's HTML Mode
Sucks]. nxhtml and nxml modes are currently work in progress by emacs
dev, good luck to them.
• Reduce emacs documentation by at least 1/3 of its bulk. Remove all
things modern users already know, such as concepts of copy, cut,
paste, paste board, opening files... etc. e.g. remove or reduce manual
nodes on: Basic, Minibuffer, M-x, Help, Mark, Killing, Yanking,
Accumulating Text, Major Modes, Indentation, Text, ... just about
every node in emacs manual. Most of them can be replaced with one
single paragraph, and possibly another single paragraph on tech detail
when appropriate (such as command name, elisp code, things having to
do with the emacs system).
• provide interface to gmail, yahoo, msn mail. (kinda as a replacement
of rmail's role in emacs) Also provide interface to google groups.
(can be added as part of gnus) Some detail here: [Emacs Should Support
HTML Mail].
These are modern ways. Nobody is using plain text clients today. Rmail
& gnus stays in emacs, of course, for those geekers.
• bundle e-blog and lj-update for easy update to google blogs and
livejournal. • possibly bundle nxhtml mode and quite a few others
really good ones and important, some of which are likely never to be
in GNU emacs due to author unwilling or other.
• relpace emacs doc from texinfo to html. A eventual ideal. [Emacs
Should Adopt HTML To Replace Texinfo].
Xah
∑ http://xahlee.org/
☄
http://code.google.com/p/emacs2010/
For some detail, see:
http://code.google.com/p/emacs2010/wiki/DeveloperIntro
Hope you can join in. Thanks.
Here's a plain text version of the plan
----------------------------
=Plan=
The goal is to have a downloadable binary for Windows, Mac (and
possibly Linux too later).
This binary, will have init file somewhere that loads a bunch of elisp
files. These elisp files over-ride the emacs default behavior.
For any existing emacs installation, people should be able to load the
emacs2 files and have the emacs2 behavior.
The plan is subject to minor change depending on how things go. The
project is gonna be do-oriented. Don't want to plan too much and do
nothing.
===Summary===
• *Goal*: Average programer download emacs, use it, happy. They don't
have to suffer some “emacs way”. Emacs's power, is *fully* retained,
however.
• *Method*: simple few elisp files in a folder emacs2 that over-ride
emacs's defaults. The project should be entirely compatible with GNU
emacs's latest release. The elisp code must not be complex. Most will
just be turning on a existing emacs feature, changing a keyboard
shortcut, or removing a menu or providing some other elisp commands.
No change whatsoever is to the elisp system.
• *Emacs based modernization*. Any change, is based on emacs
operation. There will not be such things as pop-up dialogues (as in
AquaEmacs, Carbon Emacs), opening every file in new window
(AquaEmacs), having the Alt key popup menus as in (EmacsW32). The
“modernization” is just to get rid of emacs's 1980's terminologies,
keybindings, doc writings.
== Items to change ==
Here's explicit detail of items to change. List roughly from most
important to less. The importance is roughly based on the ratio
“impact” over “ease of fix”.
• Update emacs default keybinding. *Done*. For detail, see: [Why
Emacs's Keyboard Shortcuts Are Painful] and [ergoemacs]
• Have Z X C V as default shortcut for undo, cut, copy, paste. *Done*.
Use CUA-mode. Just need to turn it on. The undo shortcut is not in CUA
mode, but in [ergoemacs].
• Have text selection highlight. *Done*. Just need to turn on cua mode
or transient-mark-mode. (transient-mark-mode is on in emacs 23.)
• Have up/down arrow move by visual line. *Done*. (emacs 23 does this
by default)
• change undo and redo to behave like modern applications. *Done*.
(just include redo mode. Though, technically the redo mode has some
problems. It sometimes corrupt undo record or behave bad, and does not
attempt to get rid of emacs's undo of undos. However, redo mode is
considered good enough for emacs2.)
For some detailed rationale, see: [The Modernization of Emacs]
• Support minimum of standard shortcut set, for open, close, save,
save as, new, print, select all. *Done*. Part of [ergoemacs].
• Remove some menu items that are redundant, never used, out dated.
For example: games, psycho-therapist, 4 menus on one-time search
that's not used by anyone, lots of items under Help that are outdated
info and FSF propaganda. Only menu items that most useful should
remain (e.g. by usage statistics).
Mostly *Done*. See clean_menus.el in emacs2 bundle.
• Replace the abbreviations C-‹key› and M-‹key› by Ctrl+‹key› and Alt
+‹key› in all menus and inline doc. Should not be difficult. Look into
how describe-function's source.
• Replace all in Emacs manual's “Meta key” to “Alt key”. Basically,
replace only display issues and terminology visible for user. The
elisp system and its manual, will stick with (kbd "M-x") etc
notations. Because such change would be practically not workable, it
requires large rewrite of emacs. The logical basis of consistency
after the change is easy: emacs uses Alt. For historically reasons,
they are called Meta in elisp docs. (for some detail see
[Why Emacs's Keyboard Shortcuts Are Painful] and [Emacs's M-‹key›
Notation vs Alt+‹key› Notation]
)
This manual change should be trivial to do. I can do in few hours.
• in emacs manual, change the terminology of kill to cut, yank to
paste. Throughout. Easy to fix.
• in emacs manual, change the terminology of keybinding to keyboard
shortcut. Only when discussing “assign a shortcut” for programing
emacs contexts (read by programers), then use binding or keybinding.
Easy to fix.
• in emacs manual, switch the terminology of Window and Frame. Takes
some diligence to fix this correctly. The logic after this change is
this: for elisp coders or power users, they will learn than underneath
the terms window and frame are switched in elisp, because of
historical reasons. For most users who are not coding elisp, they
wouldn't need to know this terminology switch. To them, a window is
just a window like in every other app.
• fix emacs mode line. [Emacs's Mode Line Modernization Suggestions]
Probably not too difficult. Need to look into how mode line works.
• Get rid of the “scratch” buffer. Not trivial. Detail: [Suggestions
on Emacs's Scratch Buffer].
==less important==
the following are less important, their ratio of “impact”/“ease to
fix” is low.
• fix emacs letter case change commands. *Done*. Code in ergoemacs.
[Usability Problems With Emacs's Letter-Case Commands]
• Fix emacs's mark-word commands. Partially done. [Suggestions on
Emacs's mark-word Command]. The plan is that this a kbd shortcut
should progressively select larger semantic unit. [Extend Selection
By Semantic Unit]
• Fix emacs's fill- commands. See [Suggestions on Emacs's Line-
Cutting Commands]. The plan is that user should just press a button to
invoke a fill- command that automtically format the current semantic
unit. A semantic unit can be paragraph of english as done by fill-
paragraph, or can be code block, typically C-like lang's {} or
function definition, or delimited by two newline chars. For some
detail on how this would work for lisp code, see: [A Simple Lisp Code
Formatter]. For lisp code, this is currently in the works by Andy
Stewart.
• elisp's describe-function should work in all languages, not just
lisp. If the lang's doc does not come in info format, send user to
browser with pertinent url. Partially done. See: [Dictionary and
Reference Lookup with Emacs]
===small items==
• elisp-index-search should use current word for prompt. *Done* See:
[Suggestions on Emacs's Inline Doc]
• describe-function should include some links. See: [Suggestions on
Emacs's Inline Doc]
• Change Meta+Tab for command name completion to some other key. The
meta is alt, and alt+tab is used by windows, mac, linux for switching
apps. The fix is a bit tricky. When done, this should be part of the
ergoemacs file.
• change meta+tab in describe-function's result buffer to shift-tab,
for moving to the previous link. Because meta+tab is used by all 3
major OS to switch app. The fix is a bit tricky. When done, this
should be part of the ergoemacs file.
==Remote Future Plans==
Here are more items, they are in general just fancy thinking. Listed
here only as a record for communication of general ideas for this
project.
• Something urgently needs to be done with emacs html mode. This is a
MAJOR need, however, the fix is very difficult. See [Emacs's HTML Mode
Sucks]. nxhtml and nxml modes are currently work in progress by emacs
dev, good luck to them.
• Reduce emacs documentation by at least 1/3 of its bulk. Remove all
things modern users already know, such as concepts of copy, cut,
paste, paste board, opening files... etc. e.g. remove or reduce manual
nodes on: Basic, Minibuffer, M-x, Help, Mark, Killing, Yanking,
Accumulating Text, Major Modes, Indentation, Text, ... just about
every node in emacs manual. Most of them can be replaced with one
single paragraph, and possibly another single paragraph on tech detail
when appropriate (such as command name, elisp code, things having to
do with the emacs system).
• provide interface to gmail, yahoo, msn mail. (kinda as a replacement
of rmail's role in emacs) Also provide interface to google groups.
(can be added as part of gnus) Some detail here: [Emacs Should Support
HTML Mail].
These are modern ways. Nobody is using plain text clients today. Rmail
& gnus stays in emacs, of course, for those geekers.
• bundle e-blog and lj-update for easy update to google blogs and
livejournal. • possibly bundle nxhtml mode and quite a few others
really good ones and important, some of which are likely never to be
in GNU emacs due to author unwilling or other.
• relpace emacs doc from texinfo to html. A eventual ideal. [Emacs
Should Adopt HTML To Replace Texinfo].
Xah
∑ http://xahlee.org/
☄